From efa60d09fc271f254c1cc30198ef634d2cf6af1a Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 14 Jul 2025 09:31:22 +0200 Subject: [PATCH 01/25] Update CONTRIBUTING.md --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aaaa3de86..3bd5c8f8d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ # Contributing - Please understand that dotfiles are personal -- If you make new stuff, I'll probably nitpick as I want quality -- FFS pls make multiple PRs if you have many features 😭🙏 +- If you add new stuff, ask me first to not waste your work +- FFS make multiple PRs if you have many features From 631303bffe197646428b303e3638773e7abb1d49 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 14 Jul 2025 20:43:52 +0700 Subject: [PATCH 02/25] use quickshell for wallpaper --- .config/hypr/hyprland/execs.conf | 2 - .../ii/modules/background/Background.qml | 152 ++++++++++++++++++ .../backgroundWidgets/BackgroundWidgets.qml | 139 ---------------- .config/quickshell/ii/modules/bar/Bar.qml | 2 +- .../quickshell/ii/modules/common/Config.qml | 1 + .../ii/scripts/colors/switchwall.sh | 27 ++-- .../ii/scripts/images}/least_busy_region.py | 2 +- .../ii/services/FirstRunExperience.qml | 2 +- .config/quickshell/ii/shell.qml | 6 +- .../illogical-impulse-widgets/PKGBUILD | 1 - 10 files changed, 173 insertions(+), 161 deletions(-) create mode 100644 .config/quickshell/ii/modules/background/Background.qml delete mode 100644 .config/quickshell/ii/modules/backgroundWidgets/BackgroundWidgets.qml rename .config/{matugen/scripts => quickshell/ii/scripts/images}/least_busy_region.py (99%) diff --git a/.config/hypr/hyprland/execs.conf b/.config/hypr/hyprland/execs.conf index 33fc3ffb7..0d04c512e 100644 --- a/.config/hypr/hyprland/execs.conf +++ b/.config/hypr/hyprland/execs.conf @@ -1,7 +1,5 @@ # Bar, wallpaper exec-once = ~/.config/hypr/hyprland/scripts/start_geoclue_agent.sh & gammastep -exec-once = sleep 0.7; [ "$(hyprctl monitors -j | jq 'length')" -eq 1 ] && swww-daemon --format xrgb --no-cache || swww-daemon --format xrgb -exec-once = sleep 0.7; swww img "$(cat ~/.local/state/quickshell/user/generated/wallpaper/path.txt)" --transition-step 100 --transition-fps 120 --transition-type grow --transition-angle 30 --transition-duration 1 exec-once = qs -c $qsConfig & # Input method diff --git a/.config/quickshell/ii/modules/background/Background.qml b/.config/quickshell/ii/modules/background/Background.qml new file mode 100644 index 000000000..cfd0678b7 --- /dev/null +++ b/.config/quickshell/ii/modules/background/Background.qml @@ -0,0 +1,152 @@ +pragma ComponentBehavior: Bound + +import "root:/" +import "root:/modules/common" +import "root:/modules/common/widgets" +import "root:/services" +import "root:/modules/common/functions/color_utils.js" as ColorUtils +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Quickshell +import Quickshell.Io +import Quickshell.Wayland + +// TODO REMOVE BACKGROUNDWIDGETS + +Scope { + id: root + readonly property bool fixedClockPosition: Config.options.background.fixedClockPosition + readonly property real fixedClockX: Config.options.background.clockX + readonly property real fixedClockY: Config.options.background.clockY + + Variants { + // For each monitor + model: Quickshell.screens + + PanelWindow { + id: bgRoot + + required property var modelData + property string wallpaperPath: Config.options.background.wallpaperPath + // Position + property real clockX: modelData.width / 2 + property real clockY: modelData.height / 2 + property var textHorizontalAlignment: clockX < screen.width / 3 ? Text.AlignLeft : + (clockX > screen.width * 2 / 3 ? Text.AlignRight : Text.AlignHCenter) + // Colors + property color dominantColor: Appearance.colors.colPrimary + property bool dominantColorIsDark: dominantColor.hslLightness < 0.5 + property color colText: ColorUtils.colorWithLightness(Appearance.colors.colPrimary, (dominantColorIsDark ? 0.8 : 0.12)) + + // Layer props + screen: modelData + WlrLayershell.layer: WlrLayer.Bottom + WlrLayershell.namespace: "quickshell:background" + anchors { + top: true + bottom: true + left: true + right: true + } + color: "transparent" + + // Clock positioning + function updateClockPosition() { + leastBusyRegionProc.path = wallpaperPath // Somehow this is needed to make the proc correctly use the new path + leastBusyRegionProc.contentWidth = clock.implicitWidth + leastBusyRegionProc.contentHeight = clock.implicitHeight + leastBusyRegionProc.running = false; + leastBusyRegionProc.running = true; + } + onWallpaperPathChanged: { + // console.log("[Background] Wallpaper path changed to:", wallpaperPath) + bgRoot.updateClockPosition() + } + Process { + id: leastBusyRegionProc + running: true + property string path: bgRoot.wallpaperPath + property int contentWidth: bgRoot.screen.width + property int contentHeight: bgRoot.screen.height + command: [Quickshell.configPath("scripts/images/least_busy_region.py"), + "--screen-width", bgRoot.screen.width, + "--screen-height", bgRoot.screen.height, + "--width", contentWidth, + "--height", contentHeight, + path + ] + stdout: StdioCollector { + id: leastBusyRegionOutputCollector + onStreamFinished: { + const output = leastBusyRegionOutputCollector.text + console.log("[Background] Least busy region output:", output) + if (output.length === 0) return; + const parsedContent = JSON.parse(output) + bgRoot.clockX = parsedContent.center_x + bgRoot.clockY = parsedContent.center_y + bgRoot.dominantColor = parsedContent.dominant_color || Appearance.colors.colPrimary + } + } + } + + // Wallpaper + AnimatedImage { + z: 0 + anchors.fill: parent + source: bgRoot.wallpaperPath + fillMode: Image.PreserveAspectCrop + sourceSize { + width: bgRoot.screen.width + height: bgRoot.screen.height + } + } + + // The clock + Item { + id: clock + z: 1 + anchors { + left: parent.left + top: parent.top + leftMargin: (root.fixedClockPosition ? root.fixedClockX : bgRoot.clockX) - implicitWidth / 2 + topMargin: (root.fixedClockPosition ? root.fixedClockY : bgRoot.clockY) - implicitHeight / 2 + Behavior on leftMargin { + animation: Appearance.animation.elementMove.numberAnimation.createObject(this) + } + Behavior on topMargin { + animation: Appearance.animation.elementMove.numberAnimation.createObject(this) + } + } + + implicitWidth: clockColumn.implicitWidth + implicitHeight: clockColumn.implicitHeight + + ColumnLayout { + id: clockColumn + anchors.centerIn: parent + spacing: -5 + + StyledText { + Layout.fillWidth: true + horizontalAlignment: bgRoot.textHorizontalAlignment + font.pixelSize: 95 + color: bgRoot.colText + style: Text.Raised + styleColor: Appearance.colors.colShadow + text: DateTime.time + } + StyledText { + Layout.fillWidth: true + horizontalAlignment: bgRoot.textHorizontalAlignment + font.pixelSize: 25 + color: bgRoot.colText + style: Text.Raised + styleColor: Appearance.colors.colShadow + text: DateTime.date + } + } + } + } + } +} diff --git a/.config/quickshell/ii/modules/backgroundWidgets/BackgroundWidgets.qml b/.config/quickshell/ii/modules/backgroundWidgets/BackgroundWidgets.qml deleted file mode 100644 index 35f30534e..000000000 --- a/.config/quickshell/ii/modules/backgroundWidgets/BackgroundWidgets.qml +++ /dev/null @@ -1,139 +0,0 @@ -import "root:/" -import "root:/modules/common" -import "root:/modules/common/widgets" -import "root:/services" -import "root:/modules/common/functions/color_utils.js" as ColorUtils -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import Quickshell -import Quickshell.Io -import Quickshell.Wayland -import Quickshell.Hyprland -import Quickshell.Services.UPower - -Scope { - id: root - property string filePath: `${Directories.state}/user/generated/wallpaper/least_busy_region.json` - property real defaultX: (Config.options?.background.clockX ?? -500) - property real defaultY: (Config.options?.background.clockY ?? -500) - property real centerX: defaultX - property real centerY: defaultY - property real effectiveCenterX: Config.options?.background.fixedClockPosition ? defaultX : centerX - property real effectiveCenterY: Config.options?.background.fixedClockPosition ? defaultY : centerY - property color dominantColor: Appearance.colors.colPrimary - property bool dominantColorIsDark: dominantColor.hslLightness < 0.5 - property color colBackground: ColorUtils.transparentize(ColorUtils.mix(Appearance.colors.colPrimary, Appearance.colors.colSecondaryContainer), 1) - property color colText: ColorUtils.colorWithLightness(Appearance.colors.colPrimary, (root.dominantColorIsDark ? 0.8 : 0.12)) - - function updateWidgetPosition(fileContent) { - // console.log("[BackgroundWidgets] Updating widget position with content:", fileContent) - const parsedContent = JSON.parse(fileContent) - root.centerX = parsedContent.center_x - root.centerY = parsedContent.center_y - root.dominantColor = parsedContent.dominant_color || Appearance.colors.colPrimary - } - - Timer { - id: delayedFileRead - interval: Config.options.hacks.arbitraryRaceConditionDelay - running: false - onTriggered: { - root.updateWidgetPosition(leastBusyRegionFileView.text()) - } - } - - FileView { - id: leastBusyRegionFileView - path: Qt.resolvedUrl(root.filePath) - watchChanges: !Config.options?.background.fixedClockPosition - onFileChanged: { - this.reload() - delayedFileRead.start() - } - onLoadedChanged: { - const fileContent = leastBusyRegionFileView.text() - root.updateWidgetPosition(fileContent) - } - } - - Variants { // For each monitor - model: Quickshell.screens - - LazyLoader { - required property var modelData - readonly property HyprlandMonitor monitor: Hyprland.monitorFor(modelData) - activeAsync: !ToplevelManager.activeToplevel?.activated - component: PanelWindow { // Window - id: windowRoot - screen: modelData - property var textHorizontalAlignment: root.effectiveCenterX / monitor.scale < windowRoot.width / 3 ? Text.AlignLeft : - (root.effectiveCenterX / monitor.scale > windowRoot.width * 2 / 3 ? Text.AlignRight : Text.AlignHCenter) - - WlrLayershell.layer: WlrLayer.Bottom - WlrLayershell.namespace: "quickshell:backgroundWidgets" - - anchors { - top: true - bottom:true - left: true - right: true - } - color: "transparent" - // HyprlandWindow.visibleMask: Region { // Buggy with scaled monitors - // item: widgetBackground - // } - - Rectangle { - id: widgetBackground - property real verticalPadding: 20 - property real horizontalPadding: 30 - radius: 40 - color: root.colBackground - implicitHeight: columnLayout.implicitHeight + verticalPadding * 2 - implicitWidth: columnLayout.implicitWidth + horizontalPadding * 2 - anchors { - left: parent.left - top: parent.top - leftMargin: (root.effectiveCenterX / monitor.scale - implicitWidth / 2) - topMargin: (root.effectiveCenterY / monitor.scale - implicitHeight / 2) - Behavior on leftMargin { - animation: Appearance.animation.elementMove.numberAnimation.createObject(this) - } - Behavior on topMargin { - animation: Appearance.animation.elementMove.numberAnimation.createObject(this) - } - } - - ColumnLayout { - id: columnLayout - anchors.centerIn: parent - spacing: -5 - - StyledText { - Layout.fillWidth: true - horizontalAlignment: windowRoot.textHorizontalAlignment - font.pixelSize: 95 - color: root.colText - style: Text.Raised - styleColor: Appearance.colors.colShadow - text: DateTime.time - } - StyledText { - Layout.fillWidth: true - horizontalAlignment: windowRoot.textHorizontalAlignment - font.pixelSize: 25 - color: root.colText - style: Text.Raised - styleColor: Appearance.colors.colShadow - text: DateTime.date - } - } - } - - } - } - - } - -} diff --git a/.config/quickshell/ii/modules/bar/Bar.qml b/.config/quickshell/ii/modules/bar/Bar.qml index 27d5a6de9..08383c10e 100644 --- a/.config/quickshell/ii/modules/bar/Bar.qml +++ b/.config/quickshell/ii/modules/bar/Bar.qml @@ -3,7 +3,7 @@ import "root:/services" import "root:/modules/common/" import "root:/modules/common/widgets" import "root:/modules/common/functions/color_utils.js" as ColorUtils -import "root:/modules/bar/weather" +import "./weather" import QtQuick import QtQuick.Controls import QtQuick.Layouts diff --git a/.config/quickshell/ii/modules/common/Config.qml b/.config/quickshell/ii/modules/common/Config.qml index 1b9b1dd81..64f136517 100644 --- a/.config/quickshell/ii/modules/common/Config.qml +++ b/.config/quickshell/ii/modules/common/Config.qml @@ -98,6 +98,7 @@ Singleton { property bool fixedClockPosition: false property real clockX: -500 property real clockY: -500 + property string wallpaperPath: Quickshell.configPath("assets/images/default_wallpaper.png") } property JsonObject bar: JsonObject { diff --git a/.config/quickshell/ii/scripts/colors/switchwall.sh b/.config/quickshell/ii/scripts/colors/switchwall.sh index 0d9ffadbf..e0be2dacd 100755 --- a/.config/quickshell/ii/scripts/colors/switchwall.sh +++ b/.config/quickshell/ii/scripts/colors/switchwall.sh @@ -8,6 +8,7 @@ CONFIG_DIR="$XDG_CONFIG_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" CACHE_DIR="$XDG_CACHE_HOME/quickshell" STATE_DIR="$XDG_STATE_HOME/quickshell" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SHELL_CONFIG_FILE="$XDG_CONFIG_HOME/illogical-impulse/config.json" MATUGEN_DIR="$XDG_CONFIG_HOME/matugen" terminalscheme="$SCRIPT_DIR/terminal/scheme-base.json" @@ -59,14 +60,14 @@ post_process() { handle_kde_material_you_colors & # Determine the largest region on the wallpaper that's sufficiently un-busy to put widgets in - if [ ! -f "$MATUGEN_DIR/scripts/least_busy_region.py" ]; then - echo "Error: least_busy_region.py script not found in $MATUGEN_DIR/scripts/" - else - "$MATUGEN_DIR/scripts/least_busy_region.py" \ - --screen-width "$screen_width" --screen-height "$screen_height" \ - --width 300 --height 200 \ - "$wallpaper_path" > "$STATE_DIR"/user/generated/wallpaper/least_busy_region.json - fi + # if [ ! -f "$MATUGEN_DIR/scripts/least_busy_region.py" ]; then + # echo "Error: least_busy_region.py script not found in $MATUGEN_DIR/scripts/" + # else + # "$MATUGEN_DIR/scripts/least_busy_region.py" \ + # --screen-width "$screen_width" --screen-height "$screen_height" \ + # --width 300 --height 200 \ + # "$wallpaper_path" > "$STATE_DIR"/user/generated/wallpaper/least_busy_region.json + # fi } check_and_prompt_upscale() { @@ -227,10 +228,10 @@ switch() { else matugen_args=(image "$imgpath") generate_colors_material_args=(--path "$imgpath") - # Set wallpaper with swww - swww img "$imgpath" --transition-step 100 --transition-fps 120 \ - --transition-type grow --transition-angle 30 --transition-duration 1 \ - --transition-pos "$cursorposx, $cursorposy_inverted" & + # Update wallpaper path in config + if [ -f "$SHELL_CONFIG_FILE" ]; then + jq --arg path "$imgpath" '.background.wallpaperPath = $path' "$SHELL_CONFIG_FILE" > "$SHELL_CONFIG_FILE.tmp" && mv "$SHELL_CONFIG_FILE.tmp" "$SHELL_CONFIG_FILE" + fi remove_restore fi fi @@ -318,7 +319,7 @@ main() { ;; --noswitch) noswitch_flag="1" - imgpath=$(swww query | head -1 | awk -F 'image: ' '{print $2}') + imgpath=$(jq -r '.background.wallpaperPath' "$SHELL_CONFIG_FILE" 2>/dev/null || echo "") shift ;; *) diff --git a/.config/matugen/scripts/least_busy_region.py b/.config/quickshell/ii/scripts/images/least_busy_region.py similarity index 99% rename from .config/matugen/scripts/least_busy_region.py rename to .config/quickshell/ii/scripts/images/least_busy_region.py index a1f2f47b4..bad58bd87 100755 --- a/.config/matugen/scripts/least_busy_region.py +++ b/.config/quickshell/ii/scripts/images/least_busy_region.py @@ -257,7 +257,7 @@ def main(): parser.add_argument("-v", "--visual-output", action="store_true", help="Output image with rectangle") parser.add_argument("--screen-width", type=int, default=1920, help="Screen width for wallpaper scaling") parser.add_argument("--screen-height", type=int, default=1080, help="Screen height for wallpaper scaling") - parser.add_argument("--stride", type=int, default=4, help="Step size for sliding window (higher is faster, less precise)") + parser.add_argument("--stride", type=int, default=10, help="Step size for sliding window (higher is faster, less precise)") parser.add_argument("--screen-mode", choices=["fill", "fit"], default="fill", help="Wallpaper scaling mode: 'fill' (default) or 'fit'") parser.add_argument("--verbose", action="store_true", help="Print verbose output") parser.add_argument("-l", "--largest-region", action="store_true", help="Find the largest region under the variance threshold and output its center") diff --git a/.config/quickshell/ii/services/FirstRunExperience.qml b/.config/quickshell/ii/services/FirstRunExperience.qml index 5bdae4551..350c31593 100644 --- a/.config/quickshell/ii/services/FirstRunExperience.qml +++ b/.config/quickshell/ii/services/FirstRunExperience.qml @@ -27,7 +27,7 @@ Singleton { } function handleFirstRun() { - Quickshell.execDetached(["bash", "-c", `swww query | grep 'image' || '${Directories.wallpaperSwitchScriptPath}' '${root.defaultWallpaperPath}'`]) + Quickshell.execDetached([Directories.wallpaperSwitchScriptPath, root.defaultWallpaperPath]) Quickshell.execDetached(["bash", "-c", `qs -p '${root.welcomeQmlPath}'`]) } diff --git a/.config/quickshell/ii/shell.qml b/.config/quickshell/ii/shell.qml index 68d1502ff..a026342dd 100644 --- a/.config/quickshell/ii/shell.qml +++ b/.config/quickshell/ii/shell.qml @@ -6,7 +6,7 @@ //@ pragma Env QT_SCALE_FACTOR=1 import "./modules/common/" -import "./modules/backgroundWidgets/" +import "./modules/background/" import "./modules/bar/" import "./modules/cheatsheet/" import "./modules/dock/" @@ -30,7 +30,7 @@ ShellRoot { // Enable/disable modules here. False = not loaded at all, so rest assured // no unnecessary stuff will take up memory if you decide to only use, say, the overview. property bool enableBar: true - property bool enableBackgroundWidgets: true + property bool enableBackground: true property bool enableCheatsheet: true property bool enableDock: true property bool enableMediaControls: true @@ -53,7 +53,7 @@ ShellRoot { } LazyLoader { active: enableBar; component: Bar {} } - LazyLoader { active: enableBackgroundWidgets; component: BackgroundWidgets {} } + LazyLoader { active: enableBackground; component: Background {} } LazyLoader { active: enableCheatsheet; component: Cheatsheet {} } LazyLoader { active: enableDock && Config.options.dock.enable; component: Dock {} } LazyLoader { active: enableMediaControls; component: MediaControls {} } diff --git a/arch-packages/illogical-impulse-widgets/PKGBUILD b/arch-packages/illogical-impulse-widgets/PKGBUILD index ae26fc90e..9aa690dc2 100644 --- a/arch-packages/illogical-impulse-widgets/PKGBUILD +++ b/arch-packages/illogical-impulse-widgets/PKGBUILD @@ -13,7 +13,6 @@ depends=( hyprpicker nm-connection-editor quickshell-git - swww translate-shell wlogout ) From 78c91500d6e417c4f400a7a27a2abb70836e2118 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 14 Jul 2025 22:55:15 +0700 Subject: [PATCH 03/25] wallpaper: fix stretch --- .config/quickshell/ii/modules/background/Background.qml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.config/quickshell/ii/modules/background/Background.qml b/.config/quickshell/ii/modules/background/Background.qml index cfd0678b7..0e5a85223 100644 --- a/.config/quickshell/ii/modules/background/Background.qml +++ b/.config/quickshell/ii/modules/background/Background.qml @@ -12,8 +12,6 @@ import Quickshell import Quickshell.Io import Quickshell.Wayland -// TODO REMOVE BACKGROUNDWIDGETS - Scope { id: root readonly property bool fixedClockPosition: Config.options.background.fixedClockPosition @@ -80,7 +78,7 @@ Scope { id: leastBusyRegionOutputCollector onStreamFinished: { const output = leastBusyRegionOutputCollector.text - console.log("[Background] Least busy region output:", output) + // console.log("[Background] Least busy region output:", output) if (output.length === 0) return; const parsedContent = JSON.parse(output) bgRoot.clockX = parsedContent.center_x @@ -91,7 +89,7 @@ Scope { } // Wallpaper - AnimatedImage { + Image { z: 0 anchors.fill: parent source: bgRoot.wallpaperPath From 3110df8974fd27b337711ae68e23ec7927e5f216 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 15 Jul 2025 09:27:05 +0700 Subject: [PATCH 04/25] background: make it fill properly --- .config/quickshell/ii/modules/background/Background.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/.config/quickshell/ii/modules/background/Background.qml b/.config/quickshell/ii/modules/background/Background.qml index 0e5a85223..d507d5d17 100644 --- a/.config/quickshell/ii/modules/background/Background.qml +++ b/.config/quickshell/ii/modules/background/Background.qml @@ -39,6 +39,7 @@ Scope { // Layer props screen: modelData + exclusionMode: ExclusionMode.Ignore WlrLayershell.layer: WlrLayer.Bottom WlrLayershell.namespace: "quickshell:background" anchors { From 86d3f75d12416df4fa0c9caeca4724a428a09ae1 Mon Sep 17 00:00:00 2001 From: nahilrasheed <88521572+nahilrasheed@users.noreply.github.com> Date: Tue, 15 Jul 2025 14:34:44 +0300 Subject: [PATCH 05/25] hyprland: add window rules for xdg-portal file dialogs Add windowrulev2 entries for file picker dialogs with titles like "wants to save" and "wants to open" to float and center them. --- .config/hypr/hyprland/rules.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.config/hypr/hyprland/rules.conf b/.config/hypr/hyprland/rules.conf index 6b6922a5b..aa9eb7e38 100644 --- a/.config/hypr/hyprland/rules.conf +++ b/.config/hypr/hyprland/rules.conf @@ -58,6 +58,8 @@ windowrulev2 = center, title:^(Open Folder)(.*)$ windowrulev2 = center, title:^(Save As)(.*)$ windowrulev2 = center, title:^(Library)(.*)$ windowrulev2 = center, title:^(File Upload)(.*)$ +windowrulev2 = center, title:^(.*)(wants to save)$ +windowrulev2 = center, title:^(.*)(wants to open)$ windowrulev2 = float, title:^(Open File)(.*)$ windowrulev2 = float, title:^(Select a File)(.*)$ windowrulev2 = float, title:^(Choose wallpaper)(.*)$ @@ -65,6 +67,8 @@ windowrulev2 = float, title:^(Open Folder)(.*)$ windowrulev2 = float, title:^(Save As)(.*)$ windowrulev2 = float, title:^(Library)(.*)$ windowrulev2 = float, title:^(File Upload)(.*)$ +windowrulev2 = float, title:^(.*)(wants to save)$ +windowrulev2 = float, title:^(.*)(wants to open)$ # --- Tearing --- From ffe1783aa3397786097d628b13748442cba54921 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 15 Jul 2025 20:37:25 +0700 Subject: [PATCH 06/25] background: clock: fly in from random direction --- .config/quickshell/ii/modules/background/Background.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.config/quickshell/ii/modules/background/Background.qml b/.config/quickshell/ii/modules/background/Background.qml index d507d5d17..341b65135 100644 --- a/.config/quickshell/ii/modules/background/Background.qml +++ b/.config/quickshell/ii/modules/background/Background.qml @@ -28,8 +28,8 @@ Scope { required property var modelData property string wallpaperPath: Config.options.background.wallpaperPath // Position - property real clockX: modelData.width / 2 - property real clockY: modelData.height / 2 + property real clockX: (modelData.width / 2) + ((Math.random() < 0.5 ? -1 : 1) * modelData.width) + property real clockY: (modelData.height / 2) + ((Math.random() < 0.5 ? -1 : 1) * modelData.height) property var textHorizontalAlignment: clockX < screen.width / 3 ? Text.AlignLeft : (clockX > screen.width * 2 / 3 ? Text.AlignRight : Text.AlignHCenter) // Colors From 77c5923782dcff57d87de76371699d8b00b14fc3 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 15 Jul 2025 20:37:36 +0700 Subject: [PATCH 07/25] cheatsheet: fix weird popup anim --- .config/quickshell/ii/modules/cheatsheet/Cheatsheet.qml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.config/quickshell/ii/modules/cheatsheet/Cheatsheet.qml b/.config/quickshell/ii/modules/cheatsheet/Cheatsheet.qml index 8e409ab94..733adad31 100644 --- a/.config/quickshell/ii/modules/cheatsheet/Cheatsheet.qml +++ b/.config/quickshell/ii/modules/cheatsheet/Cheatsheet.qml @@ -158,14 +158,20 @@ Scope { // Scope spacing: 10 Behavior on implicitWidth { + id: contentWidthBehavior + enabled: false animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) } Behavior on implicitHeight { + id: contentHeightBehavior + enabled: false animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) } currentIndex: tabBar.externalTrackedTab onCurrentIndexChanged: { + contentWidthBehavior.enabled = true; + contentHeightBehavior.enabled = true; tabBar.enableIndicatorAnimation = true; root.selectedTab = currentIndex; } From 4d10ee603605daf8e218a5910b6b424bf9e50500 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 15 Jul 2025 20:44:17 +0700 Subject: [PATCH 08/25] media controls: adjust color overlay transparency --- .config/quickshell/ii/modules/mediaControls/PlayerControl.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/ii/modules/mediaControls/PlayerControl.qml b/.config/quickshell/ii/modules/mediaControls/PlayerControl.qml index b58bd7421..0da91a99a 100644 --- a/.config/quickshell/ii/modules/mediaControls/PlayerControl.qml +++ b/.config/quickshell/ii/modules/mediaControls/PlayerControl.qml @@ -149,7 +149,7 @@ Item { // Player instance Rectangle { anchors.fill: parent - color: ColorUtils.transparentize(blendedColors.colLayer0, 0.25) + color: ColorUtils.transparentize(blendedColors.colLayer0, 0.3) radius: root.popupRounding } } From c46a4cb3eff433f90d2f2731cfc0ccfca43f6a86 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 15 Jul 2025 22:45:34 +0700 Subject: [PATCH 09/25] nuke anyrun --- .config/anyrun/config.ron | 13 -------- .config/anyrun/style.css | 66 --------------------------------------- 2 files changed, 79 deletions(-) delete mode 100644 .config/anyrun/config.ron delete mode 100644 .config/anyrun/style.css diff --git a/.config/anyrun/config.ron b/.config/anyrun/config.ron deleted file mode 100644 index c3eafd7a8..000000000 --- a/.config/anyrun/config.ron +++ /dev/null @@ -1,13 +0,0 @@ -Config( - x: Fraction(0.500000), - y: Absolute(15), - width: Fraction(0.300000), - height: Absolute(0), - hide_icons: false, - ignore_exclusive_zones: false, - layer: Overlay, - hide_plugin_info: true, - close_on_click: true, - show_results_immediately: false, - max_entries: None, -) diff --git a/.config/anyrun/style.css b/.config/anyrun/style.css deleted file mode 100644 index ca45f260d..000000000 --- a/.config/anyrun/style.css +++ /dev/null @@ -1,66 +0,0 @@ -* { - all: unset; - font-size: 1.3rem; -} - -#window, -#match, -#entry, -#plugin, -#main { - background: transparent; -} - -#match.activatable { - border-radius: 16px; - padding: 0.3rem 0.9rem; - margin-top: 0.01rem; -} -#match.activatable:first-child { - margin-top: 0.7rem; -} -#match.activatable:last-child { - margin-bottom: 0.6rem; -} - -#plugin:hover #match.activatable { - border-radius: 10px; - padding: 0.3rem; - margin-top: 0.01rem; - margin-bottom: 0; -} - -#match:selected, -#match:hover, -#plugin:hover { - background: #2e3131; -} - -#entry { - background: #0b0f10; - border: 1px solid #0b0f10; - border-radius: 16px; - margin: 0.5rem; - padding: 0.3rem 1rem; -} - -list > #plugin { - border-radius: 16px; - margin: 0 0.3rem; -} -list > #plugin:first-child { - margin-top: 0.3rem; -} -list > #plugin:last-child { - margin-bottom: 0.3rem; -} -list > #plugin:hover { - padding: 0.6rem; -} - -box#main { - background: #0b0f10; - box-shadow: inset 0 0 0 1px #0b0f10, 0 0 0 1px #0b0f10; - border-radius: 24px; - padding: 0.3rem; -} From abc9b4cdb783b5e7b435fff3d0b82bac3baa7223 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 15 Jul 2025 23:20:08 +0700 Subject: [PATCH 10/25] systeminfo: fix distro id --- .config/quickshell/ii/services/SystemInfo.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.config/quickshell/ii/services/SystemInfo.qml b/.config/quickshell/ii/services/SystemInfo.qml index cd3d9f383..cb96b54bd 100644 --- a/.config/quickshell/ii/services/SystemInfo.qml +++ b/.config/quickshell/ii/services/SystemInfo.qml @@ -36,9 +36,9 @@ Singleton { const nameMatch = textOsRelease.match(/^NAME="(.+?)"/m) distroName = prettyNameMatch ? prettyNameMatch[1] : (nameMatch ? nameMatch[1].replace(/Linux/i, "").trim() : "Unknown") - // Extract the ID (LOGO field, fallback to "unknown") - const logoMatch = textOsRelease.match(/^LOGO=(.+)$/m) - distroId = logoMatch ? logoMatch[1].replace(/"/g, "") : "unknown" + // Extract the ID + const idMatch = textOsRelease.match(/^ID="?(.+?)"?$/m) + distroId = idMatch ? idMatch[1] : "unknown" // Extract additional URLs and logo const homeUrlMatch = textOsRelease.match(/^HOME_URL="(.+?)"/m) From 08e3a9bddb7ad2ed8b073aa63cbceeecc33f3771 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 16 Jul 2025 00:15:31 +0700 Subject: [PATCH 11/25] background: parallax wallpaper --- .../ii/modules/background/Background.qml | 176 ++++++++++++------ .../quickshell/ii/modules/common/Config.qml | 4 + .../ii/scripts/images/least_busy_region.py | 29 +-- 3 files changed, 142 insertions(+), 67 deletions(-) diff --git a/.config/quickshell/ii/modules/background/Background.qml b/.config/quickshell/ii/modules/background/Background.qml index 341b65135..55d13d644 100644 --- a/.config/quickshell/ii/modules/background/Background.qml +++ b/.config/quickshell/ii/modules/background/Background.qml @@ -11,6 +11,7 @@ import QtQuick.Layouts import Quickshell import Quickshell.Io import Quickshell.Wayland +import Quickshell.Hyprland Scope { id: root @@ -26,7 +27,19 @@ Scope { id: bgRoot required property var modelData + // Workspaces + property HyprlandMonitor monitor: Hyprland.monitorFor(modelData) + property list relevantWindows: HyprlandData.windowList.filter(win => win.monitor == monitor.id && win.workspace.id >= 0).sort((a, b) => a.workspace.id - b.workspace.id) + property int firstWorkspaceId: relevantWindows[0]?.workspace.id || 1 + property int lastWorkspaceId: relevantWindows[relevantWindows.length - 1]?.workspace.id || 10 + // Wallpaper property string wallpaperPath: Config.options.background.wallpaperPath + property real preferredWallpaperScale: Config.options.background.parallax.workspaceZoom + property real effectiveWallpaperScale: 1 // Some reasonable init value, to be updated + property int wallpaperWidth: modelData.width // Some reasonable init value, to be updated + property int wallpaperHeight: modelData.height // Some reasonable init value, to be updated + property real movableXSpace: (effectiveWallpaperScale - 1) / 2 * screen.width + property real movableYSpace: (effectiveWallpaperScale - 1) / 2 * screen.height // Position property real clockX: (modelData.width / 2) + ((Math.random() < 0.5 ? -1 : 1) * modelData.width) property real clockY: (modelData.height / 2) + ((Math.random() < 0.5 ? -1 : 1) * modelData.height) @@ -50,29 +63,63 @@ Scope { } color: "transparent" + onWallpaperPathChanged: { + bgRoot.updateZoomScale() + // Clock position gets updated after zoom scale is updated + } + + // Wallpaper zoom scale + function updateZoomScale() { + getWallpaperSizeProc.path = bgRoot.wallpaperPath + getWallpaperSizeProc.running = true; + } + Process { + id: getWallpaperSizeProc + property string path: bgRoot.wallpaperPath + command: [ "magick", "identify", "-format", "%w %h", path ] + stdout: StdioCollector { + id: wallpaperSizeOutputCollector + onStreamFinished: { + const output = wallpaperSizeOutputCollector.text + const [width, height] = output.split(" ").map(Number); + bgRoot.wallpaperWidth = width + bgRoot.wallpaperHeight = height + bgRoot.effectiveWallpaperScale = Math.max(1, Math.min( + bgRoot.preferredWallpaperScale, + width / bgRoot.screen.width, + height / bgRoot.screen.height + )); + + bgRoot.updateClockPosition() + } + } + } + // Clock positioning function updateClockPosition() { - leastBusyRegionProc.path = wallpaperPath // Somehow this is needed to make the proc correctly use the new path + // Somehow all this manual setting is needed to make the proc correctly use the new values + leastBusyRegionProc.path = bgRoot.wallpaperPath leastBusyRegionProc.contentWidth = clock.implicitWidth leastBusyRegionProc.contentHeight = clock.implicitHeight + leastBusyRegionProc.horizontalPadding = (effectiveWallpaperScale - 1) / 2 * screen.width + 100 + leastBusyRegionProc.verticalPadding = (effectiveWallpaperScale - 1) / 2 * screen.height + 100 leastBusyRegionProc.running = false; leastBusyRegionProc.running = true; } - onWallpaperPathChanged: { - // console.log("[Background] Wallpaper path changed to:", wallpaperPath) - bgRoot.updateClockPosition() - } Process { id: leastBusyRegionProc - running: true property string path: bgRoot.wallpaperPath - property int contentWidth: bgRoot.screen.width - property int contentHeight: bgRoot.screen.height + property int contentWidth: 300 + property int contentHeight: 300 + property int horizontalPadding: bgRoot.movableXSpace + property int verticalPadding: bgRoot.movableYSpace command: [Quickshell.configPath("scripts/images/least_busy_region.py"), "--screen-width", bgRoot.screen.width, "--screen-height", bgRoot.screen.height, "--width", contentWidth, "--height", contentHeight, + "--horizontal-padding", horizontalPadding, + "--vertical-padding", verticalPadding, path ] stdout: StdioCollector { @@ -91,58 +138,79 @@ Scope { // Wallpaper Image { - z: 0 - anchors.fill: parent + property real value // 0 to 1, for offset + value: { + // Range = half-groups that workspaces span on + const chunkSize = 3; + const lower = Math.floor(bgRoot.firstWorkspaceId / chunkSize) * chunkSize; + const upper = Math.ceil(bgRoot.lastWorkspaceId / chunkSize) * chunkSize; + const range = upper - lower; + return (bgRoot.monitor.activeWorkspace.id - lower) / range; + } + property real effectiveValue: Math.max(0, Math.min(1, value)) + x: -(bgRoot.movableXSpace) - (effectiveValue - 0.5) * 2 * bgRoot.movableXSpace + y: -(bgRoot.movableYSpace) source: bgRoot.wallpaperPath fillMode: Image.PreserveAspectCrop + Behavior on x { + NumberAnimation { + duration: 600 + easing.type: Easing.OutCubic + } + } sourceSize { - width: bgRoot.screen.width - height: bgRoot.screen.height - } - } - - // The clock - Item { - id: clock - z: 1 - anchors { - left: parent.left - top: parent.top - leftMargin: (root.fixedClockPosition ? root.fixedClockX : bgRoot.clockX) - implicitWidth / 2 - topMargin: (root.fixedClockPosition ? root.fixedClockY : bgRoot.clockY) - implicitHeight / 2 - Behavior on leftMargin { - animation: Appearance.animation.elementMove.numberAnimation.createObject(this) - } - Behavior on topMargin { - animation: Appearance.animation.elementMove.numberAnimation.createObject(this) - } + width: bgRoot.screen.width * bgRoot.effectiveWallpaperScale + height: bgRoot.screen.height * bgRoot.effectiveWallpaperScale } - implicitWidth: clockColumn.implicitWidth - implicitHeight: clockColumn.implicitHeight - - ColumnLayout { - id: clockColumn - anchors.centerIn: parent - spacing: -5 - - StyledText { - Layout.fillWidth: true - horizontalAlignment: bgRoot.textHorizontalAlignment - font.pixelSize: 95 - color: bgRoot.colText - style: Text.Raised - styleColor: Appearance.colors.colShadow - text: DateTime.time + // The clock + Item { + id: clock + anchors { + left: parent.left + top: parent.top + leftMargin: ((root.fixedClockPosition ? root.fixedClockX : bgRoot.clockX * bgRoot.effectiveWallpaperScale) - implicitWidth / 2) + topMargin: ((root.fixedClockPosition ? root.fixedClockY : bgRoot.clockY * bgRoot.effectiveWallpaperScale) - implicitHeight / 2) + Behavior on leftMargin { + animation: Appearance.animation.elementMove.numberAnimation.createObject(this) + } + Behavior on topMargin { + animation: Appearance.animation.elementMove.numberAnimation.createObject(this) + } } - StyledText { - Layout.fillWidth: true - horizontalAlignment: bgRoot.textHorizontalAlignment - font.pixelSize: 25 - color: bgRoot.colText - style: Text.Raised - styleColor: Appearance.colors.colShadow - text: DateTime.date + + implicitWidth: clockColumn.implicitWidth + implicitHeight: clockColumn.implicitHeight + + ColumnLayout { + id: clockColumn + anchors.centerIn: parent + spacing: -5 + + StyledText { + Layout.fillWidth: true + horizontalAlignment: bgRoot.textHorizontalAlignment + font { + pixelSize: 85 + weight: Font.Medium + } + color: bgRoot.colText + style: Text.Raised + styleColor: Appearance.colors.colShadow + text: DateTime.time + } + StyledText { + Layout.fillWidth: true + horizontalAlignment: bgRoot.textHorizontalAlignment + font { + pixelSize: 20 + weight: Font.Medium + } + color: bgRoot.colText + style: Text.Raised + styleColor: Appearance.colors.colShadow + text: DateTime.date + } } } } diff --git a/.config/quickshell/ii/modules/common/Config.qml b/.config/quickshell/ii/modules/common/Config.qml index 64f136517..582c11d8e 100644 --- a/.config/quickshell/ii/modules/common/Config.qml +++ b/.config/quickshell/ii/modules/common/Config.qml @@ -99,6 +99,10 @@ Singleton { property real clockX: -500 property real clockY: -500 property string wallpaperPath: Quickshell.configPath("assets/images/default_wallpaper.png") + property JsonObject parallax: JsonObject { + property real workspaceZoom: 1.07 // Relative to your screen, not wallpaper size + property bool enableWorkspace: true + } } property JsonObject bar: JsonObject { diff --git a/.config/quickshell/ii/scripts/images/least_busy_region.py b/.config/quickshell/ii/scripts/images/least_busy_region.py index bad58bd87..2b1d104eb 100755 --- a/.config/quickshell/ii/scripts/images/least_busy_region.py +++ b/.config/quickshell/ii/scripts/images/least_busy_region.py @@ -18,7 +18,7 @@ def center_crop(img, target_w, target_h): y2 = y1 + target_h return img[y1:y2, x1:x2] -def find_least_busy_region(image_path, region_width=300, region_height=200, screen_width=None, screen_height=None, verbose=False, stride=2, screen_mode="fill", padding=50): +def find_least_busy_region(image_path, region_width=300, region_height=200, screen_width=None, screen_height=None, verbose=False, stride=2, screen_mode="fill", horizontal_padding=50, vertical_padding=50): img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) if img is None: raise FileNotFoundError(f"Image not found: {image_path}") @@ -59,10 +59,10 @@ def find_least_busy_region(image_path, region_width=300, region_height=200, scre min_var = None min_coords = (0, 0) area = region_width * region_height - x_start = padding - y_start = padding - x_end = w - region_width - padding + 1 - y_end = h - region_height - padding + 1 + x_start = horizontal_padding + y_start = vertical_padding + x_end = w - region_width - horizontal_padding + 1 + y_end = h - region_height - vertical_padding + 1 for y in range(y_start, max(y_end, y_start+1), stride): for x in range(x_start, max(x_end, x_start+1), stride): x1, y1 = x, y @@ -76,7 +76,7 @@ def find_least_busy_region(image_path, region_width=300, region_height=200, scre min_coords = (x, y) return min_coords, min_var -def find_largest_region(image_path, screen_width=None, screen_height=None, verbose=False, stride=2, screen_mode="fill", threshold=100.0, aspect_ratio=1.0, padding=50): +def find_largest_region(image_path, screen_width=None, screen_height=None, verbose=False, stride=2, screen_mode="fill", threshold=100.0, aspect_ratio=1.0, horizontal_padding=50, vertical_padding=50): img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) if img is None: raise FileNotFoundError(f"Image not found: {image_path}") @@ -130,10 +130,10 @@ def find_largest_region(image_path, screen_width=None, screen_height=None, verbo max_size = mid - 1 continue found = False - x_start = padding - y_start = padding - x_end = w - region_w - padding + 1 - y_end = h - region_h - padding + 1 + x_start = horizontal_padding + y_start = vertical_padding + x_end = w - region_w - horizontal_padding + 1 + y_end = h - region_h - vertical_padding + 1 for y in range(y_start, max(y_end, y_start+1), stride): for x in range(x_start, max(x_end, x_start+1), stride): x1, y1 = x, y @@ -263,7 +263,8 @@ def main(): parser.add_argument("-l", "--largest-region", action="store_true", help="Find the largest region under the variance threshold and output its center") parser.add_argument("-t", "--variance-threshold", type=float, default=1000.0, help="Variance threshold for largest region mode") parser.add_argument("--aspect-ratio", type=float, default=1.78, help="Aspect ratio (width/height) for largest region mode") - parser.add_argument("--padding", type=int, default=50, help="Minimum distance from region to image edge (default: 50)") + parser.add_argument("--horizontal-padding", "-hp", type=int, default=50, help="Minimum horizontal distance from region to image edge") + parser.add_argument("--vertical-padding", "-vp", type=int, default=50, help="Minimum vertical distance from region to image edge") args = parser.parse_args() if args.largest_region: @@ -276,7 +277,8 @@ def main(): screen_mode=args.screen_mode, threshold=args.variance_threshold, aspect_ratio=args.aspect_ratio, - padding=args.padding + horizontal_padding=args.horizontal_padding, + vertical_padding=args.vertical_padding ) if center: if args.visual_output: @@ -312,7 +314,8 @@ def main(): verbose=args.verbose, stride=args.stride, screen_mode=args.screen_mode, - padding=args.padding + horizontal_padding=args.horizontal_padding, + vertical_padding=args.vertical_padding ) if args.visual_output: draw_region(args.image_path, coords, region_width=args.width, region_height=args.height, screen_width=args.screen_width, screen_height=args.screen_height, screen_mode=args.screen_mode) From bb221326eba85d3dd72d83c0d7e6b8eec51d8d28 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 16 Jul 2025 00:17:18 +0700 Subject: [PATCH 12/25] background parallax: make half groups really half group --- .config/quickshell/ii/modules/background/Background.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/ii/modules/background/Background.qml b/.config/quickshell/ii/modules/background/Background.qml index 55d13d644..acaf63cc9 100644 --- a/.config/quickshell/ii/modules/background/Background.qml +++ b/.config/quickshell/ii/modules/background/Background.qml @@ -141,7 +141,7 @@ Scope { property real value // 0 to 1, for offset value: { // Range = half-groups that workspaces span on - const chunkSize = 3; + const chunkSize = 5; const lower = Math.floor(bgRoot.firstWorkspaceId / chunkSize) * chunkSize; const upper = Math.ceil(bgRoot.lastWorkspaceId / chunkSize) * chunkSize; const range = upper - lower; From 06ed6dd1e73e29c0c3d664f1f6c3a4e9d81baea6 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 16 Jul 2025 09:04:20 +0700 Subject: [PATCH 13/25] use space grotesk for clocks --- .config/hypr/hyprlock.conf | 2 +- .config/matugen/templates/hyprland/hyprlock.conf | 6 +++--- .../ii/modules/background/Background.qml | 2 ++ .../quickshell/ii/modules/common/Appearance.qml | 1 + .../ii/modules/screenCorners/ScreenCorners.qml | 14 -------------- .config/quickshell/ii/modules/session/Session.qml | 1 - .../illogical-impulse-fonts-themes/PKGBUILD | 1 + 7 files changed, 8 insertions(+), 19 deletions(-) diff --git a/.config/hypr/hyprlock.conf b/.config/hypr/hyprlock.conf index 1e936ce58..ea1d8f0f9 100644 --- a/.config/hypr/hyprlock.conf +++ b/.config/hypr/hyprlock.conf @@ -58,7 +58,7 @@ label { # Date text = cmd[update:5000] date +"%A, %B %d" color = $text_color font_size = 17 - font_family = $font_family + font_family = $font_family_clock position = 0, 240 halign = center diff --git a/.config/matugen/templates/hyprland/hyprlock.conf b/.config/matugen/templates/hyprland/hyprlock.conf index eab167199..d557f7069 100644 --- a/.config/matugen/templates/hyprland/hyprlock.conf +++ b/.config/matugen/templates/hyprland/hyprlock.conf @@ -2,8 +2,8 @@ $text_color = rgba({{colors.primary_fixed.default.hex_stripped}}FF) $entry_background_color = rgba({{colors.on_primary_fixed.default.hex_stripped}}11) $entry_border_color = rgba({{colors.outline.default.hex_stripped}}55) $entry_color = rgba({{colors.primary_fixed.default.hex_stripped}}FF) -$font_family = Rubik Light -$font_family_clock = Rubik Light +$font_family = Rubik +$font_family_clock = Space Grotesk $font_material_symbols = Material Symbols Rounded background { @@ -58,7 +58,7 @@ label { # Date text = cmd[update:5000] date +"%A, %B %d" color = $text_color font_size = 17 - font_family = $font_family + font_family = $font_family_clock position = 0, 240 halign = center diff --git a/.config/quickshell/ii/modules/background/Background.qml b/.config/quickshell/ii/modules/background/Background.qml index acaf63cc9..8bf4b6ec3 100644 --- a/.config/quickshell/ii/modules/background/Background.qml +++ b/.config/quickshell/ii/modules/background/Background.qml @@ -191,6 +191,7 @@ Scope { Layout.fillWidth: true horizontalAlignment: bgRoot.textHorizontalAlignment font { + family: Appearance.font.family.expressive pixelSize: 85 weight: Font.Medium } @@ -203,6 +204,7 @@ Scope { Layout.fillWidth: true horizontalAlignment: bgRoot.textHorizontalAlignment font { + family: Appearance.font.family.expressive pixelSize: 20 weight: Font.Medium } diff --git a/.config/quickshell/ii/modules/common/Appearance.qml b/.config/quickshell/ii/modules/common/Appearance.qml index 88e04bd30..7cc555ec8 100644 --- a/.config/quickshell/ii/modules/common/Appearance.qml +++ b/.config/quickshell/ii/modules/common/Appearance.qml @@ -168,6 +168,7 @@ Singleton { property string iconNerd: "SpaceMono NF" property string monospace: "JetBrains Mono NF" property string reading: "Readex Pro" + property string expressive: "Space Grotesk" } property QtObject pixelSize: QtObject { property int smallest: 10 diff --git a/.config/quickshell/ii/modules/screenCorners/ScreenCorners.qml b/.config/quickshell/ii/modules/screenCorners/ScreenCorners.qml index 0946c03d1..b5fc48289 100644 --- a/.config/quickshell/ii/modules/screenCorners/ScreenCorners.qml +++ b/.config/quickshell/ii/modules/screenCorners/ScreenCorners.qml @@ -26,20 +26,6 @@ Scope { mask: Region { item: null } - // HyprlandWindow.visibleMask: Region { - // Region { - // item: topLeftCorner - // } - // Region { - // item: topRightCorner - // } - // Region { - // item: bottomLeftCorner - // } - // Region { - // item: bottomRightCorner - // } - // } WlrLayershell.namespace: "quickshell:screenCorners" WlrLayershell.layer: WlrLayer.Overlay color: "transparent" diff --git a/.config/quickshell/ii/modules/session/Session.qml b/.config/quickshell/ii/modules/session/Session.qml index 69414f1b4..da627d9ad 100644 --- a/.config/quickshell/ii/modules/session/Session.qml +++ b/.config/quickshell/ii/modules/session/Session.qml @@ -76,7 +76,6 @@ Scope { StyledText { // Small instruction Layout.alignment: Qt.AlignHCenter horizontalAlignment: Text.AlignHCenter - font.family: Appearance.font.family.title font.pixelSize: Appearance.font.pixelSize.normal text: qsTr("Arrow keys to navigate, Enter to select\nEsc or click anywhere to cancel") } diff --git a/arch-packages/illogical-impulse-fonts-themes/PKGBUILD b/arch-packages/illogical-impulse-fonts-themes/PKGBUILD index 8c5f567c9..fd2ee207c 100644 --- a/arch-packages/illogical-impulse-fonts-themes/PKGBUILD +++ b/arch-packages/illogical-impulse-fonts-themes/PKGBUILD @@ -15,6 +15,7 @@ depends=( kde-material-you-colors kitty matugen-bin + otf-space-grotesk starship ttf-gabarito-git ttf-jetbrains-mono-nerd From a08e9e0e799c785167c4484cdbe4cecb304c120d Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 16 Jul 2025 09:34:22 +0700 Subject: [PATCH 14/25] screen corners: not have a fullscreen layer --- .../modules/screenCorners/ScreenCorners.qml | 85 +++++++++---------- 1 file changed, 39 insertions(+), 46 deletions(-) diff --git a/.config/quickshell/ii/modules/screenCorners/ScreenCorners.qml b/.config/quickshell/ii/modules/screenCorners/ScreenCorners.qml index b5fc48289..b7d9ee679 100644 --- a/.config/quickshell/ii/modules/screenCorners/ScreenCorners.qml +++ b/.config/quickshell/ii/modules/screenCorners/ScreenCorners.qml @@ -11,63 +11,56 @@ Scope { id: screenCorners readonly property Toplevel activeWindow: ToplevelManager.activeToplevel + component CornerPanelWindow: PanelWindow { + id: cornerPanelWindow + visible: (Config.options.appearance.fakeScreenRounding === 1 || (Config.options.appearance.fakeScreenRounding === 2 && !activeWindow?.fullscreen)) + property var corner + + exclusionMode: ExclusionMode.Ignore + mask: Region { + item: null + } + WlrLayershell.namespace: "quickshell:screenCorners" + WlrLayershell.layer: WlrLayer.Overlay + color: "transparent" + + anchors { + top: cornerPanelWindow.corner === RoundCorner.CornerEnum.TopLeft || cornerPanelWindow.corner === RoundCorner.CornerEnum.TopRight + left: cornerPanelWindow.corner === RoundCorner.CornerEnum.TopLeft || cornerPanelWindow.corner === RoundCorner.CornerEnum.BottomLeft + bottom: cornerPanelWindow.corner === RoundCorner.CornerEnum.BottomLeft || cornerPanelWindow.corner === RoundCorner.CornerEnum.BottomRight + right: cornerPanelWindow.corner === RoundCorner.CornerEnum.TopRight || cornerPanelWindow.corner === RoundCorner.CornerEnum.BottomRight + } + + implicitWidth: cornerWidget.implicitWidth + implicitHeight: cornerWidget.implicitHeight + RoundCorner { + id: cornerWidget + size: Appearance.rounding.screenRounding + corner: cornerPanelWindow.corner + } + } + Variants { model: Quickshell.screens - PanelWindow { - visible: (Config.options.appearance.fakeScreenRounding === 1 - || (Config.options.appearance.fakeScreenRounding === 2 - && !activeWindow?.fullscreen)) - - property var modelData - - screen: modelData - exclusionMode: ExclusionMode.Ignore - mask: Region { - item: null - } - WlrLayershell.namespace: "quickshell:screenCorners" - WlrLayershell.layer: WlrLayer.Overlay - color: "transparent" - - anchors { - top: true - left: true - right: true - bottom: true - } - - RoundCorner { - id: topLeftCorner - anchors.top: parent.top - anchors.left: parent.left - size: Appearance.rounding.screenRounding + Scope { + required property var modelData + CornerPanelWindow { + screen: modelData corner: RoundCorner.CornerEnum.TopLeft } - RoundCorner { - id: topRightCorner - anchors.top: parent.top - anchors.right: parent.right - size: Appearance.rounding.screenRounding + CornerPanelWindow { + screen: modelData corner: RoundCorner.CornerEnum.TopRight } - RoundCorner { - id: bottomLeftCorner - anchors.bottom: parent.bottom - anchors.left: parent.left - size: Appearance.rounding.screenRounding + CornerPanelWindow { + screen: modelData corner: RoundCorner.CornerEnum.BottomLeft } - RoundCorner { - id: bottomRightCorner - anchors.bottom: parent.bottom - anchors.right: parent.right - size: Appearance.rounding.screenRounding + CornerPanelWindow { + screen: modelData corner: RoundCorner.CornerEnum.BottomRight } - } - } - } From 7821cfe131d7c88e66b2ab5d4f408389da501288 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 16 Jul 2025 09:34:36 +0700 Subject: [PATCH 15/25] dock: dont aggressively unload --- .config/quickshell/ii/modules/dock/Dock.qml | 214 ++++++++++---------- 1 file changed, 104 insertions(+), 110 deletions(-) diff --git a/.config/quickshell/ii/modules/dock/Dock.qml b/.config/quickshell/ii/modules/dock/Dock.qml index 04af9810a..0cf51fd74 100644 --- a/.config/quickshell/ii/modules/dock/Dock.qml +++ b/.config/quickshell/ii/modules/dock/Dock.qml @@ -19,131 +19,125 @@ Scope { // Scope Variants { // For each monitor model: Quickshell.screens - LazyLoader { - id: dockLoader - required property var modelData - activeAsync: Config.options?.dock.hoverToReveal || (!ToplevelManager.activeToplevel?.activated) + PanelWindow { // Window + id: dockRoot + screen: dockLoader.modelData + + property bool reveal: root.pinned + || (Config.options?.dock.hoverToReveal && dockMouseArea.containsMouse) + || dockApps.requestDockShow + || (!ToplevelManager.activeToplevel?.activated) - component: PanelWindow { // Window - id: dockRoot - screen: dockLoader.modelData - - property bool reveal: root.pinned - || (Config.options?.dock.hoverToReveal && dockMouseArea.containsMouse) - || dockApps.requestDockShow - || (!ToplevelManager.activeToplevel?.activated) + anchors { + bottom: true + left: true + right: true + } - anchors { - bottom: true - left: true - right: true + exclusiveZone: root.pinned ? implicitHeight + - (Appearance.sizes.hyprlandGapsOut) + - (Appearance.sizes.elevationMargin - Appearance.sizes.hyprlandGapsOut) : 0 + + implicitWidth: dockBackground.implicitWidth + WlrLayershell.namespace: "quickshell:dock" + color: "transparent" + + implicitHeight: (Config.options?.dock.height ?? 70) + Appearance.sizes.elevationMargin + Appearance.sizes.hyprlandGapsOut + + mask: Region { + item: dockMouseArea + } + + MouseArea { + id: dockMouseArea + anchors.top: parent.top + height: parent.height + anchors.topMargin: dockRoot.reveal ? 0 : + Config.options?.dock.hoverToReveal ? (dockRoot.implicitHeight - Config.options.dock.hoverRegionHeight) : + (dockRoot.implicitHeight + 1) + + anchors.left: parent.left + anchors.right: parent.right + hoverEnabled: true + + Behavior on anchors.topMargin { + animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) } - exclusiveZone: root.pinned ? implicitHeight - - (Appearance.sizes.hyprlandGapsOut) - - (Appearance.sizes.elevationMargin - Appearance.sizes.hyprlandGapsOut) : 0 + Item { + id: dockHoverRegion + anchors.fill: parent - implicitWidth: dockBackground.implicitWidth - WlrLayershell.namespace: "quickshell:dock" - color: "transparent" + Item { // Wrapper for the dock background + id: dockBackground + anchors { + top: parent.top + bottom: parent.bottom + horizontalCenter: parent.horizontalCenter + } - implicitHeight: (Config.options?.dock.height ?? 70) + Appearance.sizes.elevationMargin + Appearance.sizes.hyprlandGapsOut + implicitWidth: dockRow.implicitWidth + 5 * 2 + height: parent.height - Appearance.sizes.elevationMargin - Appearance.sizes.hyprlandGapsOut - mask: Region { - item: dockMouseArea - } + StyledRectangularShadow { + target: dockVisualBackground + } + Rectangle { // The real rectangle that is visible + id: dockVisualBackground + property real margin: Appearance.sizes.elevationMargin + anchors.fill: parent + anchors.topMargin: Appearance.sizes.elevationMargin + anchors.bottomMargin: Appearance.sizes.hyprlandGapsOut + color: Appearance.colors.colLayer0 + border.width: 1 + border.color: Appearance.m3colors.m3outlineVariant + radius: Appearance.rounding.large + } - MouseArea { - id: dockMouseArea - anchors.top: parent.top - height: parent.height - anchors.topMargin: dockRoot.reveal ? 0 : - Config.options?.dock.hoverToReveal ? (dockRoot.implicitHeight - Config.options.dock.hoverRegionHeight) : - (dockRoot.implicitHeight + 1) - - anchors.left: parent.left - anchors.right: parent.right - hoverEnabled: true + RowLayout { + id: dockRow + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + spacing: 3 + property real padding: 5 - Behavior on anchors.topMargin { - animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) - } - - Item { - id: dockHoverRegion - anchors.fill: parent - - Item { // Wrapper for the dock background - id: dockBackground - anchors { - top: parent.top - bottom: parent.bottom - horizontalCenter: parent.horizontalCenter - } - - implicitWidth: dockRow.implicitWidth + 5 * 2 - height: parent.height - Appearance.sizes.elevationMargin - Appearance.sizes.hyprlandGapsOut - - StyledRectangularShadow { - target: dockVisualBackground - } - Rectangle { // The real rectangle that is visible - id: dockVisualBackground - property real margin: Appearance.sizes.elevationMargin - anchors.fill: parent - anchors.topMargin: Appearance.sizes.elevationMargin - anchors.bottomMargin: Appearance.sizes.hyprlandGapsOut - color: Appearance.colors.colLayer0 - border.width: 1 - border.color: Appearance.m3colors.m3outlineVariant - radius: Appearance.rounding.large - } - - RowLayout { - id: dockRow - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.horizontalCenter: parent.horizontalCenter - spacing: 3 - property real padding: 5 - - VerticalButtonGroup { - Layout.topMargin: Appearance.sizes.hyprlandGapsOut // why does this work - GroupButton { // Pin button - baseWidth: 35 - baseHeight: 35 - clickedWidth: baseWidth - clickedHeight: baseHeight + 20 - buttonRadius: Appearance.rounding.normal - toggled: root.pinned - onClicked: root.pinned = !root.pinned - contentItem: MaterialSymbol { - text: "keep" - horizontalAlignment: Text.AlignHCenter - iconSize: Appearance.font.pixelSize.larger - color: root.pinned ? Appearance.m3colors.m3onPrimary : Appearance.colors.colOnLayer0 - } - } - } - DockSeparator {} - DockApps { id: dockApps; } - DockSeparator {} - DockButton { - Layout.fillHeight: true - onClicked: Hyprland.dispatch("global quickshell:overviewToggle") + VerticalButtonGroup { + Layout.topMargin: Appearance.sizes.hyprlandGapsOut // why does this work + GroupButton { // Pin button + baseWidth: 35 + baseHeight: 35 + clickedWidth: baseWidth + clickedHeight: baseHeight + 20 + buttonRadius: Appearance.rounding.normal + toggled: root.pinned + onClicked: root.pinned = !root.pinned contentItem: MaterialSymbol { - anchors.fill: parent + text: "keep" horizontalAlignment: Text.AlignHCenter - font.pixelSize: parent.width / 2 - text: "apps" - color: Appearance.colors.colOnLayer0 + iconSize: Appearance.font.pixelSize.larger + color: root.pinned ? Appearance.m3colors.m3onPrimary : Appearance.colors.colOnLayer0 } } } - } - } - + DockSeparator {} + DockApps { id: dockApps; } + DockSeparator {} + DockButton { + Layout.fillHeight: true + onClicked: Hyprland.dispatch("global quickshell:overviewToggle") + contentItem: MaterialSymbol { + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + font.pixelSize: parent.width / 2 + text: "apps" + color: Appearance.colors.colOnLayer0 + } + } + } + } } + } } } From 36390e107b7508830ef1616982cc29b0df07c53b Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 16 Jul 2025 09:35:42 +0700 Subject: [PATCH 16/25] dock: dont anchor left right --- .config/quickshell/ii/modules/dock/Dock.qml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.config/quickshell/ii/modules/dock/Dock.qml b/.config/quickshell/ii/modules/dock/Dock.qml index 0cf51fd74..72681875e 100644 --- a/.config/quickshell/ii/modules/dock/Dock.qml +++ b/.config/quickshell/ii/modules/dock/Dock.qml @@ -30,8 +30,6 @@ Scope { // Scope anchors { bottom: true - left: true - right: true } exclusiveZone: root.pinned ? implicitHeight From eedd5d8f27f132f6df9aaf4fb56d57937c3d1166 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 16 Jul 2025 09:39:53 +0700 Subject: [PATCH 17/25] hyprland keybinds: remove trailing comma (#1559) --- .config/quickshell/ii/services/HyprlandKeybinds.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/ii/services/HyprlandKeybinds.qml b/.config/quickshell/ii/services/HyprlandKeybinds.qml index a313ffc47..45dc65483 100644 --- a/.config/quickshell/ii/services/HyprlandKeybinds.qml +++ b/.config/quickshell/ii/services/HyprlandKeybinds.qml @@ -41,7 +41,7 @@ Singleton { Process { id: getDefaultKeybinds running: true - command: [root.keybindParserPath, "--path", root.defaultKeybindConfigPath,] + command: [root.keybindParserPath, "--path", root.defaultKeybindConfigPath] stdout: SplitParser { onRead: data => { From 77f21d8e8980ea55583421458aadcbbeb55082c2 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 16 Jul 2025 09:52:46 +0700 Subject: [PATCH 18/25] overview: don't fill the screen --- .config/quickshell/ii/modules/overview/Overview.qml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.config/quickshell/ii/modules/overview/Overview.qml b/.config/quickshell/ii/modules/overview/Overview.qml index 952e5d29a..34a8b05ca 100644 --- a/.config/quickshell/ii/modules/overview/Overview.qml +++ b/.config/quickshell/ii/modules/overview/Overview.qml @@ -37,12 +37,8 @@ Scope { // item: GlobalStates.overviewOpen ? columnLayout : null // } - anchors { top: true - left: true - right: true - bottom: true } HyprlandFocusGrab { From 623cd842a648106af0b7e3468510b6d2b12bdefb Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 16 Jul 2025 10:00:48 +0700 Subject: [PATCH 19/25] search: prevent shaky while typing, prevent clipboard scrolling to bottom --- .config/quickshell/ii/modules/overview/Overview.qml | 2 ++ .config/quickshell/ii/modules/overview/SearchWidget.qml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.config/quickshell/ii/modules/overview/Overview.qml b/.config/quickshell/ii/modules/overview/Overview.qml index 34a8b05ca..46204b3a6 100644 --- a/.config/quickshell/ii/modules/overview/Overview.qml +++ b/.config/quickshell/ii/modules/overview/Overview.qml @@ -39,6 +39,7 @@ Scope { anchors { top: true + bottom: true } HyprlandFocusGrab { @@ -81,6 +82,7 @@ Scope { function setSearchingText(text) { searchWidget.setSearchingText(text); + searchWidget.focusFirstItemIfNeeded(); } ColumnLayout { diff --git a/.config/quickshell/ii/modules/overview/SearchWidget.qml b/.config/quickshell/ii/modules/overview/SearchWidget.qml index 2754567ea..5304d096d 100644 --- a/.config/quickshell/ii/modules/overview/SearchWidget.qml +++ b/.config/quickshell/ii/modules/overview/SearchWidget.qml @@ -396,6 +396,8 @@ Item { // Wrapper } } + onModelChanged: root.focusFirstItemIfNeeded() + delegate: SearchItem { // The selectable item for each search result required property var modelData From d176d385522e1f8d30dd11cc6e9ee5be03f8d541 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 16 Jul 2025 10:23:21 +0700 Subject: [PATCH 20/25] dock: fix hover region and weird popup cutoff --- .config/quickshell/ii/modules/dock/Dock.qml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/.config/quickshell/ii/modules/dock/Dock.qml b/.config/quickshell/ii/modules/dock/Dock.qml index 72681875e..ff0717fc7 100644 --- a/.config/quickshell/ii/modules/dock/Dock.qml +++ b/.config/quickshell/ii/modules/dock/Dock.qml @@ -30,6 +30,8 @@ Scope { // Scope anchors { bottom: true + left: true + right: true } exclusiveZone: root.pinned ? implicitHeight @@ -48,14 +50,15 @@ Scope { // Scope MouseArea { id: dockMouseArea - anchors.top: parent.top height: parent.height - anchors.topMargin: dockRoot.reveal ? 0 : - Config.options?.dock.hoverToReveal ? (dockRoot.implicitHeight - Config.options.dock.hoverRegionHeight) : - (dockRoot.implicitHeight + 1) - - anchors.left: parent.left - anchors.right: parent.right + anchors { + top: parent.top + topMargin: dockRoot.reveal ? 0 : + Config.options?.dock.hoverToReveal ? (dockRoot.implicitHeight - Config.options.dock.hoverRegionHeight) : + (dockRoot.implicitHeight + 1) + horizontalCenter: parent.horizontalCenter + } + implicitWidth: dockHoverRegion.implicitWidth + Appearance.sizes.elevationMargin * 2 hoverEnabled: true Behavior on anchors.topMargin { @@ -65,6 +68,7 @@ Scope { // Scope Item { id: dockHoverRegion anchors.fill: parent + implicitWidth: dockBackground.implicitWidth Item { // Wrapper for the dock background id: dockBackground From 19aa66568fd025d97b8a32f5405a3bd05868086a Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 16 Jul 2025 10:38:21 +0700 Subject: [PATCH 21/25] background: add parallax for sidebars --- .config/quickshell/ii/modules/background/Background.qml | 4 +++- .config/quickshell/ii/modules/common/Config.qml | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.config/quickshell/ii/modules/background/Background.qml b/.config/quickshell/ii/modules/background/Background.qml index 8bf4b6ec3..8c41e926d 100644 --- a/.config/quickshell/ii/modules/background/Background.qml +++ b/.config/quickshell/ii/modules/background/Background.qml @@ -145,7 +145,9 @@ Scope { const lower = Math.floor(bgRoot.firstWorkspaceId / chunkSize) * chunkSize; const upper = Math.ceil(bgRoot.lastWorkspaceId / chunkSize) * chunkSize; const range = upper - lower; - return (bgRoot.monitor.activeWorkspace.id - lower) / range; + return (bgRoot.monitor.activeWorkspace.id - lower) / range + + (0.15 * GlobalStates.sidebarRightOpen * Config.options.background.parallax.enableSidebar) + - (0.15 * GlobalStates.sidebarLeftOpen * Config.options.background.parallax.enableSidebar) } property real effectiveValue: Math.max(0, Math.min(1, value)) x: -(bgRoot.movableXSpace) - (effectiveValue - 0.5) * 2 * bgRoot.movableXSpace diff --git a/.config/quickshell/ii/modules/common/Config.qml b/.config/quickshell/ii/modules/common/Config.qml index 582c11d8e..33ebc94c6 100644 --- a/.config/quickshell/ii/modules/common/Config.qml +++ b/.config/quickshell/ii/modules/common/Config.qml @@ -100,8 +100,9 @@ Singleton { property real clockY: -500 property string wallpaperPath: Quickshell.configPath("assets/images/default_wallpaper.png") property JsonObject parallax: JsonObject { - property real workspaceZoom: 1.07 // Relative to your screen, not wallpaper size property bool enableWorkspace: true + property real workspaceZoom: 1.07 // Relative to your screen, not wallpaper size + property bool enableSidebar: true } } From 93ef3c3bdae59538f18fa1fa6e7891ca0d84d3d0 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 16 Jul 2025 10:54:39 +0700 Subject: [PATCH 22/25] dock: fix screen --- .config/quickshell/ii/modules/dock/Dock.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.config/quickshell/ii/modules/dock/Dock.qml b/.config/quickshell/ii/modules/dock/Dock.qml index ff0717fc7..5b8e1b198 100644 --- a/.config/quickshell/ii/modules/dock/Dock.qml +++ b/.config/quickshell/ii/modules/dock/Dock.qml @@ -20,8 +20,9 @@ Scope { // Scope model: Quickshell.screens PanelWindow { // Window + required property var modelData id: dockRoot - screen: dockLoader.modelData + screen: modelData property bool reveal: root.pinned || (Config.options?.dock.hoverToReveal && dockMouseArea.containsMouse) From db82175b6145f74629fad41c2c5d7fa8ac6bcdf9 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 16 Jul 2025 15:54:23 +0200 Subject: [PATCH 23/25] Update CONTRIBUTING.md --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3bd5c8f8d..026726a8e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ # Contributing -- Please understand that dotfiles are personal -- If you add new stuff, ask me first to not waste your work -- FFS make multiple PRs if you have many features +- Please understand that dotfiles are after all personal. I can accept features I do not personally want, but in that case I will ask you to make it configurable/optionally loaded +- If you add new stuff, it's a good idea to ask me first to not waste your work +- Please make multiple PRs if you have many features From 864c83172b6a6a3a01190a6f7d9b59c7beee2b71 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 16 Jul 2025 17:41:16 +0200 Subject: [PATCH 24/25] readme: make the ii logo on the left and note on the right --- README.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 28fdb28e7..da76e53ef 100644 --- a/README.md +++ b/README.md @@ -74,11 +74,17 @@

-
- illogical-impulse logo -
+ + + + + +
+ illogical-impulse logo + + latest and only style that I actively use. Other past styles are still there for your viewing pleasure and not actual use, but code is still available, see below. +
-_latest and only style that I actively use. Other past styles are still there for your viewing pleasure and not actual use, but code is still available, see below._ ### illogical-impulseQuickshell @@ -152,6 +158,8 @@ Widget system: AGS | Support: Limited, no new features - EWW: [fufexan's config](https://github.com/fufexan/dotfiles) (he thanks more people there btw) - AI bots for providing useful examples + [@tokyobot](https://github.com/tokyob0t) for saying hi +

• stonks •

From 035e8b3e5d3e293ac409cb92af25250500c4b3b0 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 17 Jul 2025 00:22:15 +0700 Subject: [PATCH 25/25] ai: fix weird save chat description --- .config/quickshell/ii/modules/sidebarLeft/AiChat.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/ii/modules/sidebarLeft/AiChat.qml b/.config/quickshell/ii/modules/sidebarLeft/AiChat.qml index 6c4e65f97..86ae162bb 100644 --- a/.config/quickshell/ii/modules/sidebarLeft/AiChat.qml +++ b/.config/quickshell/ii/modules/sidebarLeft/AiChat.qml @@ -438,7 +438,7 @@ Inline w/ backslash and round brackets \\(e^{i\\pi} + 1 = 0\\) return { name: `${messageInputField.text.trim().split(" ").length == 1 ? (root.commandPrefix + "save ") : ""}${chatName}`, displayName: `${chatName}`, - description: `Save chat from ${chatName}`, + description: `Save chat to ${chatName}`, } }) } else if (messageInputField.text.startsWith(`${root.commandPrefix}load`)) {