From 5e6db59bfcf1225559ad5284fb36709ddfcd300b Mon Sep 17 00:00:00 2001 From: fb24m Date: Sat, 11 Apr 2026 22:07:16 +0400 Subject: [PATCH 1/8] compile matugen from sources instead of installing it from copr --- sdata/dist-fedora/SPECS/matugen.spec | 41 ++++++++++++++++++++++++++++ sdata/dist-fedora/feddeps.toml | 1 - sdata/dist-fedora/install-deps.sh | 1 + 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 sdata/dist-fedora/SPECS/matugen.spec diff --git a/sdata/dist-fedora/SPECS/matugen.spec b/sdata/dist-fedora/SPECS/matugen.spec new file mode 100644 index 000000000..9117c04ab --- /dev/null +++ b/sdata/dist-fedora/SPECS/matugen.spec @@ -0,0 +1,41 @@ +# Original-Spec: https://copr-dist-git.fedorainfracloud.org/packages/errornointernet/quickshell/quickshell-git.git/plain/quickshell-git.spec?h=master + +%global commit e65259d68edc034905da477b6c1a349e89e2aa8d +%global shortcommit %(c=%{commit}; echo ${c:0:7}) +%global commits 719 +%global snapdate 20260213 +%global tag 4.0.0 + +Name: matugen +Version: %{tag}^%{commits}.%{shortcommit} +Release: 0%{?dist} +Summary: A cross-platform material you and base16 color generation tool + +License: GPL-2.0 +URL: https://github.com/InioX/matugen +Source0: %{url}/archive/%{commit}/matugen-%{shortcommit}.tar.gz + +BuildRequires: rust-packaging +BuildRequires: cargo +BuildRequires: gcc + +%description +Flexible toolkit for making desktop shells with QtQuick, targeting +Wayland and X11. + +%prep +%autosetup -n matugen-%{commit} -p1 + +%build +cargo build --release + +%install +install -Dm0755 target/release/matugen %{buildroot}%{_bindir}/matugen + +%files +%license LICENSE +%doc README.md +%{_bindir}/matugen + +%changelog +%autochangelog diff --git a/sdata/dist-fedora/feddeps.toml b/sdata/dist-fedora/feddeps.toml index 7329cdfc5..e1b842e50 100644 --- a/sdata/dist-fedora/feddeps.toml +++ b/sdata/dist-fedora/feddeps.toml @@ -68,7 +68,6 @@ packages = [ "fish", "fontconfig", "kitty", - "matugen", "florian-karsten-space-grotesk-fonts", "starship", "jetbrains-mono-nerd-fonts", diff --git a/sdata/dist-fedora/install-deps.sh b/sdata/dist-fedora/install-deps.sh index 55c0d8112..4bb925667 100644 --- a/sdata/dist-fedora/install-deps.sh +++ b/sdata/dist-fedora/install-deps.sh @@ -38,6 +38,7 @@ function install_RPMS() { "$rpm_specs/cpptrace.spec" "$rpm_specs/quickshell-git.spec" "$rpm_specs/hyprland-qt-support.spec" + "$rpm_specs/matugen.spec" ) for spec_file in ${local_specs[@]}; do # Download sources From 4b4e1fd53cdfe49cb08cf227dd71e2824caf7cb9 Mon Sep 17 00:00:00 2001 From: fb24m Date: Sat, 11 Apr 2026 22:23:08 +0400 Subject: [PATCH 2/8] unquickshell matugen.spec --- sdata/dist-fedora/SPECS/matugen.spec | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sdata/dist-fedora/SPECS/matugen.spec b/sdata/dist-fedora/SPECS/matugen.spec index 9117c04ab..9f7bc70aa 100644 --- a/sdata/dist-fedora/SPECS/matugen.spec +++ b/sdata/dist-fedora/SPECS/matugen.spec @@ -1,5 +1,3 @@ -# Original-Spec: https://copr-dist-git.fedorainfracloud.org/packages/errornointernet/quickshell/quickshell-git.git/plain/quickshell-git.spec?h=master - %global commit e65259d68edc034905da477b6c1a349e89e2aa8d %global shortcommit %(c=%{commit}; echo ${c:0:7}) %global commits 719 @@ -20,8 +18,7 @@ BuildRequires: cargo BuildRequires: gcc %description -Flexible toolkit for making desktop shells with QtQuick, targeting -Wayland and X11. +A cross-platform material you and base16 color generation tool %prep %autosetup -n matugen-%{commit} -p1 From 94fa3f9c4009796b9a1d2ae2659b87fcbd9bd8b2 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 11 Apr 2026 21:07:22 +0200 Subject: [PATCH 3/8] bar: make lower-center group more compact --- .../quickshell/ii/modules/common/Icons.qml | 30 +++++++++ .../ii/verticalBar/BatteryIndicator.qml | 28 +++++--- .../ii/verticalBar/VerticalBarContent.qml | 7 -- .../ii/verticalBar/VerticalClockWidget.qml | 48 +++++++++----- .../ii/verticalBar/VerticalDateWidget.qml | 64 ------------------- 5 files changed, 82 insertions(+), 95 deletions(-) delete mode 100644 dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalDateWidget.qml diff --git a/dots/.config/quickshell/ii/modules/common/Icons.qml b/dots/.config/quickshell/ii/modules/common/Icons.qml index 9858d2963..30bd3bf14 100644 --- a/dots/.config/quickshell/ii/modules/common/Icons.qml +++ b/dots/.config/quickshell/ii/modules/common/Icons.qml @@ -3,10 +3,22 @@ pragma Singleton // From https://github.com/caelestia-dots/shell (GPLv3) import Quickshell +import qs.services Singleton { id: root + function getBatteryIcon(percentage: int): string { + if (percentage >= 93) return "battery_android_full"; + if (percentage >= 78) return "battery_android_6"; + if (percentage >= 64) return "battery_android_5"; + if (percentage >= 50) return "battery_android_4"; + if (percentage >= 35) return "battery_android_3"; + if (percentage >= 21) return "battery_android_2"; + if (percentage >= 7) return "battery_android_1"; + return "battery_android_0"; + } + function getBluetoothDeviceMaterialSymbol(systemIconName: string): string { if (systemIconName.includes("headset") || systemIconName.includes("headphones")) return "headphones"; @@ -21,6 +33,24 @@ Singleton { return "bluetooth"; } + function getNetworkMaterialSymbol() { + if (Network.ethernet) return "lan"; + if (Network.wifiEnabled && Network.wifiStatus === "connected") { + const strength = Network.active?.strength ?? 0 + if (strength > 83) return "signal_wifi_4_bar"; + if (strength > 67) return "network_wifi"; + if (strength > 50) return "network_wifi_3_bar"; + if (strength > 33) return "network_wifi_2_bar"; + if (strength > 17) return "network_wifi_1_bar"; + return "signal_wifi_0_bar" + } else { + if (Network.wifiStatus === "connecting") return "signal_wifi_statusbar_not_connected"; + if (Network.wifiStatus === "disconnected") return "wifi_find"; + if (Network.wifiStatus === "disabled") return "signal_wifi_off"; + return "signal_wifi_bad"; + } + } + readonly property var weatherIconMap: ({ "113": "clear_day", "116": "partly_cloudy_day", diff --git a/dots/.config/quickshell/ii/modules/ii/verticalBar/BatteryIndicator.qml b/dots/.config/quickshell/ii/modules/ii/verticalBar/BatteryIndicator.qml index 3f20cbd2c..104baa35c 100644 --- a/dots/.config/quickshell/ii/modules/ii/verticalBar/BatteryIndicator.qml +++ b/dots/.config/quickshell/ii/modules/ii/verticalBar/BatteryIndicator.qml @@ -21,14 +21,15 @@ MouseArea { id: batteryProgress anchors.centerIn: parent vertical: true - valueBarWidth: 21 - valueBarHeight: 40 + valueBarWidth: 20 + valueBarHeight: 36 value: percentage + // value: 1 highlightColor: (isLow && !isCharging) ? Appearance.m3colors.m3error : Appearance.colors.colOnSecondaryContainer font { - pixelSize: text.length > 2 ? 11 : 13 - weight: text.length > 2 ? Font.Medium : Font.DemiBold + pixelSize: 13 + weight: Font.DemiBold } textMask: Item { @@ -36,20 +37,29 @@ MouseArea { width: batteryProgress.valueBarWidth height: batteryProgress.valueBarHeight - ColumnLayout { + Column { anchors.centerIn: parent - spacing: 0 + spacing: -4 MaterialSymbol { id: boltIcon - Layout.alignment: Qt.AlignHCenter + anchors.horizontalCenter: parent.horizontalCenter fill: 1 - text: isCharging ? "bolt" : "battery_android_full" + text: { + if (batteryProgress.value == 1) { + return "check"; + } else if (root.isCharging) { + return "bolt"; + } else { + return Icons.getBatteryIcon(Battery.percentage * 100); + } + } iconSize: Appearance.font.pixelSize.normal animateChange: true } StyledText { - Layout.alignment: Qt.AlignHCenter + visible: text.length <= 2 + anchors.horizontalCenter: parent.horizontalCenter font: batteryProgress.font text: batteryProgress.text } diff --git a/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalBarContent.qml b/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalBarContent.qml index 4e34d421a..b9689be83 100644 --- a/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalBarContent.qml +++ b/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalBarContent.qml @@ -140,13 +140,6 @@ Item { // Bar content region Layout.fillHeight: false } - HorizontalBarSeparator {} - - VerticalDateWidget { - Layout.fillWidth: true - Layout.fillHeight: false - } - HorizontalBarSeparator { visible: Battery.available } diff --git a/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalClockWidget.qml b/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalClockWidget.qml index 3f9ca818a..6c8788715 100644 --- a/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalClockWidget.qml +++ b/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalClockWidget.qml @@ -8,26 +8,44 @@ import qs.modules.ii.bar as Bar Item { id: root property bool borderless: Config.options.bar.borderless - implicitHeight: clockColumn.implicitHeight + implicitHeight: column.implicitHeight implicitWidth: Appearance.sizes.verticalBarWidth - ColumnLayout { - id: clockColumn - anchors.centerIn: parent - spacing: 0 + readonly property string dateTimeString: DateTime.time + readonly property bool hasAmPm: dateTimeString.toLowerCase().includes("am") || dateTimeString.toLowerCase().includes("pm") - Repeater { - model: DateTime.time.split(/[: ]/) - delegate: StyledText { - required property string modelData - Layout.alignment: Qt.AlignHCenter - font.pixelSize: modelData.match(/am|pm/i) ? - Appearance.font.pixelSize.smaller // Smaller "am"/"pm" text - : Appearance.font.pixelSize.large - color: Appearance.colors.colOnLayer1 - text: modelData.padStart(2, "0") + Column { + id: column + anchors.centerIn: parent + spacing: root.hasAmPm ? 6 : 0 + + Column { + anchors.horizontalCenter: parent.horizontalCenter + spacing: -4 + + Repeater { + model: root.dateTimeString.split(/[: ]/) + delegate: StyledText { + required property string modelData + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: { + if (modelData.match(/am|pm/i)) + return Appearance.font.pixelSize.smaller; + else + // Smaller "am"/"pm" text + return Appearance.font.pixelSize.large; + } + color: Appearance.colors.colOnLayer1 + text: modelData.padStart(2, "0") + } } } + StyledText { + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: Appearance.font.pixelSize.smallest + color: Appearance.colors.colOnLayer1 + text: DateTime.shortDate + } } MouseArea { diff --git a/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalDateWidget.qml b/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalDateWidget.qml deleted file mode 100644 index bf76ebe67..000000000 --- a/dots/.config/quickshell/ii/modules/ii/verticalBar/VerticalDateWidget.qml +++ /dev/null @@ -1,64 +0,0 @@ -import qs.modules.common -import qs.modules.common.widgets -import qs.services -import QtQuick -import QtQuick.Shapes -import QtQuick.Layouts -import qs.modules.ii.bar as Bar - -Item { // Full hitbox - id: root - - implicitHeight: content.implicitHeight - implicitWidth: Appearance.sizes.verticalBarWidth - property var dayOfMonth: DateTime.shortDate.split(/[-\/]/)[0] // What if 🍔murica🦅? good question - property var monthOfYear: DateTime.shortDate.split(/[-\/]/)[1] - - Item { // Boundaries for date numbers - id: content - anchors.centerIn: parent - implicitWidth: 24 - implicitHeight: 30 - - Shape { - id: diagonalLine - property real padding: 4 - anchors.fill: parent - preferredRendererType: Shape.CurveRenderer - - ShapePath { - strokeWidth: 1.2 - strokeColor: Appearance.colors.colSubtext - fillColor: "transparent" - startX: content.width - diagonalLine.padding - startY: diagonalLine.padding - PathLine { - x: diagonalLine.padding - y: content.height - diagonalLine.padding - } - } - } - - StyledText { - id: dayText - anchors { - top: parent.top - left: parent.left - } - font.pixelSize: 13 - color: Appearance.colors.colOnLayer1 - text: dayOfMonth - } - - StyledText { - id: monthText - anchors { - bottom: parent.bottom - right: parent.right - } - font.pixelSize: 13 - color: Appearance.colors.colOnLayer1 - text: monthOfYear - } - } -} From 0040588fd27b315d693c7baf03981498b63789d8 Mon Sep 17 00:00:00 2001 From: Minh <97237370+end-4@users.noreply.github.com> Date: Sun, 12 Apr 2026 00:03:42 +0200 Subject: [PATCH 4/8] update readme --- .github/README.md | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/.github/README.md b/.github/README.md index 02e9e7f36..cd0d6c696 100644 --- a/.github/README.md +++ b/.github/README.md @@ -20,23 +20,22 @@
Notable features - - **Overview**: Shows open apps with live previews. Type to search/calculate/run - - **AI**: Gemini API and Ollama models - - **Autogenerated colors**: Accessible and beautiful Material colors based on wallpaper + - **Overview**: Shows open apps with live previews + - **AI**: Gemini, Ollama, and more + - **QoL**: screen translation, anti-flashbang, Google Lens + - **Material themes**: Choose your wallpaper, done, enjoy - **Transparent installation**: Every command is shown before it's run
- Installation (illogical-impulse Quickshell) + Installation - _If you're new to Linux and decide to use Hyprland, you're in for a tough ride._ - Just run `bash <(curl -s https://ii.clsty.link/get)` - Or, clone this repo and run `./setup install` - - See [document](https://ii.clsty.link/en/ii-qs/01setup/) for details. - - **Default keybinds**: Should be somewhat familiar to Windows or GNOME users. Important ones: + - See [the wiki](https://ii.clsty.link/en/ii-qs/01setup/) for more details + - **Keybinds**: Should be somewhat familiar to Windows or GNOME users. Important ones: - `Super`+`/` = keybind list - `Super`+`Enter` = terminal - - Should look something like this: - image
@@ -50,13 +49,11 @@ | [Quickshell](https://quickshell.outfoxxed.me/) | A QtQuick-based widget system, used for the status bar, sidebars, etc. | | Others | See [deps-info.md](https://github.com/end-4/dots-hyprland/blob/main/sdata/deps-info.md) | - [not every bar is waybar] [not every bar is waybar] [not every bar is waybar] [not every bar is waybar] [not every bar is waybar] -
Discord - Server link | I hope this provides a friendlier environment for support without needing me to personally accept every friend request/DM. For real issues, prefer GitHub + Server link | I hope this provides a friendlier environment for support without needing me to personally accept every friend request/DM. For real issues, prefer GitHub
@@ -71,19 +68,15 @@ ### illogical-impulseQuickshell -This is the latest and only supported style. Other stuff are still there mostly for viewing pleasure and not actual use, but code is still available, see below. - Widget system: Quickshell | Support: Yes [Showcase video](https://www.youtube.com/watch?v=RPwovTInagE) | AI, settings app | Some widgets | |:---|:---------------| -| image | image | -| Window management | Built with love | -| image | image | - -#### Other older styles are available at the end of the readme +| image | image | +| Window management | wow look its orange | +| image | image |

• thank you •

@@ -111,13 +104,13 @@ Widget system: Quickshell | Support: Yes ---
-

• old, UNSUPPORTED stuff •

+

• previous styles •

+- **Unsupported!** - **Source**: illogical-impulse AGS in `ii-ags` branch, others in `archive` branch. -- **No support** will be provided -- **Reverse chronological order** list. Older = more naive & spaghetti code +- List is in reverse chronological order ### illogical-impulseAGS From eae36f4d4f862f7a2eba5dbc28d389e865213a4b Mon Sep 17 00:00:00 2001 From: fb24m Date: Sun, 12 Apr 2026 15:32:01 +0400 Subject: [PATCH 5/8] fedora: skip up to date packages while installing --- sdata/dist-fedora/install-deps.sh | 43 ++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/sdata/dist-fedora/install-deps.sh b/sdata/dist-fedora/install-deps.sh index 4bb925667..cf0efb675 100644 --- a/sdata/dist-fedora/install-deps.sh +++ b/sdata/dist-fedora/install-deps.sh @@ -28,27 +28,46 @@ function install_RPMS() { local local_specs local_rpms rpmbuildroot="${rpmbuildroot:-${REPO_ROOT}/cache/rpmbuild}" + x rm -rf "${REPO_ROOT}/cache/rpmbuild" x mkdir -p "$rpmbuildroot"/{BUILD,RPMS,SOURCES} x cp -r "${REPO_ROOT}/sdata/dist-fedora/SPECS" "$rpmbuildroot/" x cd $rpmbuildroot/SPECS - # we need cpptrace BEFORE quickshell-git - local_specs=( - "$rpm_specs/cpptrace.spec" - "$rpm_specs/quickshell-git.spec" - "$rpm_specs/hyprland-qt-support.spec" - "$rpm_specs/matugen.spec" + packages=( + "cpptrace" + "quickshell-git" + "hyprland-qt-support" + "matugen" ) - for spec_file in ${local_specs[@]}; do + for package in "${packages[@]}"; do + echo "start $package" + + spec="$rpm_specs/$package.spec" + installed_rpm_stamp=$(rpm -q --qf '%{NVRA}\n' "$package" 2>/dev/null || true) + spec_stamp=$(rpmspec -q --qf '%{NVRA}\n' "$spec") + + [[ -f "$spec" ]] || { + echo "Missing spec: $spec" + continue + } + + echo "rpm_specs=$rpm_specs" + echo "spec=$spec" + echo "spec_stamp=$spec_stamp" + + if [[ "$installed_rpm_stamp" == "$spec_stamp" ]]; then + printf "$installed_rpm_stamp is installed and up to date. Skipping.\n" + continue + fi # Download sources - x spectool -g -C "$rpmbuildroot/SOURCES" "$spec_file" + x spectool -g -C "$rpmbuildroot/SOURCES" "$spec" # Install build dependencies - r x sudo dnf builddep -y "$spec_file" + r x sudo dnf builddep -y "$spec" # Build the RPM package locally. If it fails, download it from COPR. - if ! rpmbuild -bb --define "_topdir $rpmbuildroot" --define "debug_package %{nil}" "$spec_file"; then - printf "${STY_RED}Local build encountered an issue. Downloading $(basename "$spec_file" .spec) from COPR. Report the issue to Discussions pls.${STY_RST}\n" - sudo dnf install -y $(basename "$spec_file" .spec) + if ! rpmbuild -bb --define "_topdir $rpmbuildroot" --define "debug_package %{nil}" "$spec"; then + printf "${STY_RED}Local build encountered an issue. Downloading $(basename "$spec" .spec) from COPR. Report the issue to Discussions pls.${STY_RST}\n" + sudo dnf install -y $(basename "$spec" .spec) nolock_qs=true fi done From fdd3cf5ef82e54d6c889b680450a0952864d04e6 Mon Sep 17 00:00:00 2001 From: fb24m Date: Mon, 13 Apr 2026 17:44:50 +0400 Subject: [PATCH 6/8] Update gtk4 styles for Material 3 Expressive (#3127) Co-authored-by: Minh <97237370+end-4@users.noreply.github.com> --- .../.config/matugen/templates/gtk-4.0/gtk.css | 454 +++++++++++++++++- 1 file changed, 449 insertions(+), 5 deletions(-) diff --git a/dots/.config/matugen/templates/gtk-4.0/gtk.css b/dots/.config/matugen/templates/gtk-4.0/gtk.css index 07c8099f5..84cd38ee1 100644 --- a/dots/.config/matugen/templates/gtk-4.0/gtk.css +++ b/dots/.config/matugen/templates/gtk-4.0/gtk.css @@ -6,6 +6,10 @@ @media (prefers-color-scheme: light) { /* Accents */ @define-color accent_color {{colors.primary.light.hex}}; + @define-color accent_hover_color rgba({{colors.primary.light.red}}, {{colors.primary.light.green}}, {{colors.primary.light.blue}}, 0.08); + @define-color accent_vibrant_hover_color rgba({{colors.primary.light.red}}, {{colors.primary.light.green}}, {{colors.primary.light.blue}}, 0.18); + @define-color accent_active_color rgba({{colors.primary.light.red}}, {{colors.primary.light.green}}, {{colors.primary.light.blue}}, 0.1); + @define-color accent_vibrant_active_color rgba({{colors.primary.light.red}}, {{colors.primary.light.green}}, {{colors.primary.light.blue}}, 0.26); @define-color accent_fg_color {{colors.on_primary.light.hex}}; @define-color accent_bg_color {{colors.primary.light.hex}}; @define-color destructive_bg_color {{colors.error_container.light.hex}}; @@ -22,11 +26,13 @@ @define-color headerbar_fg_color {{colors.on_surface.light.hex}}; @define-color card_bg_color {{colors.surface_container.light.hex}}; @define-color card_fg_color {{colors.on_surface.light.hex}}; - @define-color sidebar_bg_color {{colors.surface_container.light.hex}}; + @define-color sidebar_bg_color {{colors.background.light.hex}}; @define-color sidebar_fg_color {{colors.on_surface.light.hex}}; + @define-color sidebar_row_active_bg_color {{colors.secondary_container.light.hex}}; + @define-color sidebar_row_active_fg_color {{colors.on_secondary_container.light.hex}}; @define-color secondary_sidebar_bg_color {{colors.surface_container_low.light.hex}}; @define-color secondary_sidebar_backdrop_color {{colors.surface_container_low.light.hex}}; - @define-color secondary_sidebar_fg_color {{colors.on_surface.light.hex}}; + @define-color secondary_sidebar_fg_color {{colors.on_surface_variant.light.hex}}; @define-color sidebar_border_color @sidebar_bg_color; @define-color sidebar_backdrop_color @sidebar_bg_color; @define-color view_bg_color {{colors.surface_container_lowest.light.hex}}; @@ -36,16 +42,37 @@ /* Popups */ @define-color popover_bg_color {{colors.surface_container_highest.light.hex}}; @define-color popover_fg_color {{colors.on_surface.light.hex}}; + @define-color popover_fg_hover_color rgba({{colors.on_surface.light.red}}, {{colors.on_surface.light.green}}, {{colors.on_surface.light.blue}}, 0.08); @define-color dialog_bg_color {{colors.surface_container_high.light.hex}}; @define-color dialog_fg_color {{colors.on_surface.light.hex}}; @define-color thumbnail_bg_color {{colors.surface_container_high.light.hex}}; @define-color thumbnail_fg_color {{colors.on_surface.light.hex}}; + + /* Material */ + @define-color inverse_on_surface {{colors.inverse_on_surface.light.hex}}; + @define-color inverse_primary {{colors.inverse_primary.light.hex}}; + @define-color inverse_surface {{colors.inverse_surface.light.hex}}; + @define-color surface_container_highest {{colors.surface_container_highest.light.hex}}; + @define-color surface_container_high {{colors.surface_container_high.light.hex}}; + @define-color on_surface_variant {{colors.on_surface_variant.light.hex}}; + @define-color surface_variant {{colors.surface_variant.light.hex}}; + + @define-color outline {{colors.outline.light.hex}}; + + /* Material state layers */ + @define-color inverse_on_surface_hover rgba({{colors.inverse_on_surface.light.red}}, {{colors.inverse_on_surface.light.green}}, {{colors.inverse_on_surface.light.blue}}, 0.08); + @define-color inverse_on_surface_active rgba({{colors.inverse_on_surface.light.red}}, {{colors.inverse_on_surface.light.green}}, {{colors.inverse_on_surface.light.blue}}, 0.18); + @define-color inverse_primary_hover rgba({{colors.inverse_primary.light.red}}, {{colors.inverse_primary.light.green}}, {{colors.inverse_primary.light.blue}}, 0.08); + @define-color inverse_primary_active rgba({{colors.inverse_primary.light.red}}, {{colors.inverse_primary.light.green}}, {{colors.inverse_primary.light.blue}}, 0.18); } @media (prefers-color-scheme: dark) { - /* Accents */ @define-color accent_color {{colors.primary.dark.hex}}; + @define-color accent_hover_color rgba({{colors.primary.dark.red}}, {{colors.primary.dark.green}}, {{colors.primary.dark.blue}}, 0.08); + @define-color accent_vibrant_hover_color rgba({{colors.primary.dark.red}}, {{colors.primary.dark.green}}, {{colors.primary.dark.blue}}, 0.18); + @define-color accent_active_color rgba({{colors.primary.dark.red}}, {{colors.primary.dark.green}}, {{colors.primary.dark.blue}}, 0.1); + @define-color accent_vibrant_active_color rgba({{colors.primary.dark.red}}, {{colors.primary.dark.green}}, {{colors.primary.dark.blue}}, 0.2); @define-color accent_fg_color {{colors.on_primary.dark.hex}}; @define-color accent_bg_color {{colors.primary.dark.hex}}; @define-color destructive_bg_color {{colors.error_container.dark.hex}}; @@ -62,11 +89,13 @@ @define-color headerbar_fg_color {{colors.on_surface.dark.hex}}; @define-color card_bg_color {{colors.surface_container.dark.hex}}; @define-color card_fg_color {{colors.on_surface.dark.hex}}; - @define-color sidebar_bg_color {{colors.surface_container.dark.hex}}; + @define-color sidebar_bg_color {{colors.background.dark.hex}}; @define-color sidebar_fg_color {{colors.on_surface.dark.hex}}; + @define-color sidebar_row_active_bg_color {{colors.secondary_container.dark.hex}}; + @define-color sidebar_row_active_fg_color {{colors.on_secondary_container.dark.hex}}; @define-color secondary_sidebar_bg_color {{colors.surface_container_low.dark.hex}}; @define-color secondary_sidebar_backdrop_color {{colors.surface_container_low.dark.hex}}; - @define-color secondary_sidebar_fg_color {{colors.on_surface.dark.hex}}; + @define-color secondary_sidebar_fg_color {{colors.on_surface_variant.dark.hex}}; @define-color sidebar_border_color @sidebar_bg_color; @define-color sidebar_backdrop_color @sidebar_bg_color; @define-color view_bg_color {{colors.surface_container_lowest.dark.hex}}; @@ -76,8 +105,423 @@ /* Popups */ @define-color popover_bg_color {{colors.surface_container_highest.dark.hex}}; @define-color popover_fg_color {{colors.on_surface.dark.hex}}; + @define-color popover_fg_hover_color rgba({{colors.on_surface.dark.red}}, {{colors.on_surface.dark.green}}, {{colors.on_surface.dark.blue}}, 0.08); @define-color dialog_bg_color {{colors.surface_container_high.dark.hex}}; @define-color dialog_fg_color {{colors.on_surface.dark.hex}}; @define-color thumbnail_bg_color {{colors.surface_container_high.dark.hex}}; @define-color thumbnail_fg_color {{colors.on_surface.dark.hex}}; + + /* Material */ + @define-color inverse_on_surface {{colors.inverse_on_surface.dark.hex}}; + @define-color inverse_primary {{colors.inverse_primary.dark.hex}}; + @define-color inverse_surface {{colors.inverse_surface.dark.hex}}; + @define-color surface_container_highest {{colors.surface_container_highest.dark.hex}}; + @define-color surface_container_high {{colors.surface_container_high.dark.hex}}; + @define-color on_surface_variant {{colors.on_surface_variant.dark.hex}}; + @define-color surface_variant {{colors.surface_variant.dark.hex}}; + + @define-color outline {{colors.outline.dark.hex}}; + + /* Material state layers */ + @define-color inverse_on_surface_hover rgba({{colors.inverse_on_surface.dark.red}}, {{colors.inverse_on_surface.dark.green}}, {{colors.inverse_on_surface.dark.blue}}, 0.08); + @define-color inverse_on_surface_active rgba({{colors.inverse_on_surface.dark.red}}, {{colors.inverse_on_surface.dark.green}}, {{colors.inverse_on_surface.dark.blue}}, 0.18); + @define-color inverse_primary_hover rgba({{colors.inverse_primary.dark.red}}, {{colors.inverse_primary.dark.green}}, {{colors.inverse_primary.dark.blue}}, 0.08); + @define-color inverse_primary_active rgba({{colors.inverse_primary.dark.red}}, {{colors.inverse_primary.dark.green}}, {{colors.inverse_primary.dark.blue}}, 0.18); +} + +* { + caret-color: @accent_color; +} + +window { + background: @window_bg_color; +} + +.text-button { + border-radius: 999px; +} + +.text-button, +.text-button * { + font-weight: 500; +} + +splitbutton { + background-color: transparent; +} + +splitbutton button { + border-top-left-radius: 999px; + border-bottom-left-radius: 999px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +splitbutton separator { + color: transparent; +} + +splitbutton menubutton { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + border-top-right-radius: 999px; + border-bottom-right-radius: 999px; +} + +.popup-menu-item { + background-color: transparent; + border-radius: 999px; +} + +#NautilusPathBar #NautilusPathButton * { + color: @accent_color; + font-weight: 400; +} + +#NautilusPathBar #NautilusPathButton { + background: @accent_active_color; + border-radius: 4px; + margin: 0; + margin-right: 2px; +} + +#NautilusPathBar { + background: transparent; +} + +#NautilusPathBar box box:first-child #NautilusPathButton { + border-radius: 24px 4px 4px 24px; +} + +#NautilusPathBar box box:last-child #NautilusPathButton { + border-radius: 4px 24px 24px 4px; +} + +#NautilusPathBar #NautilusPathButton.current-dir.current-dir { + border-radius: 999px; +} + +#NautilusPathBar #NautilusPathButton * { + color: @sidebar_row_active_fg_color; +} + +#NautilusPathBar .dim-label { + font-size: 0; +} + +#NautilusPathBar button .dim-label { + font-size: 14px; + opacity: 100%; +} + +#NautilusPathBar button { + border-radius: 8px; +} + + +#NautilusPathBar button:checked { + background: @accent_vibrant_hover_color; +} + +headerbar button { + border-radius: 999px; +} + +headerbar >windowhandle box stack > box:nth-child(2) { + background: @accent_active_color; + border-radius: 8px; +} + +.nautilus-list-view, +.nautilus-grid-view { + background: @secondary_sidebar_bg_color; + border-radius: 16px; +} + +.navigation-sidebar row * { + color: @sidebar_fg_color; + font-weight: 500; + font-size: 13px; +} + +.navigation-sidebar row { + border-radius: 999px; + padding: 2px; +} + +.navigation-sidebar row:hover { + background: @accent_hover_color; +} + +.navigation-sidebar row:active { + background: @accent_active_color; +} + +.navigation-sidebar row:selected { + background: @sidebar_row_active_bg_color; +} + +.navigation-sidebar row:selected * { + color: @sidebar_row_active_fg_color; +} + +banner widget { + border-radius: 16px 0 0 16px; + margin-bottom: 8px; + background-color: @secondary_sidebar_bg_color; +} + +.boxed-list { + box-shadow: none; + background-color: @window_bg_color; +} + +.boxed-list row { + background: @card_bg_color; + border-radius: 4px; + border: none; + margin-bottom: 2px; +} + +.boxed-list row.activatable:hover { + background-color: @thumbnail_bg_color; +} + +.boxed-list row.activatable:active { + background-color: @popover_bg_color; +} + +.horizontal>listview>row { + background-color: transparent; +} + +.boxed-list row:insensitive { + background-color: @card_bg_color; +} + +.text-button.toggle { + border-radius: 4px; + background-color: @surface_container_highest; + margin-left: 2px; +} + +.text-button.toggle:hover { + background-color: @surface_variant; +} + +.text-button.toggle:active { + background-color: @surface_container_highest; +} + +.text-button.toggle * { + color: @on_surface_variant; + font-weight: 400; +} + +.boxed-list row:first-child { + border-radius: 16px 16px 4px 4px; +} + +.boxed-list row:last-child { + border-radius: 4px 4px 16px 16px; + margin-bottom: 0; +} + +.text-button.toggle:first-child { + border-radius: 16px 4px 4px 16px; +} + +.text-button.toggle:last-child { + border-radius: 4px 16px 16px 4px; +} + +.boxed-list row:first-child:last-child, +.text-button.toggle:first-child:last-child { + border-radius: 16px; +} + +.text-button.toggle:checked { + background-color: @accent_bg_color; + border-radius: 999px; +} + +.text-button.toggle:checked * { + color: @accent_fg_color; + font-weight: 500; +} + +button.back { + border-radius: 999px; + background-color: @accent_hover_color; + padding-left: 4px; + padding-right: 6px; +} + +button.back * { + font-size: 12px; +} + +button.back:hover { + background-color: @accent_hover_color; +} + +button.back:active { + background-color: @accent_active_color; +} + +/* switch */ + +switch { + background: @secondary_sidebar_bg_color; + border: @outline 2px solid; + padding: 0; +} + +switch:checked { + background: @accent_color; + border-color: @accent_color; +} + +switch slider { + background: @outline; + margin: 3px; + min-width: 0; + min-height: 0; +} + +switch:checked slider { + background: @accent_fg_color; + outline: transparent 2px solid; + margin: 0px; +} + +/* toast */ + +toast { + border-radius: 999px; + padding: 6px 6px 6px 10px; + background-color: @inverse_surface; + color: @inverse_on_surface; +} + +toast .heading { + font-weight: 400; +} + +toast button { + background-color: transparent; + color: @inverse_primary; +} + +toast button:hover { + background-color: @inverse_primary_hover; +} + +toast button:active { + background-color: @inverse_primary_active; +} + +toast button:last-child { + color: @inverse_on_surface; +} + +toast button:last-child:hover { + background-color: @inverse_on_surface_hover; +} + +toast button:last-child:active { + background-color: @inverse_on_surface_active; +} + +.collapse-spacing.vertical { + padding-bottom: 0; +} + +tabbox { + padding: 0; +} + +tabbox tabboxchild tab, +tabbox tabboxchild { + background: transparent; + padding: 0 8px 3px; + border-radius: 999px; +} + +tabbox tabboxchild tab { + padding: 3px 8px; +} + +tab:hover { + background: @accent_hover_color; +} + +tab:active, +tab:selected { + background: @accent_active_color; +} + +tab .tab-title { + padding: 0 12px; + color: @secondary_sidebar_fg_color; +} + +tab .tab-title label { + border: none; + font-weight: 500; +} + +tab:selected .tab-title label { + padding: 6px 0; + color: @accent_color; +} + +/* popup menu */ + +popover listview.view row, +popover listview.view row:first-child, +popover listview.view row:last-child { + background: transparent; + border-radius: 8px; +} + +popover contents, +popover arrow { + background: @secondary_sidebar_bg_color; +} + +popover listview.view row:hover { + background: @popover_fg_hover_color; +} + +popover listview.view row:active { + background: @popover_fg_active_color; +} + +modelbutton { + padding: 2px 10px; +} + +modelbutton * { + color: @popover_fg_color; +} + +modelbutton:hover { + background-color: @popover_fg_hover_color; +} + +tooltip { + background-color: @inverse_surface; + color: @inverse_on_surface; + font-size: 11px; + padding: 5px 9px; +} + +/* search */ + +.entry-completion.entry-completion.entry-completion contents { + padding: 0; +} +.image-button.flat arrow { + background: transparent; } From 5467ab7f066b5772aaeeb087524879008accda8d Mon Sep 17 00:00:00 2001 From: Minh <97237370+end-4@users.noreply.github.com> Date: Mon, 13 Apr 2026 16:39:53 +0200 Subject: [PATCH 7/8] readme: don't assume reader's knowledge of "dotfiles" --- .github/README.md | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/.github/README.md b/.github/README.md index cd0d6c696..e74e09295 100644 --- a/.github/README.md +++ b/.github/README.md @@ -17,7 +17,16 @@

-
+
+ What this is/isn't + + - Technically, configuration files + - Realistically, mostly the custom graphical shell + - NOT a system setup script: no graphic drivers, no zram setup, etc. + +
+ +
Notable features - **Overview**: Shows open apps with live previews @@ -26,6 +35,7 @@ - **Material themes**: Choose your wallpaper, done, enjoy - **Transparent installation**: Every command is shown before it's run
+
Installation @@ -66,8 +76,6 @@ illogical-impulse logo -### illogical-impulseQuickshell - Widget system: Quickshell | Support: Yes [Showcase video](https://www.youtube.com/watch?v=RPwovTInagE) @@ -112,7 +120,7 @@ Widget system: Quickshell | Support: Yes - **Source**: illogical-impulse AGS in `ii-ags` branch, others in `archive` branch. - List is in reverse chronological order -### illogical-impulseAGS +### illogical-impulse (AGS) Widget system: AGS | Support: No @@ -124,7 +132,7 @@ Widget system: AGS | Support: No #### m3ww -Widget system: EWW | Support: No, dead +Widget system: EWW | Support: No Material Eww! From a57119005d71a29917b3c64bb0b5c8ca64a2be73 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 13 Apr 2026 16:40:41 +0200 Subject: [PATCH 8/8] update generic terminal theming to handle prompt colors --- .../.config/quickshell/ii/scripts/colors/terminal/sequences.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dots/.config/quickshell/ii/scripts/colors/terminal/sequences.txt b/dots/.config/quickshell/ii/scripts/colors/terminal/sequences.txt index 97459582e..a677181ed 100644 --- a/dots/.config/quickshell/ii/scripts/colors/terminal/sequences.txt +++ b/dots/.config/quickshell/ii/scripts/colors/terminal/sequences.txt @@ -1 +1 @@ -]4;0;#$term0 #\]1;0;#$term0 #\]4;1;#$term1 #\]4;2;#$term2 #\]4;3;#$term3 #\]4;4;#$term4 #\]4;5;#$term5 #\]4;6;#$term6 #\]4;7;#$term7 #\]4;8;#$term8 #\]4;9;#$term9 #\]4;10;#$term10 #\]4;11;#$term11 #\]4;12;#$term12 #\]4;13;#$term13 #\]4;14;#$term14 #\]4;15;#$term15 #\]10;#$term7 #\]11;[100]#$term0 #\]12;#$term7 #\]13;#$term7 #\]17;#$term7 #\]19;#$term0 #\]4;232;#$term7 #\]4;256;#$term7 #\]708;[100]#$term0 #\]11;#$term0 #\ \ No newline at end of file +]4;0;#$term0 #\]1;0;#$term0 #\]4;1;#$term1 #\]4;2;#$term2 #\]4;3;#$term3 #\]4;4;#$term4 #\]4;5;#$term5 #\]4;6;#$term6 #\]4;7;#$term7 #\]4;8;#$term8 #\]4;9;#$term9 #\]4;10;#$term10 #\]4;11;#$term11 #\]4;12;#$term12 #\]4;13;#$term13 #\]4;14;#$term14 #\]4;15;#$term15 #\]4;232;#$term7 #\]4;255;#$primary #\]4;254;#$primaryContainer #\]4;253;#$secondary #\]4;252;#$secondaryContainer #\]4;251;#$tertiary #\]4;250;#$tertiaryContainer #\]4;249;#$error #\]4;248;#$errorContainer #\]4;232;#$onPrimary #\]4;233;#$onPrimaryContainer #\]4;234;#$onSecondary #\]4;235;#$onSecondaryContainer #\]4;236;#$onTertiary #\]4;237;#$onTertiaryContainer #\]4;238;#$onError #\]4;239;#$onErrorContainer #\]4;240;#$onPrimary #\]4;243;#$primary #\]4;244;#$error #\]4;245;#$outlineVariant #\]10;#$term7 #\]11;[100]#$term0 #\]12;#$term7 #\]13;#$term7 #\]17;#$term7 #\]19;#$term0 #\]708;[100]#$term0 # \ No newline at end of file