From 7a993c044d36e10e0d7c15ed274c88a8ca03b0f3 Mon Sep 17 00:00:00 2001 From: lucy Date: Mon, 9 Feb 2026 12:07:07 +0100 Subject: [PATCH 01/32] tweak font axes --- reusables/CustomIcon.qml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/reusables/CustomIcon.qml b/reusables/CustomIcon.qml index d57ad0f..9509655 100644 --- a/reusables/CustomIcon.qml +++ b/reusables/CustomIcon.qml @@ -4,10 +4,14 @@ import qs.settings Text { color: Colors.onSurfaceColor + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter font.family: "Material Symbols Rounded" - font.pixelSize: 14 + font.pixelSize: 18 font.variableAxes: ({ - GRAD: 200, + FILL: 0, + GRAD: -25, + opsz: 36, wght: 400 }) } From 320826cdda7256c54e4bc132a61ec5d7ca35ca06 Mon Sep 17 00:00:00 2001 From: lucy Date: Mon, 9 Feb 2026 18:58:08 +0100 Subject: [PATCH 02/32] steal icon implementation from end4 the goat --- reusables/CustomIcon.qml | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/reusables/CustomIcon.qml b/reusables/CustomIcon.qml index 9509655..536573f 100644 --- a/reusables/CustomIcon.qml +++ b/reusables/CustomIcon.qml @@ -1,17 +1,28 @@ import QtQuick import qs -import qs.settings -Text { - color: Colors.onSurfaceColor - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - font.family: "Material Symbols Rounded" - font.pixelSize: 18 - font.variableAxes: ({ - FILL: 0, - GRAD: -25, - opsz: 36, - wght: 400 - }) +CustomText { + id: root + property real iconSize: 16 + property real fill: 1 + property real truncatedFill: fill.toFixed(1) // Reduce memory consumption spikes from constant font remapping + renderType: Text.NativeRendering + font { + hintingPreference: Font.PreferNoHinting + family: "Material Symbols Rounded" + pixelSize: iconSize + weight: Font.Normal + (Font.DemiBold - Font.Normal) * truncatedFill + variableAxes: { + "FILL": truncatedFill, + "opsz": iconSize + } + } + + Behavior on fill { // Leaky leaky, no good + NumberAnimation { + duration: 200 + easing.type: Easing.BezierSpline + easing.bezierCurve: [0.34, 0.80, 0.34, 1.00, 1, 1] + } + } } From d8cf594e5a607add4571c7fd08af91e1336053fa Mon Sep 17 00:00:00 2001 From: lucy Date: Mon, 9 Feb 2026 19:24:56 +0100 Subject: [PATCH 03/32] changes to font --- reusables/CustomIcon.qml | 2 +- reusables/CustomText.qml | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/reusables/CustomIcon.qml b/reusables/CustomIcon.qml index 536573f..56adb77 100644 --- a/reusables/CustomIcon.qml +++ b/reusables/CustomIcon.qml @@ -9,7 +9,7 @@ CustomText { renderType: Text.NativeRendering font { hintingPreference: Font.PreferNoHinting - family: "Material Symbols Rounded" + family: "Material Symbols Outlined" pixelSize: iconSize weight: Font.Normal + (Font.DemiBold - Font.Normal) * truncatedFill variableAxes: { diff --git a/reusables/CustomText.qml b/reusables/CustomText.qml index 81e8eb0..643af2f 100644 --- a/reusables/CustomText.qml +++ b/reusables/CustomText.qml @@ -3,12 +3,8 @@ import qs import qs.settings Text { - verticalAlignment: Text.AlignVCenter color: Colors.onSurfaceColor font.family: Settings.config.font font.pixelSize: Settings.config.fontSize - font.variableAxes: ({ - GRAD: 200, - wght: 400 - }) + font.weight: Settings.config.fontWeight } From cdd21601a0f3c6d133d12601d5a22b2c231e3619 Mon Sep 17 00:00:00 2001 From: lucy Date: Mon, 9 Feb 2026 20:12:22 +0100 Subject: [PATCH 04/32] use unicode instead of name for network icons --- modules/bar/Network.qml | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/modules/bar/Network.qml b/modules/bar/Network.qml index 3df2c4a..4b10959 100644 --- a/modules/bar/Network.qml +++ b/modules/bar/Network.qml @@ -22,14 +22,20 @@ Rectangle { var net = device.networks.values[i]; if (net.connected) { if (net.signalStrength <= 0.20) - return "android_wifi_0_bar"; + return "\uf0b0"; + //signa_wifi_0_bar if (net.signalStrength <= 0.40) - return "android_wifi_1_bar"; + return "\uebe4"; + //network_wifi_1_bar if (net.signalStrength <= 0.60) - return "android_wifi_2_bar"; + return "\uebd6"; + //network_wifi_2_bar if (net.signalStrength <= 0.80) - return "android_wifi_3_bar"; - return "android_wifi_4_bar"; + return "\uebe1"; + //network_wifi_3_bar + if (net.signalStrength >= 0.80) + return "\ue1d8"; + // signal_wifi_4_bar } } return "wifi_off"; From 7e92f580119703eae7463be9ea6631f5c037597c Mon Sep 17 00:00:00 2001 From: lucy Date: Mon, 9 Feb 2026 20:34:31 +0100 Subject: [PATCH 05/32] change ws indicator style --- modules/bar/Workspaces.qml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml index 4b1f4a3..91e7ddd 100644 --- a/modules/bar/Workspaces.qml +++ b/modules/bar/Workspaces.qml @@ -8,6 +8,14 @@ import qs.reusables Rectangle { id: root + Behavior on width { + NumberAnimation { + + duration: 200 + easing.type: Easing.BezierSpline + easing.bezierCurve: [0.34, 0.80, 0.34, 1.00, 1, 1] + } + } color: Colors.surfaceContainer implicitWidth: workspaceRow.implicitWidth + 20 @@ -38,9 +46,17 @@ Rectangle { } required property var modelData - width: isOnMon ? Settings.config.barHeight - Settings.config.barHeight / 2 : 0 + width: modelData.focused ? 40 : 20 height: isOnMon ? Settings.config.barHeight - Settings.config.barHeight / 2 : 0 - color: "transparent" + color: modelData.focused ? Colors.primary : Colors.surfaceContainerHigh + Behavior on width { + NumberAnimation { + + duration: 200 + easing.type: Easing.BezierSpline + easing.bezierCurve: [0.34, 0.80, 0.34, 1.00, 1, 1] + } + } CustomText { anchors.centerIn: workspaceNumber From 4d39ddab162d7996760bf346dc068d813460d812 Mon Sep 17 00:00:00 2001 From: lucy Date: Mon, 9 Feb 2026 20:35:38 +0100 Subject: [PATCH 06/32] fix margins in ws --- modules/bar/Workspaces.qml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml index 91e7ddd..620f7fb 100644 --- a/modules/bar/Workspaces.qml +++ b/modules/bar/Workspaces.qml @@ -8,17 +8,9 @@ import qs.reusables Rectangle { id: root - Behavior on width { - NumberAnimation { - - duration: 200 - easing.type: Easing.BezierSpline - easing.bezierCurve: [0.34, 0.80, 0.34, 1.00, 1, 1] - } - } color: Colors.surfaceContainer - implicitWidth: workspaceRow.implicitWidth + 20 + implicitWidth: workspaceRow.implicitWidth + 10 implicitHeight: Settings.config.barHeight - 10 radius: Settings.config.barHeight / 2 property var screen: screen From 1ea03dcb3a5ab005a1a1d60fe6bc527bf72de162 Mon Sep 17 00:00:00 2001 From: lucy Date: Mon, 9 Feb 2026 20:47:15 +0100 Subject: [PATCH 07/32] fix fallback and no wifi icons --- modules/bar/Network.qml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/bar/Network.qml b/modules/bar/Network.qml index 4b10959..2f70532 100644 --- a/modules/bar/Network.qml +++ b/modules/bar/Network.qml @@ -38,11 +38,12 @@ Rectangle { // signal_wifi_4_bar } } - return "wifi_off"; + return "\ue1d8"; } else if (device.connected) { return "settings_ethernet"; } - return "wifi_off"; + return "\ue1da"; + // signal_wifi_off } function getStatus(device) { From 4038309a4d0413ce09554797eb7a8b1a69c3a95c Mon Sep 17 00:00:00 2001 From: lucy Date: Mon, 9 Feb 2026 22:29:41 +0100 Subject: [PATCH 08/32] change color of active ws text to look better --- modules/bar/Workspaces.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml index 620f7fb..3111803 100644 --- a/modules/bar/Workspaces.qml +++ b/modules/bar/Workspaces.qml @@ -53,7 +53,7 @@ Rectangle { CustomText { anchors.centerIn: workspaceNumber text: parent.modelData.id - color: Colors.onSurfaceColor + color: modelData.focused ? Colors.onPrimaryColor : Colors.onSurfaceColor opacity: workspaceNumber.modelData.focused ? 1 : 0.5 } MouseArea { From 471f9bd5b686f656a5acc752900df6fa8ef0dd51 Mon Sep 17 00:00:00 2001 From: lucy Date: Mon, 9 Feb 2026 22:54:58 +0100 Subject: [PATCH 09/32] change animation logic in ws --- modules/bar/Workspaces.qml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml index 3111803..485c9d9 100644 --- a/modules/bar/Workspaces.qml +++ b/modules/bar/Workspaces.qml @@ -38,22 +38,21 @@ Rectangle { } required property var modelData - width: modelData.focused ? 40 : 20 + width: !modelData.focused ? 20 : 40 height: isOnMon ? Settings.config.barHeight - Settings.config.barHeight / 2 : 0 color: modelData.focused ? Colors.primary : Colors.surfaceContainerHigh Behavior on width { NumberAnimation { - duration: 200 - easing.type: Easing.BezierSpline - easing.bezierCurve: [0.34, 0.80, 0.34, 1.00, 1, 1] + duration: 500 + easing.type: Easing.InOutBack } } CustomText { anchors.centerIn: workspaceNumber text: parent.modelData.id - color: modelData.focused ? Colors.onPrimaryColor : Colors.onSurfaceColor + color: parent.modelData.focused ? Colors.onPrimaryColor : Colors.onSurfaceColor opacity: workspaceNumber.modelData.focused ? 1 : 0.5 } MouseArea { From 339b04c16538724c93b757187ad8cb465c565cd6 Mon Sep 17 00:00:00 2001 From: lucy Date: Tue, 10 Feb 2026 13:17:41 +0100 Subject: [PATCH 10/32] fix clock issue --- modules/bar/Clock.qml | 2 +- modules/bar/Network.qml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/bar/Clock.qml b/modules/bar/Clock.qml index dcf5660..3598e6d 100644 --- a/modules/bar/Clock.qml +++ b/modules/bar/Clock.qml @@ -25,7 +25,7 @@ Rectangle { id: clockText property bool showFull anchors.centerIn: parent - text: showFull ? Qt.formatDateTime(clock.date, "hh:mm / dd.mm.yy") : Qt.formatDateTime(clock.date, "hh:mm") + text: showFull ? Qt.formatDateTime(clock.date, "hh:mm / dd.MM.yy") : Qt.formatDateTime(clock.date, "hh:mm") } } MouseArea { diff --git a/modules/bar/Network.qml b/modules/bar/Network.qml index 2f70532..ba4cc74 100644 --- a/modules/bar/Network.qml +++ b/modules/bar/Network.qml @@ -38,7 +38,7 @@ Rectangle { // signal_wifi_4_bar } } - return "\ue1d8"; + return "\ue1da"; } else if (device.connected) { return "settings_ethernet"; } From f788756a053570eaab743113029d1475a426862f Mon Sep 17 00:00:00 2001 From: lucy Date: Wed, 11 Feb 2026 00:32:27 +0100 Subject: [PATCH 11/32] add icon to active window --- modules/bar/Title.qml | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/modules/bar/Title.qml b/modules/bar/Title.qml index 2b5cf62..64fa9dd 100644 --- a/modules/bar/Title.qml +++ b/modules/bar/Title.qml @@ -1,8 +1,11 @@ import QtQuick import Quickshell.Wayland +import Quickshell.Widgets +import Quickshell import qs import qs.settings import qs.reusables +import QtQuick.Layouts Rectangle { id: container @@ -14,13 +17,34 @@ Rectangle { id: root anchors.centerIn: parent readonly property var activeWindow: ToplevelManager.activeToplevel - implicitWidth: titleText.implicitWidth + 20 + implicitWidth: titleLayout.implicitWidth implicitHeight: titleText.implicitHeight - CustomText { - id: titleText - anchors.horizontalCenter: parent.horizontalCenter - text: root.activeWindow ? root.activeWindow.activated ? root.activeWindow.appId : "Desktop" : "Desktop" - elide: Text.ElideRight + RowLayout { + id: titleLayout + anchors.centerIn: parent + + anchors.fill: parent + spacing: 5 + + ClippingWrapperRectangle { + radius: 30 + Layout.leftMargin: 10 + IconImage { + id: icon + source: root.activeWindow.activated ? Quickshell.iconPath(root.activeWindow.appId, "kitty") : Quickshell.iconPath("kitty") + implicitSize: 16 + } + } + CustomText { + id: titleText + Layout.rightMargin: 10 + text: root.activeWindow ? root.activeWindow.activated ? root.activeWindow.title : "Desktop" : "Desktop" + onTextChanged: { + console.log(root.activeWindow.title); + console.log(icon.source); + } + elide: Text.ElideRight + } } } } From d4ae7be6380143e00b7534704c3e326e51717e4b Mon Sep 17 00:00:00 2001 From: lucy Date: Thu, 12 Feb 2026 00:11:26 +0100 Subject: [PATCH 12/32] add animations to wallpaper switch --- modules/bar/Title.qml | 4 +- modules/overlays/Wallpaper.qml | 85 +++++++++++++++++++++++++--------- reusables/CustomIcon.qml | 2 +- settings/Settings.qml | 1 + 4 files changed, 68 insertions(+), 24 deletions(-) diff --git a/modules/bar/Title.qml b/modules/bar/Title.qml index 64fa9dd..662737d 100644 --- a/modules/bar/Title.qml +++ b/modules/bar/Title.qml @@ -31,8 +31,8 @@ Rectangle { Layout.leftMargin: 10 IconImage { id: icon - source: root.activeWindow.activated ? Quickshell.iconPath(root.activeWindow.appId, "kitty") : Quickshell.iconPath("kitty") - implicitSize: 16 + source: root.activeWindow.activated ? Quickshell.iconPath(root.activeWindow.appId, "kitty") : "" + implicitSize: root.activeWindow.activated ? 16 : 0 } } CustomText { diff --git a/modules/overlays/Wallpaper.qml b/modules/overlays/Wallpaper.qml index 2191133..e05bd83 100644 --- a/modules/overlays/Wallpaper.qml +++ b/modules/overlays/Wallpaper.qml @@ -1,32 +1,75 @@ pragma ComponentBehavior: Bound -import Quickshell import QtQuick +import QtQuick.Controls // <--- Needed for StackView import Quickshell.Wayland import qs.settings -Variants { +WlrLayershell { id: root - model: Quickshell.screens - delegate: WlrLayershell { - id: wpShell - aboveWindows: false - exclusionMode: ExclusionMode.Ignore + layer: WlrLayer.Background + keyboardFocus: WlrKeyboardFocus.None + anchors { + top: true + bottom: true + left: true + right: true + } - required property var modelData - screen: modelData - anchors { - left: true - top: true - bottom: true - right: true - } - layer: WlrLayer.Background + // We need to accept the screen from Variants + required property var modelData - Image { - anchors.fill: parent - fillMode: Image.Stretch - source: Settings.config.currentWall + // 1. The StackView manages the images + StackView { + id: wallStack + width: parent.width + height: parent.height + + // 2. Define what a "Wallpaper" looks like + Component { + id: wallComponent + Image { + fillMode: Image.PreserveAspectCrop + width: wallStack.width + height: wallStack.height + asynchronous: true // ⚡ VERY IMPORTANT: Prevents lag while loading! + } + } + + // 4. THE ANIMATIONS 🎬 + // When a new wall replaces the old one: + + // New One: Fades In (0 -> 1) + replaceEnter: Transition { + NumberAnimation { + property: "x" + from: wallStack.width + to: 0 + duration: 800 // Slower = Smoother + easing.type: Easing.OutQuad + } + } + + // Old One: Fades Out (1 -> 0) + replaceExit: Transition { + NumberAnimation { + property: "x" + from: 0 + to: -wallStack.width + duration: 800 + easing.type: Easing.OutQuad + } + } + } + + // 5. The Trigger 🔫 + // We listen for the singleton to change, then tell the Stack to update + Connections { + target: Settings + + function onCurrentWallChanged() { + wallStack.replace(wallComponent, { + "source": Settings.currentWall + }); } - ScreenCorners {} } } diff --git a/reusables/CustomIcon.qml b/reusables/CustomIcon.qml index 56adb77..536573f 100644 --- a/reusables/CustomIcon.qml +++ b/reusables/CustomIcon.qml @@ -9,7 +9,7 @@ CustomText { renderType: Text.NativeRendering font { hintingPreference: Font.PreferNoHinting - family: "Material Symbols Outlined" + family: "Material Symbols Rounded" pixelSize: iconSize weight: Font.Normal + (Font.DemiBold - Font.Normal) * truncatedFill variableAxes: { diff --git a/settings/Settings.qml b/settings/Settings.qml index 602b1c1..d6dfd5e 100644 --- a/settings/Settings.qml +++ b/settings/Settings.qml @@ -7,6 +7,7 @@ import Quickshell.Io Singleton { id: root property alias config: settingsAdapter + property alias currentWall: settingsAdapter.currentWall onConfigChanged: settingsView.writeAdapter() FileView { id: settingsView From 53ee6f4103393612b15f3e7561968a441d68eacd Mon Sep 17 00:00:00 2001 From: lucy Date: Thu, 12 Feb 2026 00:24:00 +0100 Subject: [PATCH 13/32] fuck transitions --- modules/bar/Workspaces.qml | 2 +- modules/overlays/Wallpaper.qml | 83 ++++++++-------------------------- 2 files changed, 21 insertions(+), 64 deletions(-) diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml index 485c9d9..d8a125e 100644 --- a/modules/bar/Workspaces.qml +++ b/modules/bar/Workspaces.qml @@ -40,7 +40,7 @@ Rectangle { required property var modelData width: !modelData.focused ? 20 : 40 height: isOnMon ? Settings.config.barHeight - Settings.config.barHeight / 2 : 0 - color: modelData.focused ? Colors.primary : Colors.surfaceContainerHigh + color: modelData.focused ? Colors.primary : Colors.surfaceContainer Behavior on width { NumberAnimation { diff --git a/modules/overlays/Wallpaper.qml b/modules/overlays/Wallpaper.qml index e05bd83..b1e94a5 100644 --- a/modules/overlays/Wallpaper.qml +++ b/modules/overlays/Wallpaper.qml @@ -1,75 +1,32 @@ pragma ComponentBehavior: Bound +import Quickshell import QtQuick -import QtQuick.Controls // <--- Needed for StackView import Quickshell.Wayland import qs.settings -WlrLayershell { +Variants { id: root - layer: WlrLayer.Background - keyboardFocus: WlrKeyboardFocus.None - anchors { - top: true - bottom: true - left: true - right: true - } + model: Quickshell.screens + delegate: WlrLayershell { + id: wpShell + aboveWindows: false + exclusionMode: ExclusionMode.Ignore - // We need to accept the screen from Variants - required property var modelData - - // 1. The StackView manages the images - StackView { - id: wallStack - width: parent.width - height: parent.height - - // 2. Define what a "Wallpaper" looks like - Component { - id: wallComponent - Image { - fillMode: Image.PreserveAspectCrop - width: wallStack.width - height: wallStack.height - asynchronous: true // ⚡ VERY IMPORTANT: Prevents lag while loading! - } + required property var modelData + screen: modelData + anchors { + left: true + top: true + bottom: true + right: true } + layer: WlrLayer.Background - // 4. THE ANIMATIONS 🎬 - // When a new wall replaces the old one: - - // New One: Fades In (0 -> 1) - replaceEnter: Transition { - NumberAnimation { - property: "x" - from: wallStack.width - to: 0 - duration: 800 // Slower = Smoother - easing.type: Easing.OutQuad - } - } - - // Old One: Fades Out (1 -> 0) - replaceExit: Transition { - NumberAnimation { - property: "x" - from: 0 - to: -wallStack.width - duration: 800 - easing.type: Easing.OutQuad - } - } - } - - // 5. The Trigger 🔫 - // We listen for the singleton to change, then tell the Stack to update - Connections { - target: Settings - - function onCurrentWallChanged() { - wallStack.replace(wallComponent, { - "source": Settings.currentWall - }); + Image { + anchors.fill: parent + fillMode: Image.PreserveAspectCrop + source: Settings.config.currentWall } + ScreenCorners {} } } From af08c61c4fbd683038c2be4663867a4c14ff0f18 Mon Sep 17 00:00:00 2001 From: lucy Date: Thu, 12 Feb 2026 00:43:30 +0100 Subject: [PATCH 14/32] meow --- modules/bar/Workspaces.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml index d8a125e..62cea8d 100644 --- a/modules/bar/Workspaces.qml +++ b/modules/bar/Workspaces.qml @@ -51,6 +51,8 @@ Rectangle { CustomText { anchors.centerIn: workspaceNumber + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter text: parent.modelData.id color: parent.modelData.focused ? Colors.onPrimaryColor : Colors.onSurfaceColor opacity: workspaceNumber.modelData.focused ? 1 : 0.5 From 760558d214ad2f1385b20d923ad98934c0611051 Mon Sep 17 00:00:00 2001 From: lucy Date: Thu, 12 Feb 2026 14:45:11 +0100 Subject: [PATCH 15/32] change animation in ws --- modules/bar/Workspaces.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml index 62cea8d..b64a61a 100644 --- a/modules/bar/Workspaces.qml +++ b/modules/bar/Workspaces.qml @@ -44,8 +44,8 @@ Rectangle { Behavior on width { NumberAnimation { - duration: 500 - easing.type: Easing.InOutBack + duration: 200 + easing.type: Easing.Linear } } From fcaf744efca74224f5a1c733fbddc2087330b022 Mon Sep 17 00:00:00 2001 From: lucy Date: Thu, 12 Feb 2026 19:00:34 +0100 Subject: [PATCH 16/32] fix mpris to fixed width --- modules/bar/Mpris.qml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/bar/Mpris.qml b/modules/bar/Mpris.qml index 85b54a0..4e17ebb 100644 --- a/modules/bar/Mpris.qml +++ b/modules/bar/Mpris.qml @@ -10,11 +10,13 @@ Rectangle { visible: root.spotify != null radius: implicitHeight / 2 color: clickHandler.containsMouse ? Colors.primaryContainer : Colors.surfaceContainer - implicitWidth: root.implicitWidth + 20 implicitHeight: Settings.config.barHeight - 10 + implicitWidth: 400 Item { id: root + width: Math.min(statusRow.implicitWidth, parent.width - 20) anchors.centerIn: parent + property var spotify: root.getSpotify() function getSpotify() { for (let i = 0; i < Mpris.players.values.length; i++) { @@ -29,14 +31,20 @@ Rectangle { RowLayout { id: statusRow + anchors.fill: parent spacing: 5 anchors.verticalCenter: parent.verticalCenter property var combinedText: root.spotify != null ? root.spotify.trackArtist + " - " + root.spotify.trackTitle : "" property var status: root.spotify != null ? !root.spotify.isPlaying ? "play_arrow" : "pause" : "" CustomText { id: mprisText + Layout.leftMargin: 10 + Layout.fillWidth: true Layout.topMargin: 2 text: root.spotify != null ? parent.combinedText : "" + elide: Text.ElideRight + clip: true + wrapMode: Text.NoWrap } CustomIcon { id: mprisStatus From e74c3ce04bcfca51122478a9e106a477e587516a Mon Sep 17 00:00:00 2001 From: lucy Date: Thu, 12 Feb 2026 19:21:28 +0100 Subject: [PATCH 17/32] fix mpris text --- modules/bar/Mpris.qml | 67 +++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/modules/bar/Mpris.qml b/modules/bar/Mpris.qml index 4e17ebb..acead1d 100644 --- a/modules/bar/Mpris.qml +++ b/modules/bar/Mpris.qml @@ -6,51 +6,42 @@ import qs.settings import qs.reusables Rectangle { - id: container + id: root visible: root.spotify != null radius: implicitHeight / 2 - color: clickHandler.containsMouse ? Colors.primaryContainer : Colors.surfaceContainer implicitHeight: Settings.config.barHeight - 10 - implicitWidth: 400 - Item { - id: root - width: Math.min(statusRow.implicitWidth, parent.width - 20) - anchors.centerIn: parent + color: clickHandler.containsMouse ? Colors.primary : Colors.surfaceContainer + implicitWidth: statusRow.width + 20 - property var spotify: root.getSpotify() - function getSpotify() { - for (let i = 0; i < Mpris.players.values.length; i++) { - if (Mpris.players.values[i].identity.toLowerCase() === "spotify") { - return Mpris.players.values[i]; - } + property var spotify: root.getSpotify() + function getSpotify() { + for (let i = 0; i < Mpris.players.values.length; i++) { + if (Mpris.players.values[i].identity.toLowerCase() === "spotify") { + return Mpris.players.values[i]; } - return null; } - implicitWidth: statusRow.implicitWidth - implicitHeight: statusRow.implicitHeight + return null; + } - RowLayout { - id: statusRow - anchors.fill: parent - spacing: 5 - anchors.verticalCenter: parent.verticalCenter - property var combinedText: root.spotify != null ? root.spotify.trackArtist + " - " + root.spotify.trackTitle : "" - property var status: root.spotify != null ? !root.spotify.isPlaying ? "play_arrow" : "pause" : "" - CustomText { - id: mprisText - Layout.leftMargin: 10 - Layout.fillWidth: true - Layout.topMargin: 2 - text: root.spotify != null ? parent.combinedText : "" - elide: Text.ElideRight - clip: true - wrapMode: Text.NoWrap - } - CustomIcon { - id: mprisStatus - Layout.topMargin: 2 - text: root.spotify != null ? parent.status : "" - } + RowLayout { + id: statusRow + spacing: 5 + anchors.centerIn: parent + property var combinedText: root.spotify != null ? root.spotify.trackArtist + " - " + root.spotify.trackTitle : "" + property var status: root.spotify != null ? !root.spotify.isPlaying ? "play_arrow" : "pause" : "" + CustomText { + id: mprisText + Layout.maximumWidth: 300 + Layout.topMargin: 2 + text: root.spotify != null ? parent.combinedText : "" + elide: Text.ElideRight + color: clickHandler.containsMouse ? Colors.onPrimaryColor : Colors.onSurfaceColor + } + CustomIcon { + id: mprisStatus + color: clickHandler.containsMouse ? Colors.onPrimaryColor : Colors.onSurfaceColor + Layout.topMargin: 2 + text: root.spotify != null ? parent.status : "" } } MouseArea { From 208a58f2b885cfccd07ba8d4344a25a2e18d5160 Mon Sep 17 00:00:00 2001 From: lucy Date: Thu, 12 Feb 2026 19:23:48 +0100 Subject: [PATCH 18/32] fix title text to fixed length --- modules/bar/Title.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/bar/Title.qml b/modules/bar/Title.qml index 662737d..b16b40f 100644 --- a/modules/bar/Title.qml +++ b/modules/bar/Title.qml @@ -38,6 +38,7 @@ Rectangle { CustomText { id: titleText Layout.rightMargin: 10 + Layout.maximumWidth: 300 text: root.activeWindow ? root.activeWindow.activated ? root.activeWindow.title : "Desktop" : "Desktop" onTextChanged: { console.log(root.activeWindow.title); From fe0db51baf89f2a9cc2445f779ffdb9c0716b516 Mon Sep 17 00:00:00 2001 From: lucy Date: Thu, 12 Feb 2026 19:45:10 +0100 Subject: [PATCH 19/32] fix issue with title module --- modules/bar/Title.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/bar/Title.qml b/modules/bar/Title.qml index b16b40f..f861d2b 100644 --- a/modules/bar/Title.qml +++ b/modules/bar/Title.qml @@ -31,8 +31,8 @@ Rectangle { Layout.leftMargin: 10 IconImage { id: icon - source: root.activeWindow.activated ? Quickshell.iconPath(root.activeWindow.appId, "kitty") : "" - implicitSize: root.activeWindow.activated ? 16 : 0 + source: root.activeWindow ? root.activeWindow.activated ? Quickshell.iconPath(root.activeWindow.appId, "") : "" : "" + implicitSize: root.activeWindow ? root.activeWindow.activated ? 16 : 0 : 0 } } CustomText { From 2dea213aa204db46ca38b6458b6e13408bcdfc73 Mon Sep 17 00:00:00 2001 From: lucy Date: Thu, 12 Feb 2026 19:47:07 +0100 Subject: [PATCH 20/32] fix color in mpris.qml --- modules/bar/Mpris.qml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/bar/Mpris.qml b/modules/bar/Mpris.qml index acead1d..f5314e4 100644 --- a/modules/bar/Mpris.qml +++ b/modules/bar/Mpris.qml @@ -10,7 +10,7 @@ Rectangle { visible: root.spotify != null radius: implicitHeight / 2 implicitHeight: Settings.config.barHeight - 10 - color: clickHandler.containsMouse ? Colors.primary : Colors.surfaceContainer + color: clickHandler.containsMouse ? Colors.primaryContainer : Colors.surfaceContainer implicitWidth: statusRow.width + 20 property var spotify: root.getSpotify() @@ -35,11 +35,9 @@ Rectangle { Layout.topMargin: 2 text: root.spotify != null ? parent.combinedText : "" elide: Text.ElideRight - color: clickHandler.containsMouse ? Colors.onPrimaryColor : Colors.onSurfaceColor } CustomIcon { id: mprisStatus - color: clickHandler.containsMouse ? Colors.onPrimaryColor : Colors.onSurfaceColor Layout.topMargin: 2 text: root.spotify != null ? parent.status : "" } From 173df32f9a9ea4cc9151802b922741416f29620d Mon Sep 17 00:00:00 2001 From: lucy Date: Fri, 13 Feb 2026 01:41:29 +0100 Subject: [PATCH 21/32] style overhaul --- modules/bar/Battery.qml | 2 +- modules/bar/Clock.qml | 2 +- modules/bar/Mpris.qml | 2 +- modules/bar/Network.qml | 2 +- modules/bar/SettingsIcon.qml | 2 +- modules/bar/SysTray.qml | 2 +- modules/bar/Title.qml | 2 +- modules/bar/Volume.qml | 2 +- modules/bar/Workspaces.qml | 6 +- modules/widgets/MainWindow.qml | 98 ---------------------- modules/widgets/settingsapp/Appearance.qml | 16 ++-- modules/widgets/settingsapp/MainWindow.qml | 6 +- reusables/CustomText.qml | 2 +- 13 files changed, 22 insertions(+), 122 deletions(-) delete mode 100644 modules/widgets/MainWindow.qml diff --git a/modules/bar/Battery.qml b/modules/bar/Battery.qml index cbfa866..f60488f 100644 --- a/modules/bar/Battery.qml +++ b/modules/bar/Battery.qml @@ -15,7 +15,7 @@ Loader { sourceComponent: Rectangle { id: container radius: implicitHeight / 2 - color: Colors.surfaceContainer + color: Colors.base00 anchors.verticalCenter: parent.verticalCenter implicitWidth: UPower.displayDevice.isLaptopBattery ? root.implicitWidth + 20 : 0 implicitHeight: Settings.config.barHeight - 10 diff --git a/modules/bar/Clock.qml b/modules/bar/Clock.qml index 3598e6d..ab5ad03 100644 --- a/modules/bar/Clock.qml +++ b/modules/bar/Clock.qml @@ -8,7 +8,7 @@ import qs.reusables Rectangle { id: container radius: implicitHeight / 2 - color: formatSwitch.containsMouse ? Colors.primaryContainer : Colors.surfaceContainer + color: formatSwitch.containsMouse ? Colors.base01 : Colors.base00 anchors.verticalCenter: parent.verticalCenter implicitHeight: Settings.config.barHeight - 10 implicitWidth: root.implicitWidth + 20 diff --git a/modules/bar/Mpris.qml b/modules/bar/Mpris.qml index f5314e4..350b2dd 100644 --- a/modules/bar/Mpris.qml +++ b/modules/bar/Mpris.qml @@ -10,7 +10,7 @@ Rectangle { visible: root.spotify != null radius: implicitHeight / 2 implicitHeight: Settings.config.barHeight - 10 - color: clickHandler.containsMouse ? Colors.primaryContainer : Colors.surfaceContainer + color: clickHandler.containsMouse ? Colors.base01 : Colors.base00 implicitWidth: statusRow.width + 20 property var spotify: root.getSpotify() diff --git a/modules/bar/Network.qml b/modules/bar/Network.qml index ba4cc74..18bd6f7 100644 --- a/modules/bar/Network.qml +++ b/modules/bar/Network.qml @@ -12,7 +12,7 @@ Rectangle { // You might want to make this transparent if you only want the "pills" to show implicitHeight: Settings.config.barHeight - 10 implicitWidth: mainLayout.implicitWidth + 20 - color: Colors.surfaceContainer + color: Colors.base00 radius: implicitHeight / 2 // --- Logic Functions --- diff --git a/modules/bar/SettingsIcon.qml b/modules/bar/SettingsIcon.qml index 03a849e..0a3c02c 100644 --- a/modules/bar/SettingsIcon.qml +++ b/modules/bar/SettingsIcon.qml @@ -7,7 +7,7 @@ import qs Rectangle { id: root radius: implicitHeight / 2 - color: pavuArea.containsMouse ? Colors.primaryContainer : Colors.surfaceContainer + color: pavuArea.containsMouse ? Colors.base01 : Colors.base00 implicitWidth: Settings.config.barHeight - 8 implicitHeight: Settings.config.barHeight - 10 CustomIcon { diff --git a/modules/bar/SysTray.qml b/modules/bar/SysTray.qml index 812cb2b..1310988 100644 --- a/modules/bar/SysTray.qml +++ b/modules/bar/SysTray.qml @@ -8,7 +8,7 @@ Rectangle { implicitWidth: trayRow.implicitWidth + 10 implicitHeight: Settings.config.barHeight - 10 radius: implicitHeight / 2 - color: Colors.surfaceContainer + color: Colors.base00 readonly property var count: trayRepeater.count visible: trayRepeater.count > 0 diff --git a/modules/bar/Title.qml b/modules/bar/Title.qml index f861d2b..22ae218 100644 --- a/modules/bar/Title.qml +++ b/modules/bar/Title.qml @@ -10,7 +10,7 @@ import QtQuick.Layouts Rectangle { id: container radius: implicitHeight / 2 - color: Colors.surfaceContainer + color: Colors.base00 implicitWidth: root.implicitWidth implicitHeight: Settings.config.barHeight - 10 Item { diff --git a/modules/bar/Volume.qml b/modules/bar/Volume.qml index 3237cee..e04a431 100644 --- a/modules/bar/Volume.qml +++ b/modules/bar/Volume.qml @@ -9,7 +9,7 @@ import qs Rectangle { id: root radius: implicitHeight / 2 - color: pavuArea.containsMouse ? Colors.primaryContainer : Colors.surfaceContainer + color: pavuArea.containsMouse ? Colors.base01 : Colors.base00 implicitWidth: textRow.implicitWidth + 20 implicitHeight: Settings.config.barHeight - 10 property var sink: Pipewire.defaultAudioSink diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml index b64a61a..2a94de8 100644 --- a/modules/bar/Workspaces.qml +++ b/modules/bar/Workspaces.qml @@ -8,7 +8,7 @@ import qs.reusables Rectangle { id: root - color: Colors.surfaceContainer + color: Colors.base00 implicitWidth: workspaceRow.implicitWidth + 10 implicitHeight: Settings.config.barHeight - 10 @@ -40,7 +40,7 @@ Rectangle { required property var modelData width: !modelData.focused ? 20 : 40 height: isOnMon ? Settings.config.barHeight - Settings.config.barHeight / 2 : 0 - color: modelData.focused ? Colors.primary : Colors.surfaceContainer + color: modelData.focused ? Colors.base01 : Colors.base00 Behavior on width { NumberAnimation { @@ -54,8 +54,6 @@ Rectangle { verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter text: parent.modelData.id - color: parent.modelData.focused ? Colors.onPrimaryColor : Colors.onSurfaceColor - opacity: workspaceNumber.modelData.focused ? 1 : 0.5 } MouseArea { anchors.fill: parent diff --git a/modules/widgets/MainWindow.qml b/modules/widgets/MainWindow.qml deleted file mode 100644 index 841fb93..0000000 --- a/modules/widgets/MainWindow.qml +++ /dev/null @@ -1,98 +0,0 @@ -pragma ComponentBehavior: Bound -import QtQuick -import QtQuick.Layouts -import Quickshell -import QtQuick.Dialogs -import Quickshell.Widgets -import qs -import qs.settings -import qs.reusables - -FloatingWindow { - id: root - visible: Settings.config.settingsShown - onClosed: { - Settings.config.settingsShown = false; - } - color: Colors.surface - title: "qs-settings" - implicitWidth: 800 - implicitHeight: 600 - ListModel { - id: pageModel - ListElement { - text: "welcomePage" - source: "WelcomePage.qml" - } - ListElement { - text: "Appearance" - source: "Appearance.qml" - } - ListElement { - text: "Matugen" - source: "Matugen.qml" - } - ListElement { - text: "test" - source: "WelcomePage.qml" - } - } - RowLayout { - id: windowLayout - clip: true - anchors.fill: parent - spacing: 10 - - ClippingWrapperRectangle { - id: pageWrapper - Layout.margins: 20 - Layout.fillHeight: true - Layout.preferredWidth: 200 - Layout.rightMargin: 0 - margin: 20 - color: Colors.surfaceContainerLow - radius: 12 - ListView { - id: pageView - clip: true - model: pageModel - delegate: pageDelegate - Component { - id: pageDelegate - Rectangle { - radius: 24 - color: ListView.isCurrentItem ? Colors.surfaceContainerHigh : "transparent" - implicitHeight: 30 - implicitWidth: pageWrapper.width - 50 - required property var modelData - required property int index - CustomText { - id: delegateText - leftPadding: 10 - anchors.verticalCenter: parent.verticalCenter - text: parent.modelData.text - } - MouseArea { - id: clickHandler - anchors.fill: parent - cursorShape: Qt.PointingHandCursor - acceptedButtons: Qt.LeftButton - onClicked: { - contentLoader.source = parent.modelData.source; - pageView.currentIndex = parent.index; - } - } - } - } - } - } - Loader { - id: contentLoader - Layout.leftMargin: 0 - Layout.fillHeight: true - Layout.fillWidth: true - Layout.margins: 20 - source: pageModel.get(pageView.currentIndex).source - } - } -} diff --git a/modules/widgets/settingsapp/Appearance.qml b/modules/widgets/settingsapp/Appearance.qml index ae7e5c8..67dfbb8 100644 --- a/modules/widgets/settingsapp/Appearance.qml +++ b/modules/widgets/settingsapp/Appearance.qml @@ -26,7 +26,7 @@ ClippingWrapperRectangle { } anchors.centerIn: parent clip: true - color: Colors.surfaceContainerLow + color: Colors.base01 radius: 12 margin: 20 @@ -45,7 +45,7 @@ ClippingWrapperRectangle { bottomRightRadius: 4 bottomLeftRadius: 4 - color: Colors.surfaceContainerHigh + color: Colors.base01 implicitHeight: 30 child: RowLayout { id: fontLayout @@ -73,7 +73,7 @@ ClippingWrapperRectangle { bottomRightRadius: 4 topRightRadius: 4 topLeftRadius: 4 - color: Colors.surfaceContainerHigh + color: Colors.base01 child: RowLayout { id: floatingToggleLayout spacing: 40 @@ -102,7 +102,7 @@ ClippingWrapperRectangle { bottomRightRadius: 4 topRightRadius: 4 topLeftRadius: 4 - color: Colors.surfaceContainerHigh + color: Colors.base01 child: RowLayout { id: screenCornerLayout spacing: 40 @@ -131,7 +131,7 @@ ClippingWrapperRectangle { bottomRightRadius: 4 topRightRadius: 4 topLeftRadius: 4 - color: Colors.surfaceContainerHigh + color: Colors.base01 child: RowLayout { id: screenCornerRadiusLayout spacing: 5 @@ -174,7 +174,7 @@ ClippingWrapperRectangle { bottomRightRadius: 4 topRightRadius: 4 topLeftRadius: 4 - color: Colors.surfaceContainerHigh + color: Colors.base01 child: RowLayout { id: barControlsLayout spacing: 5 @@ -217,7 +217,7 @@ ClippingWrapperRectangle { bottomRightRadius: 4 topRightRadius: 4 topLeftRadius: 4 - color: Colors.surfaceContainerHigh + color: Colors.base01 child: RowLayout { id: barMarginLayout spacing: 5 @@ -257,7 +257,7 @@ ClippingWrapperRectangle { bottomRightRadius: 12 topRightRadius: 4 topLeftRadius: 4 - color: Colors.surfaceContainerHigh + color: Colors.base01 Layout.fillWidth: true RowLayout { id: translucencyLayout diff --git a/modules/widgets/settingsapp/MainWindow.qml b/modules/widgets/settingsapp/MainWindow.qml index f17a7e1..5eb63e0 100644 --- a/modules/widgets/settingsapp/MainWindow.qml +++ b/modules/widgets/settingsapp/MainWindow.qml @@ -14,7 +14,7 @@ FloatingWindow { onClosed: { Settings.config.settingsShown = false; } - color: Colors.surface + color: Colors.base00 title: "qs-settings" implicitWidth: 800 implicitHeight: 600 @@ -50,7 +50,7 @@ FloatingWindow { Layout.preferredWidth: 200 Layout.rightMargin: 0 margin: 20 - color: Colors.surfaceContainerLow + color: Colors.base00 radius: 12 ListView { id: pageView @@ -61,7 +61,7 @@ FloatingWindow { id: pageDelegate Rectangle { radius: 24 - color: ListView.isCurrentItem ? Colors.surfaceContainerHigh : "transparent" + color: ListView.isCurrentItem ? Colors.base01 : "transparent" implicitHeight: 30 implicitWidth: pageWrapper.width - 50 required property var modelData diff --git a/reusables/CustomText.qml b/reusables/CustomText.qml index 643af2f..2ec7ea7 100644 --- a/reusables/CustomText.qml +++ b/reusables/CustomText.qml @@ -3,7 +3,7 @@ import qs import qs.settings Text { - color: Colors.onSurfaceColor + color: Colors.base07 font.family: Settings.config.font font.pixelSize: Settings.config.fontSize font.weight: Settings.config.fontWeight From 775fbfbcb5e18e5cb15a406142944e16b3c04fb5 Mon Sep 17 00:00:00 2001 From: lucy Date: Fri, 13 Feb 2026 14:13:32 +0100 Subject: [PATCH 22/32] push --- modules/widgets/wallswitcher/WallSwitcher.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/widgets/wallswitcher/WallSwitcher.qml b/modules/widgets/wallswitcher/WallSwitcher.qml index 351be04..18f7448 100644 --- a/modules/widgets/wallswitcher/WallSwitcher.qml +++ b/modules/widgets/wallswitcher/WallSwitcher.qml @@ -23,7 +23,7 @@ FloatingWindow { } Process { id: wallustRunner - property string cmd: "matugen image " + Settings.config.currentWall + property string cmd: "wallust run " + Settings.config.currentWall command: ["sh", "-c", cmd] } GlobalShortcut { From fb03799f13602f8a63bfa1a0439325f980470c7f Mon Sep 17 00:00:00 2001 From: lucy Date: Fri, 13 Feb 2026 22:58:33 +0100 Subject: [PATCH 23/32] style change --- modules/bar/Battery.qml | 2 +- modules/bar/Clock.qml | 2 +- modules/bar/Mpris.qml | 2 +- modules/bar/Network.qml | 2 +- modules/bar/SettingsIcon.qml | 2 +- modules/bar/SysTray.qml | 2 +- modules/bar/Title.qml | 2 +- modules/bar/Volume.qml | 2 +- modules/bar/Workspaces.qml | 4 ++-- modules/widgets/settingsapp/Appearance.qml | 16 ++++++++-------- modules/widgets/settingsapp/MainWindow.qml | 6 +++--- modules/widgets/wallswitcher/WallSwitcher.qml | 2 +- reusables/CustomButton.qml | 4 +--- reusables/CustomSlider.qml | 2 -- reusables/CustomSwitch.qml | 1 - reusables/CustomText.qml | 2 +- settings/Settings.qml | 1 - 17 files changed, 24 insertions(+), 30 deletions(-) diff --git a/modules/bar/Battery.qml b/modules/bar/Battery.qml index f60488f..cbfa866 100644 --- a/modules/bar/Battery.qml +++ b/modules/bar/Battery.qml @@ -15,7 +15,7 @@ Loader { sourceComponent: Rectangle { id: container radius: implicitHeight / 2 - color: Colors.base00 + color: Colors.surfaceContainer anchors.verticalCenter: parent.verticalCenter implicitWidth: UPower.displayDevice.isLaptopBattery ? root.implicitWidth + 20 : 0 implicitHeight: Settings.config.barHeight - 10 diff --git a/modules/bar/Clock.qml b/modules/bar/Clock.qml index ab5ad03..3598e6d 100644 --- a/modules/bar/Clock.qml +++ b/modules/bar/Clock.qml @@ -8,7 +8,7 @@ import qs.reusables Rectangle { id: container radius: implicitHeight / 2 - color: formatSwitch.containsMouse ? Colors.base01 : Colors.base00 + color: formatSwitch.containsMouse ? Colors.primaryContainer : Colors.surfaceContainer anchors.verticalCenter: parent.verticalCenter implicitHeight: Settings.config.barHeight - 10 implicitWidth: root.implicitWidth + 20 diff --git a/modules/bar/Mpris.qml b/modules/bar/Mpris.qml index 350b2dd..f5314e4 100644 --- a/modules/bar/Mpris.qml +++ b/modules/bar/Mpris.qml @@ -10,7 +10,7 @@ Rectangle { visible: root.spotify != null radius: implicitHeight / 2 implicitHeight: Settings.config.barHeight - 10 - color: clickHandler.containsMouse ? Colors.base01 : Colors.base00 + color: clickHandler.containsMouse ? Colors.primaryContainer : Colors.surfaceContainer implicitWidth: statusRow.width + 20 property var spotify: root.getSpotify() diff --git a/modules/bar/Network.qml b/modules/bar/Network.qml index 18bd6f7..ba4cc74 100644 --- a/modules/bar/Network.qml +++ b/modules/bar/Network.qml @@ -12,7 +12,7 @@ Rectangle { // You might want to make this transparent if you only want the "pills" to show implicitHeight: Settings.config.barHeight - 10 implicitWidth: mainLayout.implicitWidth + 20 - color: Colors.base00 + color: Colors.surfaceContainer radius: implicitHeight / 2 // --- Logic Functions --- diff --git a/modules/bar/SettingsIcon.qml b/modules/bar/SettingsIcon.qml index 0a3c02c..03a849e 100644 --- a/modules/bar/SettingsIcon.qml +++ b/modules/bar/SettingsIcon.qml @@ -7,7 +7,7 @@ import qs Rectangle { id: root radius: implicitHeight / 2 - color: pavuArea.containsMouse ? Colors.base01 : Colors.base00 + color: pavuArea.containsMouse ? Colors.primaryContainer : Colors.surfaceContainer implicitWidth: Settings.config.barHeight - 8 implicitHeight: Settings.config.barHeight - 10 CustomIcon { diff --git a/modules/bar/SysTray.qml b/modules/bar/SysTray.qml index 1310988..812cb2b 100644 --- a/modules/bar/SysTray.qml +++ b/modules/bar/SysTray.qml @@ -8,7 +8,7 @@ Rectangle { implicitWidth: trayRow.implicitWidth + 10 implicitHeight: Settings.config.barHeight - 10 radius: implicitHeight / 2 - color: Colors.base00 + color: Colors.surfaceContainer readonly property var count: trayRepeater.count visible: trayRepeater.count > 0 diff --git a/modules/bar/Title.qml b/modules/bar/Title.qml index 22ae218..f861d2b 100644 --- a/modules/bar/Title.qml +++ b/modules/bar/Title.qml @@ -10,7 +10,7 @@ import QtQuick.Layouts Rectangle { id: container radius: implicitHeight / 2 - color: Colors.base00 + color: Colors.surfaceContainer implicitWidth: root.implicitWidth implicitHeight: Settings.config.barHeight - 10 Item { diff --git a/modules/bar/Volume.qml b/modules/bar/Volume.qml index e04a431..3237cee 100644 --- a/modules/bar/Volume.qml +++ b/modules/bar/Volume.qml @@ -9,7 +9,7 @@ import qs Rectangle { id: root radius: implicitHeight / 2 - color: pavuArea.containsMouse ? Colors.base01 : Colors.base00 + color: pavuArea.containsMouse ? Colors.primaryContainer : Colors.surfaceContainer implicitWidth: textRow.implicitWidth + 20 implicitHeight: Settings.config.barHeight - 10 property var sink: Pipewire.defaultAudioSink diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml index 2a94de8..36210dc 100644 --- a/modules/bar/Workspaces.qml +++ b/modules/bar/Workspaces.qml @@ -8,7 +8,7 @@ import qs.reusables Rectangle { id: root - color: Colors.base00 + color: Colors.surfaceContainer implicitWidth: workspaceRow.implicitWidth + 10 implicitHeight: Settings.config.barHeight - 10 @@ -40,7 +40,7 @@ Rectangle { required property var modelData width: !modelData.focused ? 20 : 40 height: isOnMon ? Settings.config.barHeight - Settings.config.barHeight / 2 : 0 - color: modelData.focused ? Colors.base01 : Colors.base00 + color: modelData.focused ? Colors.primaryContainer : Colors.surfaceContainer Behavior on width { NumberAnimation { diff --git a/modules/widgets/settingsapp/Appearance.qml b/modules/widgets/settingsapp/Appearance.qml index 67dfbb8..f85b9a1 100644 --- a/modules/widgets/settingsapp/Appearance.qml +++ b/modules/widgets/settingsapp/Appearance.qml @@ -26,7 +26,7 @@ ClippingWrapperRectangle { } anchors.centerIn: parent clip: true - color: Colors.base01 + color: Colors.surfaceContainerHigh radius: 12 margin: 20 @@ -45,7 +45,7 @@ ClippingWrapperRectangle { bottomRightRadius: 4 bottomLeftRadius: 4 - color: Colors.base01 + color: Colors.primaryContainer implicitHeight: 30 child: RowLayout { id: fontLayout @@ -73,7 +73,7 @@ ClippingWrapperRectangle { bottomRightRadius: 4 topRightRadius: 4 topLeftRadius: 4 - color: Colors.base01 + color: Colors.primaryContainer child: RowLayout { id: floatingToggleLayout spacing: 40 @@ -102,7 +102,7 @@ ClippingWrapperRectangle { bottomRightRadius: 4 topRightRadius: 4 topLeftRadius: 4 - color: Colors.base01 + color: Colors.primaryContainer child: RowLayout { id: screenCornerLayout spacing: 40 @@ -131,7 +131,7 @@ ClippingWrapperRectangle { bottomRightRadius: 4 topRightRadius: 4 topLeftRadius: 4 - color: Colors.base01 + color: Colors.primaryContainer child: RowLayout { id: screenCornerRadiusLayout spacing: 5 @@ -174,7 +174,7 @@ ClippingWrapperRectangle { bottomRightRadius: 4 topRightRadius: 4 topLeftRadius: 4 - color: Colors.base01 + color: Colors.primaryContainer child: RowLayout { id: barControlsLayout spacing: 5 @@ -217,7 +217,7 @@ ClippingWrapperRectangle { bottomRightRadius: 4 topRightRadius: 4 topLeftRadius: 4 - color: Colors.base01 + color: Colors.primaryContainer child: RowLayout { id: barMarginLayout spacing: 5 @@ -257,7 +257,7 @@ ClippingWrapperRectangle { bottomRightRadius: 12 topRightRadius: 4 topLeftRadius: 4 - color: Colors.base01 + color: Colors.primaryContainer Layout.fillWidth: true RowLayout { id: translucencyLayout diff --git a/modules/widgets/settingsapp/MainWindow.qml b/modules/widgets/settingsapp/MainWindow.qml index 5eb63e0..5c77ea6 100644 --- a/modules/widgets/settingsapp/MainWindow.qml +++ b/modules/widgets/settingsapp/MainWindow.qml @@ -14,7 +14,7 @@ FloatingWindow { onClosed: { Settings.config.settingsShown = false; } - color: Colors.base00 + color: Colors.surfaceContainer title: "qs-settings" implicitWidth: 800 implicitHeight: 600 @@ -50,7 +50,7 @@ FloatingWindow { Layout.preferredWidth: 200 Layout.rightMargin: 0 margin: 20 - color: Colors.base00 + color: Colors.surfaceContainer radius: 12 ListView { id: pageView @@ -61,7 +61,7 @@ FloatingWindow { id: pageDelegate Rectangle { radius: 24 - color: ListView.isCurrentItem ? Colors.base01 : "transparent" + color: ListView.isCurrentItem ? Colors.primaryContainer : "transparent" implicitHeight: 30 implicitWidth: pageWrapper.width - 50 required property var modelData diff --git a/modules/widgets/wallswitcher/WallSwitcher.qml b/modules/widgets/wallswitcher/WallSwitcher.qml index 351be04..215870f 100644 --- a/modules/widgets/wallswitcher/WallSwitcher.qml +++ b/modules/widgets/wallswitcher/WallSwitcher.qml @@ -23,7 +23,7 @@ FloatingWindow { } Process { id: wallustRunner - property string cmd: "matugen image " + Settings.config.currentWall + property string cmd: "matugen image " + Settings.config.currentWall + " --source-color-index 0" command: ["sh", "-c", cmd] } GlobalShortcut { diff --git a/reusables/CustomButton.qml b/reusables/CustomButton.qml index ddea156..7d43858 100644 --- a/reusables/CustomButton.qml +++ b/reusables/CustomButton.qml @@ -15,9 +15,7 @@ Button { } background: Rectangle { id: contentBackground - border.color: control.down ? Colors.primaryFixed : Colors.primary - border.width: 1 radius: parent.implicitHeight / 2 - color: Colors.surfaceContainerLow + color: Colors.surfaceContainerHigh } } diff --git a/reusables/CustomSlider.qml b/reusables/CustomSlider.qml index ac4ae7c..b051b2a 100644 --- a/reusables/CustomSlider.qml +++ b/reusables/CustomSlider.qml @@ -20,7 +20,6 @@ Slider { height: parent.height color: Colors.primary radius: 2 - border.color: Colors.outline } } @@ -31,6 +30,5 @@ Slider { implicitHeight: control.implicitHeight - 2 radius: 13 color: control.pressed ? Colors.primary : Colors.surfaceContainerLowest - border.color: control.pressed ? Colors.surfaceContainerLowest : Colors.primary } } diff --git a/reusables/CustomSwitch.qml b/reusables/CustomSwitch.qml index decad5e..466f1ad 100644 --- a/reusables/CustomSwitch.qml +++ b/reusables/CustomSwitch.qml @@ -12,7 +12,6 @@ Switch { implicitHeight: parent.implicitHeight radius: 26 color: Colors.surfaceContainerLow - border.color: control.checked ? Colors.primary : Colors.onSurfaceColor Rectangle { implicitHeight: parent.implicitHeight - 6 diff --git a/reusables/CustomText.qml b/reusables/CustomText.qml index 2ec7ea7..643af2f 100644 --- a/reusables/CustomText.qml +++ b/reusables/CustomText.qml @@ -3,7 +3,7 @@ import qs import qs.settings Text { - color: Colors.base07 + color: Colors.onSurfaceColor font.family: Settings.config.font font.pixelSize: Settings.config.fontSize font.weight: Settings.config.fontWeight diff --git a/settings/Settings.qml b/settings/Settings.qml index d6dfd5e..9b362b0 100644 --- a/settings/Settings.qml +++ b/settings/Settings.qml @@ -33,7 +33,6 @@ Singleton { property double translucency: 1 property bool blackScreenCorners: true property bool settingsShown: true - property string schemeGenerator: "matugen" } } } From 53299cf03f869700092e2eff876ea72dec8e715a Mon Sep 17 00:00:00 2001 From: lucy Date: Sat, 14 Feb 2026 00:49:08 +0100 Subject: [PATCH 24/32] change sytle in ws indicator --- modules/bar/Workspaces.qml | 4 ++-- reusables/CustomIcon.qml | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml index 36210dc..47a0542 100644 --- a/modules/bar/Workspaces.qml +++ b/modules/bar/Workspaces.qml @@ -8,7 +8,7 @@ import qs.reusables Rectangle { id: root - color: Colors.surfaceContainer + color: "transparent" implicitWidth: workspaceRow.implicitWidth + 10 implicitHeight: Settings.config.barHeight - 10 @@ -40,7 +40,7 @@ Rectangle { required property var modelData width: !modelData.focused ? 20 : 40 height: isOnMon ? Settings.config.barHeight - Settings.config.barHeight / 2 : 0 - color: modelData.focused ? Colors.primaryContainer : Colors.surfaceContainer + color: modelData.focused ? Colors.primaryContainer : "transparent" Behavior on width { NumberAnimation { diff --git a/reusables/CustomIcon.qml b/reusables/CustomIcon.qml index 536573f..8809f2f 100644 --- a/reusables/CustomIcon.qml +++ b/reusables/CustomIcon.qml @@ -1,7 +1,8 @@ import QtQuick import qs -CustomText { +Text { + color: Colors.onSurfaceColor id: root property real iconSize: 16 property real fill: 1 From f52d54175a9499f405e1cef4b7aec06ef6363d81 Mon Sep 17 00:00:00 2001 From: lucy Date: Sat, 14 Feb 2026 01:33:18 +0100 Subject: [PATCH 25/32] ws style change --- modules/bar/Bar.qml | 2 +- modules/bar/Workspaces.qml | 6 +++--- reusables/CustomIcon.qml | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/modules/bar/Bar.qml b/modules/bar/Bar.qml index 11fbda5..d34c224 100644 --- a/modules/bar/Bar.qml +++ b/modules/bar/Bar.qml @@ -35,7 +35,7 @@ Variants { RowLayout { id: leftStuff - anchors.margins: Settings.config.barHeight / 4 + anchors.margins: Settings.config.floating ? 0 : Settings.config.barHeight / 4 spacing: 10 anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml index 47a0542..3754146 100644 --- a/modules/bar/Workspaces.qml +++ b/modules/bar/Workspaces.qml @@ -17,7 +17,7 @@ Rectangle { Row { id: workspaceRow anchors.centerIn: parent - spacing: 5 // Slightly increase spacing between workspace buttons + spacing: 0 // Slightly increase spacing between workspace buttons Repeater { id: wsRepeater @@ -38,8 +38,8 @@ Rectangle { } required property var modelData - width: !modelData.focused ? 20 : 40 - height: isOnMon ? Settings.config.barHeight - Settings.config.barHeight / 2 : 0 + width: Settings.config.barHeight - 5 + height: Settings.config.barHeight - 10 color: modelData.focused ? Colors.primaryContainer : "transparent" Behavior on width { NumberAnimation { diff --git a/reusables/CustomIcon.qml b/reusables/CustomIcon.qml index 8809f2f..ba9760b 100644 --- a/reusables/CustomIcon.qml +++ b/reusables/CustomIcon.qml @@ -1,9 +1,10 @@ import QtQuick import qs +import qs.settings Text { - color: Colors.onSurfaceColor id: root + color: Colors.onSurfaceColor property real iconSize: 16 property real fill: 1 property real truncatedFill: fill.toFixed(1) // Reduce memory consumption spikes from constant font remapping @@ -11,7 +12,7 @@ Text { font { hintingPreference: Font.PreferNoHinting family: "Material Symbols Rounded" - pixelSize: iconSize + pixelSize: Settings.config.fontSize weight: Font.Normal + (Font.DemiBold - Font.Normal) * truncatedFill variableAxes: { "FILL": truncatedFill, From dbfedc2cb8745195e1f9d6d76443d453761dcab5 Mon Sep 17 00:00:00 2001 From: lucy Date: Sat, 14 Feb 2026 12:33:31 +0100 Subject: [PATCH 26/32] switch to just icons --- modules/bar/Bar.qml | 5 +- modules/bar/Battery.qml | 88 ------------------ modules/bar/Network.qml | 95 ------------------- modules/bar/StatusIcons.qml | 181 ++++++++++++++++++++++++++++++++++++ modules/bar/Volume.qml | 69 -------------- modules/bar/Workspaces.qml | 2 +- reusables/CustomIcon.qml | 2 +- 7 files changed, 184 insertions(+), 258 deletions(-) delete mode 100644 modules/bar/Battery.qml delete mode 100644 modules/bar/Network.qml create mode 100644 modules/bar/StatusIcons.qml delete mode 100644 modules/bar/Volume.qml diff --git a/modules/bar/Bar.qml b/modules/bar/Bar.qml index d34c224..1a52b9a 100644 --- a/modules/bar/Bar.qml +++ b/modules/bar/Bar.qml @@ -59,11 +59,8 @@ Variants { clip: true anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - Network {} - Volume {} - Battery {} SysTray {} - SettingsIcon {} + StatusIcons {} } } } diff --git a/modules/bar/Battery.qml b/modules/bar/Battery.qml deleted file mode 100644 index cbfa866..0000000 --- a/modules/bar/Battery.qml +++ /dev/null @@ -1,88 +0,0 @@ -import Quickshell.Services.UPower -import QtQuick.Layouts -import QtQuick -import Quickshell.Widgets -import Qt5Compat.GraphicalEffects -import Quickshell -import qs -import qs.reusables -import qs.settings - -Loader { - id: batLoader - active: UPower.displayDevice.isLaptopBattery - - sourceComponent: Rectangle { - id: container - radius: implicitHeight / 2 - color: Colors.surfaceContainer - anchors.verticalCenter: parent.verticalCenter - implicitWidth: UPower.displayDevice.isLaptopBattery ? root.implicitWidth + 20 : 0 - implicitHeight: Settings.config.barHeight - 10 - Item { - id: root - anchors.centerIn: parent - - property bool frame1: UPower.displayDevice.percentage <= 0.16 - property bool frame2: UPower.displayDevice.percentage < 0.32 - property bool frame3: UPower.displayDevice.percentage < 0.48 - property bool frame4: UPower.displayDevice.percentage < 0.74 - property bool frame5: UPower.displayDevice.percentage < 0.90 - property bool frame6: UPower.displayDevice.percentage <= 1 - - function getBatteryIcon() { - if (UPower.displayDevice.state == UPowerDeviceState.Charging) { - return "battery_android_frame_bolt"; - } - if (frame1) { - return "battery_android_frame_1"; - } - if (frame2) { - return "battery_android_frame_2"; - } - if (frame3) { - return "battery_android_frame_3"; - } - if (frame4) { - return "battery_android_frame_4"; - } - if (frame5) { - return "battery_android_frame_5"; - } - if (frame6) { - return "battery_android_frame_full"; - } - } - function getProfileIcon() { - if (PowerProfiles.profile.toString() == "2") { - return "power-profile-performance-symbolic"; - } - if (PowerProfiles.profile.toString() == "1") { - return "power-profile-balanced-symbolic"; - } - if (PowerProfiles.profile.toString() == "0") { - return "power-profile-power-saver-symbolic"; - } - } - - implicitWidth: batRow.width - implicitHeight: Settings.config.barHeight - - RowLayout { - id: batRow - anchors.centerIn: parent - height: parent.height - spacing: 5 - CustomText { - id: batText - - text: Math.round(UPower.displayDevice.percentage * 100) + "%" - } - CustomIcon { - id: batIcon - text: root.getBatteryIcon() - } - } - } - } -} diff --git a/modules/bar/Network.qml b/modules/bar/Network.qml deleted file mode 100644 index ba4cc74..0000000 --- a/modules/bar/Network.qml +++ /dev/null @@ -1,95 +0,0 @@ -pragma ComponentBehavior: Bound -import Quickshell.Networking -import QtQuick -import QtQuick.Layouts -import qs.reusables -import qs.settings -import qs - -Rectangle { - id: root - // This is the background of the entire bar/module - // You might want to make this transparent if you only want the "pills" to show - implicitHeight: Settings.config.barHeight - 10 - implicitWidth: mainLayout.implicitWidth + 20 - color: Colors.surfaceContainer - radius: implicitHeight / 2 - - // --- Logic Functions --- - function getIcon(device) { - if (device.type === DeviceType.Wifi) { - for (var i = 0; i < device.networks.values.length; i++) { - var net = device.networks.values[i]; - if (net.connected) { - if (net.signalStrength <= 0.20) - return "\uf0b0"; - //signa_wifi_0_bar - if (net.signalStrength <= 0.40) - return "\uebe4"; - //network_wifi_1_bar - if (net.signalStrength <= 0.60) - return "\uebd6"; - //network_wifi_2_bar - if (net.signalStrength <= 0.80) - return "\uebe1"; - //network_wifi_3_bar - if (net.signalStrength >= 0.80) - return "\ue1d8"; - // signal_wifi_4_bar - } - } - return "\ue1da"; - } else if (device.connected) { - return "settings_ethernet"; - } - return "\ue1da"; - // signal_wifi_off - } - - function getStatus(device) { - if (device.type === DeviceType.Wifi) { - for (var i = 0; i < device.networks.values.length; i++) { - var net = device.networks.values[i]; - if (net.connected) { - return net.name; - } - } - return "Disconnected"; - } - return device.connected ? "Connected" : "Disconnected"; - } - - // --- Main Layout --- - RowLayout { - id: mainLayout - anchors.centerIn: parent - spacing: 10 // Space between multiple device pills (if you have ethernet + wifi) - - Repeater { - id: netRepeater - model: Networking.devices - - delegate: RowLayout { - id: innerContent - required property var modelData - // THIS fixes the centering issue: - spacing: 8 - - CustomIcon { - id: netIcon - Layout.alignment: Qt.AlignVCenter - text: root.getIcon(innerContent.modelData) - } - - CustomText { - id: netText - Layout.topMargin: 1 - Layout.alignment: Qt.AlignVCenter - text: root.getStatus(innerContent.modelData) - // Ensures the text font aligns vertically within its own line-height - verticalAlignment: Text.AlignVCenter - } - } - } - } -} diff --git a/modules/bar/StatusIcons.qml b/modules/bar/StatusIcons.qml new file mode 100644 index 0000000..985d4b0 --- /dev/null +++ b/modules/bar/StatusIcons.qml @@ -0,0 +1,181 @@ +pragma ComponentBehavior: Bound +import Quickshell +import Quickshell.Io +import Quickshell.Services.Pipewire +import Quickshell.Networking +import Quickshell.Services.UPower +import QtQuick +import QtQuick.Layouts +import qs +import qs.reusables +import qs.settings + +Rectangle { + id: root + implicitWidth: statusLayout.implicitWidth + 10 + implicitHeight: Settings.config.barHeight - 10 + color: Colors.surfaceContainer + radius: implicitHeight / 2 + property var sink: Pipewire.defaultAudioSink + property var sinkReady: Pipewire.defaultAudioSink.ready + property var bat: UPower.displayDevice + Process { + id: lowBat + running: false + command: ["sh", "-c", "notify-send", "'Low battery!'", "'Plug in your device!'"] + } + // wifi functions + function getIcon(device) { + if (device.type === DeviceType.Wifi) { + for (var i = 0; i < device.networks.values.length; i++) { + var net = device.networks.values[i]; + if (net.connected) { + if (net.signalStrength <= 0.20) + return "\uf0b0"; + //signa_wifi_0_bar + if (net.signalStrength <= 0.40) + return "\uebe4"; + //network_wifi_1_bar + if (net.signalStrength <= 0.60) + return "\uebd6"; + //network_wifi_2_bar + if (net.signalStrength <= 0.80) + return "\uebe1"; + //network_wifi_3_bar + if (net.signalStrength >= 0.80) + return "\ue1d8"; + // signal_wifi_4_bar + } + } + return "\ue1da"; + } else if (device.connected) { + return "settings_ethernet"; + } + return "\ue1da"; + // signal_wifi_off + } + + property bool frame1: UPower.displayDevice.percentage <= 0.16 + property bool frame2: UPower.displayDevice.percentage < 0.32 + property bool frame3: UPower.displayDevice.percentage < 0.48 + property bool frame4: UPower.displayDevice.percentage < 0.74 + property bool frame5: UPower.displayDevice.percentage < 0.90 + property bool frame6: UPower.displayDevice.percentage <= 1 + function getBatteryIcon() { + if (UPower.displayDevice.state == UPowerDeviceState.Charging) { + return "battery_android_frame_bolt"; + } + if (frame1) { + lowBat.running = true; + return "battery_android_frame_1"; + } + if (frame2) { + return "battery_android_frame_2"; + } + if (frame3) { + return "battery_android_frame_3"; + } + if (frame4) { + return "battery_android_frame_4"; + } + if (frame5) { + return "battery_android_frame_5"; + } + if (frame6) { + return "battery_android_frame_full"; + } + } + + function getStatus(device) { + if (device.type === DeviceType.Wifi) { + for (var i = 0; i < device.networks.values.length; i++) { + var net = device.networks.values[i]; + if (net.connected) { + return net.name; + } + } + return "Disconnected"; + } + return device.connected ? "Connected" : "Disconnected"; + } + // pipewire function + function getVolumeIcon() { + // Safety check: if Pipewire is dead or sink is missing + if (!sink) + return "volume_off"; + + // If muted, show the hush icon + if (sink.audio.muted) + return "volume_off"; + + // Volume is usually 0.0 to 1.0 (0% to 100%) + const vol = sink.audio.volume; + + if (vol <= 0.25) + return "volume_mute"; + if (vol < 0.75) + return "volume_down"; + if (vol <= 1.00) + return "volume_up"; + + // If it's loud, prepare the ears! + return "volume_up"; + } + RowLayout { + id: statusLayout + anchors.centerIn: parent + spacing: 10 + CustomIcon { + id: volumeIcon + Layout.alignment: Qt.AlignVCenter + PwObjectTracker { + objects: Pipewire.ready ? Pipewire.defaultAudioSink : [] + } + text: root.getVolumeIcon() + MouseArea { + id: pavuArea + Process { + id: pavuLauncher + command: ["sh", "-c", "pavucontrol"] + } + anchors.fill: parent + onClicked: pavuLauncher.exec(pavuLauncher.command) + acceptedButtons: Qt.LeftButton + cursorShape: Qt.PointingHandCursor + hoverEnabled: true + } + } + + Repeater { + id: netRepeater + Layout.alignment: Qt.AlignVCenter + model: Networking.devices + + delegate: CustomIcon { + id: netIcon + Layout.alignment: Qt.AlignVCenter + required property var modelData + text: root.getIcon(modelData) + } + } + CustomIcon { + id: batIcon + Layout.alignment: Qt.AlignVCenter + text: root.getBatteryIcon() + } + CustomIcon { + id: settingsIcon + text: "settings" + MouseArea { + id: settingsArea + anchors.fill: settingsIcon + onClicked: { + Settings.config.settingsShown = true; + } + acceptedButtons: Qt.LeftButton + cursorShape: Qt.PointingHandCursor + hoverEnabled: true + } + } + } +} diff --git a/modules/bar/Volume.qml b/modules/bar/Volume.qml deleted file mode 100644 index 3237cee..0000000 --- a/modules/bar/Volume.qml +++ /dev/null @@ -1,69 +0,0 @@ -import Quickshell.Io -import QtQuick.Layouts -import QtQuick -import Quickshell.Services.Pipewire -import qs.settings -import qs.reusables -import qs - -Rectangle { - id: root - radius: implicitHeight / 2 - color: pavuArea.containsMouse ? Colors.primaryContainer : Colors.surfaceContainer - implicitWidth: textRow.implicitWidth + 20 - implicitHeight: Settings.config.barHeight - 10 - property var sink: Pipewire.defaultAudioSink - function getVolumeIcon() { - // Safety check: if Pipewire is dead or sink is missing - if (!sink) - return "volume_off"; - - // If muted, show the hush icon - if (sink.audio.muted) - return "volume_off"; - - // Volume is usually 0.0 to 1.0 (0% to 100%) - const vol = sink.audio.volume; - - if (vol <= 0.25) - return "volume_mute"; - if (vol < 0.75) - return "volume_down"; - if (vol <= 1.00) - return "volume_up"; - - // If it's loud, prepare the ears! - return "volume_up"; - } - RowLayout { - id: textRow - spacing: 2 - anchors.centerIn: parent - height: parent.height - CustomText { - id: volumeText - PwObjectTracker { - objects: Pipewire.ready ? Pipewire.defaultAudioSink : [] - } - text: Pipewire.ready ? Math.round(root.sink.audio.volume * 100) + "%" : "failure" - opacity: Pipewire.ready ? root.sink.audio.muted ? 0.5 : 1 : 0 - } - CustomIcon { - id: volumeIcon - opacity: Pipewire.ready ? root.sink.audio.muted ? 0.5 : 1 : 0 - text: Pipewire.ready ? root.getVolumeIcon() : null - } - } - MouseArea { - id: pavuArea - Process { - id: pavuLauncher - command: ["sh", "-c", "pavucontrol"] - } - anchors.fill: parent - onClicked: pavuLauncher.exec(pavuLauncher.command) - acceptedButtons: Qt.LeftButton - cursorShape: Qt.PointingHandCursor - hoverEnabled: true - } -} diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml index 3754146..84a1cc0 100644 --- a/modules/bar/Workspaces.qml +++ b/modules/bar/Workspaces.qml @@ -38,7 +38,7 @@ Rectangle { } required property var modelData - width: Settings.config.barHeight - 5 + width: Settings.config.barHeight - 8 height: Settings.config.barHeight - 10 color: modelData.focused ? Colors.primaryContainer : "transparent" Behavior on width { diff --git a/reusables/CustomIcon.qml b/reusables/CustomIcon.qml index ba9760b..d0aad4e 100644 --- a/reusables/CustomIcon.qml +++ b/reusables/CustomIcon.qml @@ -12,7 +12,7 @@ Text { font { hintingPreference: Font.PreferNoHinting family: "Material Symbols Rounded" - pixelSize: Settings.config.fontSize + pixelSize: iconSize weight: Font.Normal + (Font.DemiBold - Font.Normal) * truncatedFill variableAxes: { "FILL": truncatedFill, From 95ac7e9c4f19ac6ab8a72d8f6d7270877c4c9afa Mon Sep 17 00:00:00 2001 From: lucy Date: Sat, 14 Feb 2026 12:39:52 +0100 Subject: [PATCH 27/32] change battery icon --- modules/bar/StatusIcons.qml | 2 +- modules/bar/Workspaces.qml | 8 +++++--- reusables/CustomIcon.qml | 2 +- reusables/CustomText.qml | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/modules/bar/StatusIcons.qml b/modules/bar/StatusIcons.qml index 985d4b0..a698ffd 100644 --- a/modules/bar/StatusIcons.qml +++ b/modules/bar/StatusIcons.qml @@ -67,7 +67,7 @@ Rectangle { } if (frame1) { lowBat.running = true; - return "battery_android_frame_1"; + return "battery_android_alert"; } if (frame2) { return "battery_android_frame_2"; diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml index 84a1cc0..64fe313 100644 --- a/modules/bar/Workspaces.qml +++ b/modules/bar/Workspaces.qml @@ -8,7 +8,7 @@ import qs.reusables Rectangle { id: root - color: "transparent" + color: Colors.surfaceContainer implicitWidth: workspaceRow.implicitWidth + 10 implicitHeight: Settings.config.barHeight - 10 @@ -38,9 +38,9 @@ Rectangle { } required property var modelData - width: Settings.config.barHeight - 8 + width: 20 height: Settings.config.barHeight - 10 - color: modelData.focused ? Colors.primaryContainer : "transparent" + color: "transparent" Behavior on width { NumberAnimation { @@ -54,6 +54,8 @@ Rectangle { verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter text: parent.modelData.id + color: Colors.primary + opacity: workspaceNumber.modelData.focused ? 1 : 0.5 } MouseArea { anchors.fill: parent diff --git a/reusables/CustomIcon.qml b/reusables/CustomIcon.qml index d0aad4e..1b6a6fc 100644 --- a/reusables/CustomIcon.qml +++ b/reusables/CustomIcon.qml @@ -4,7 +4,7 @@ import qs.settings Text { id: root - color: Colors.onSurfaceColor + color: Colors.primary property real iconSize: 16 property real fill: 1 property real truncatedFill: fill.toFixed(1) // Reduce memory consumption spikes from constant font remapping diff --git a/reusables/CustomText.qml b/reusables/CustomText.qml index 643af2f..14df9fe 100644 --- a/reusables/CustomText.qml +++ b/reusables/CustomText.qml @@ -3,7 +3,7 @@ import qs import qs.settings Text { - color: Colors.onSurfaceColor + color: Colors.primary font.family: Settings.config.font font.pixelSize: Settings.config.fontSize font.weight: Settings.config.fontWeight From d3906f0c0959004848926d3aa233510db77d8dd3 Mon Sep 17 00:00:00 2001 From: lucy Date: Sat, 14 Feb 2026 12:44:21 +0100 Subject: [PATCH 28/32] fix spacing --- modules/bar/Bar.qml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/bar/Bar.qml b/modules/bar/Bar.qml index 1a52b9a..55a4aa7 100644 --- a/modules/bar/Bar.qml +++ b/modules/bar/Bar.qml @@ -35,11 +35,11 @@ Variants { RowLayout { id: leftStuff - anchors.margins: Settings.config.floating ? 0 : Settings.config.barHeight / 4 spacing: 10 anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter Workspaces { + Layout.leftMargin: 5 property var screen: root.modelData } Title {} @@ -54,13 +54,13 @@ Variants { RowLayout { id: rightStuff - anchors.margins: Settings.config.barHeight / 4 spacing: 10 - clip: true anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter SysTray {} - StatusIcons {} + StatusIcons { + Layout.rightMargin: 5 + } } } } From deff8d00b90e2fbcf86c584d06cf41103d6a1daf Mon Sep 17 00:00:00 2001 From: lucy Date: Sat, 14 Feb 2026 12:45:52 +0100 Subject: [PATCH 29/32] revert colors --- modules/bar/Workspaces.qml | 1 - reusables/CustomIcon.qml | 2 +- reusables/CustomText.qml | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/modules/bar/Workspaces.qml b/modules/bar/Workspaces.qml index 64fe313..3ca1ccb 100644 --- a/modules/bar/Workspaces.qml +++ b/modules/bar/Workspaces.qml @@ -54,7 +54,6 @@ Rectangle { verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter text: parent.modelData.id - color: Colors.primary opacity: workspaceNumber.modelData.focused ? 1 : 0.5 } MouseArea { diff --git a/reusables/CustomIcon.qml b/reusables/CustomIcon.qml index 1b6a6fc..d0aad4e 100644 --- a/reusables/CustomIcon.qml +++ b/reusables/CustomIcon.qml @@ -4,7 +4,7 @@ import qs.settings Text { id: root - color: Colors.primary + color: Colors.onSurfaceColor property real iconSize: 16 property real fill: 1 property real truncatedFill: fill.toFixed(1) // Reduce memory consumption spikes from constant font remapping diff --git a/reusables/CustomText.qml b/reusables/CustomText.qml index 14df9fe..643af2f 100644 --- a/reusables/CustomText.qml +++ b/reusables/CustomText.qml @@ -3,7 +3,7 @@ import qs import qs.settings Text { - color: Colors.primary + color: Colors.onSurfaceColor font.family: Settings.config.font font.pixelSize: Settings.config.fontSize font.weight: Settings.config.fontWeight From 796e8bae6eecd70d3fbfa5bfcc2f79d60c2df190 Mon Sep 17 00:00:00 2001 From: lucy Date: Sun, 15 Feb 2026 13:50:23 +0100 Subject: [PATCH 30/32] minor style changes and add tooltips --- modules/bar/Bar.qml | 7 +- modules/bar/StatusIcons.qml | 146 +++++++------------- modules/bar/SysTray.qml | 2 +- modules/bar/Title.qml | 5 +- modules/bar/functions.js | 91 ++++++++++++ modules/widgets/settingsapp/Appearance.qml | 2 + modules/widgets/settingsapp/MainWindow.qml | 2 +- modules/widgets/settingsapp/WelcomePage.qml | 4 +- reusables/CustomIcon.qml | 10 +- 9 files changed, 154 insertions(+), 115 deletions(-) create mode 100644 modules/bar/functions.js diff --git a/modules/bar/Bar.qml b/modules/bar/Bar.qml index 55a4aa7..45f3bcc 100644 --- a/modules/bar/Bar.qml +++ b/modules/bar/Bar.qml @@ -39,7 +39,7 @@ Variants { anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter Workspaces { - Layout.leftMargin: 5 + Layout.leftMargin: Settings.config.floating ? 5 : 20 property var screen: root.modelData } Title {} @@ -59,7 +59,10 @@ Variants { anchors.verticalCenter: parent.verticalCenter SysTray {} StatusIcons { - Layout.rightMargin: 5 + margin: Layout.rightMargin + barWindow: root + barContainer: container + Layout.rightMargin: Settings.config.floating ? 5 : 20 } } } diff --git a/modules/bar/StatusIcons.qml b/modules/bar/StatusIcons.qml index a698ffd..5652a8b 100644 --- a/modules/bar/StatusIcons.qml +++ b/modules/bar/StatusIcons.qml @@ -9,118 +9,50 @@ import QtQuick.Layouts import qs import qs.reusables import qs.settings +import "functions.js" as Fn Rectangle { id: root - implicitWidth: statusLayout.implicitWidth + 10 + implicitWidth: statusLayout.implicitWidth + 20 implicitHeight: Settings.config.barHeight - 10 color: Colors.surfaceContainer radius: implicitHeight / 2 + required property var barWindow + required property var barContainer + required property var margin property var sink: Pipewire.defaultAudioSink property var sinkReady: Pipewire.defaultAudioSink.ready property var bat: UPower.displayDevice + property var perc: UPower.displayDevice.percentage + property var vol: Math.floor(Pipewire.defaultAudioSink.audio.volume * 100) Process { id: lowBat running: false command: ["sh", "-c", "notify-send", "'Low battery!'", "'Plug in your device!'"] } - // wifi functions - function getIcon(device) { - if (device.type === DeviceType.Wifi) { - for (var i = 0; i < device.networks.values.length; i++) { - var net = device.networks.values[i]; - if (net.connected) { - if (net.signalStrength <= 0.20) - return "\uf0b0"; - //signa_wifi_0_bar - if (net.signalStrength <= 0.40) - return "\uebe4"; - //network_wifi_1_bar - if (net.signalStrength <= 0.60) - return "\uebd6"; - //network_wifi_2_bar - if (net.signalStrength <= 0.80) - return "\uebe1"; - //network_wifi_3_bar - if (net.signalStrength >= 0.80) - return "\ue1d8"; - // signal_wifi_4_bar - } + PopupWindow { + id: batPopup + property string popupText + implicitWidth: root.width + 5 + implicitHeight: 30 + anchor.window: root.barWindow + anchor.rect.y: root.barContainer.height + 5 + anchor.rect.x: root.barContainer.width - root.width - root.margin + color: "transparent" + Rectangle { + anchors.fill: parent + color: Colors.surfaceContainer + border.width: 5 + border.color: Colors.surface + radius: Settings.config.floating ? height / 2 : Settings.config.screenCornerRadius + + CustomText { + anchors.centerIn: parent + text: batPopup.popupText } - return "\ue1da"; - } else if (device.connected) { - return "settings_ethernet"; - } - return "\ue1da"; - // signal_wifi_off - } - - property bool frame1: UPower.displayDevice.percentage <= 0.16 - property bool frame2: UPower.displayDevice.percentage < 0.32 - property bool frame3: UPower.displayDevice.percentage < 0.48 - property bool frame4: UPower.displayDevice.percentage < 0.74 - property bool frame5: UPower.displayDevice.percentage < 0.90 - property bool frame6: UPower.displayDevice.percentage <= 1 - function getBatteryIcon() { - if (UPower.displayDevice.state == UPowerDeviceState.Charging) { - return "battery_android_frame_bolt"; - } - if (frame1) { - lowBat.running = true; - return "battery_android_alert"; - } - if (frame2) { - return "battery_android_frame_2"; - } - if (frame3) { - return "battery_android_frame_3"; - } - if (frame4) { - return "battery_android_frame_4"; - } - if (frame5) { - return "battery_android_frame_5"; - } - if (frame6) { - return "battery_android_frame_full"; } } - function getStatus(device) { - if (device.type === DeviceType.Wifi) { - for (var i = 0; i < device.networks.values.length; i++) { - var net = device.networks.values[i]; - if (net.connected) { - return net.name; - } - } - return "Disconnected"; - } - return device.connected ? "Connected" : "Disconnected"; - } - // pipewire function - function getVolumeIcon() { - // Safety check: if Pipewire is dead or sink is missing - if (!sink) - return "volume_off"; - - // If muted, show the hush icon - if (sink.audio.muted) - return "volume_off"; - - // Volume is usually 0.0 to 1.0 (0% to 100%) - const vol = sink.audio.volume; - - if (vol <= 0.25) - return "volume_mute"; - if (vol < 0.75) - return "volume_down"; - if (vol <= 1.00) - return "volume_up"; - - // If it's loud, prepare the ears! - return "volume_up"; - } RowLayout { id: statusLayout anchors.centerIn: parent @@ -131,7 +63,7 @@ Rectangle { PwObjectTracker { objects: Pipewire.ready ? Pipewire.defaultAudioSink : [] } - text: root.getVolumeIcon() + text: Fn.getVolumeIcon() MouseArea { id: pavuArea Process { @@ -143,6 +75,13 @@ Rectangle { acceptedButtons: Qt.LeftButton cursorShape: Qt.PointingHandCursor hoverEnabled: true + onEntered: { + batPopup.visible = true; + batPopup.popupText = "Volume: " + root.vol + "%"; + } + onExited: { + batPopup.visible = false; + } } } @@ -155,13 +94,26 @@ Rectangle { id: netIcon Layout.alignment: Qt.AlignVCenter required property var modelData - text: root.getIcon(modelData) + text: Fn.getIcon(modelData) } } CustomIcon { id: batIcon Layout.alignment: Qt.AlignVCenter - text: root.getBatteryIcon() + text: Fn.getBatteryIcon(root.perc) + MouseArea { + id: batHover + anchors.fill: parent + acceptedButtons: Qt.LeftButton + hoverEnabled: true + onEntered: { + batPopup.visible = true; + batPopup.popupText = "Battery: " + Math.floor(UPower.displayDevice.percentage * 100) + "%"; + } + onExited: { + batPopup.visible = false; + } + } } CustomIcon { id: settingsIcon diff --git a/modules/bar/SysTray.qml b/modules/bar/SysTray.qml index 812cb2b..395855c 100644 --- a/modules/bar/SysTray.qml +++ b/modules/bar/SysTray.qml @@ -5,7 +5,7 @@ import qs Rectangle { id: root - implicitWidth: trayRow.implicitWidth + 10 + implicitWidth: implicitHeight + 2 implicitHeight: Settings.config.barHeight - 10 radius: implicitHeight / 2 color: Colors.surfaceContainer diff --git a/modules/bar/Title.qml b/modules/bar/Title.qml index f861d2b..867d5a6 100644 --- a/modules/bar/Title.qml +++ b/modules/bar/Title.qml @@ -40,10 +40,7 @@ Rectangle { Layout.rightMargin: 10 Layout.maximumWidth: 300 text: root.activeWindow ? root.activeWindow.activated ? root.activeWindow.title : "Desktop" : "Desktop" - onTextChanged: { - console.log(root.activeWindow.title); - console.log(icon.source); - } + onTextChanged: {} elide: Text.ElideRight } } diff --git a/modules/bar/functions.js b/modules/bar/functions.js new file mode 100644 index 0000000..9ba8727 --- /dev/null +++ b/modules/bar/functions.js @@ -0,0 +1,91 @@ + function getIcon(device) { + if (device.type === DeviceType.Wifi) { + for (var i = 0; i < device.networks.values.length; i++) { + var net = device.networks.values[i]; + if (net.connected) { + if (net.signalStrength <= 0.20) + return "\uf0b0"; + //signa_wifi_0_bar + if (net.signalStrength <= 0.40) + return "\uebe4"; + //network_wifi_1_bar + if (net.signalStrength <= 0.60) + return "\uebd6"; + //network_wifi_2_bar + if (net.signalStrength <= 0.80) + return "\uebe1"; + //network_wifi_3_bar + if (net.signalStrength >= 0.80) + return "\ue1d8"; + // signal_wifi_4_bar + } + } + return "\ue1da"; + } else if (device.connected) { + return "settings_ethernet"; + } + return "\ue1da"; + // signal_wifi_off + } + + function getBatteryIcon(perc) { + if (UPower.displayDevice.state == UPowerDeviceState.Charging) { + return "battery_android_frame_bolt"; + } + if (perc <= 0.16) { + lowBat.running = true; + return "battery_android_alert"; + } + if (perc < 0.32) { + return "battery_android_frame_2"; + } + if (perc < 0.48) { + return "battery_android_frame_3"; + } + if (perc < 0.74) { + return "battery_android_frame_4"; + } + if (perc < 0.9) { + return "battery_android_frame_5"; + } + if (perc == 1) { + return "battery_android_frame_full"; + } + } + + function getStatus(device) { + if (device.type === DeviceType.Wifi) { + for (var i = 0; i < device.networks.values.length; i++) { + var net = device.networks.values[i]; + if (net.connected) { + return net.name; + } + } + return "Disconnected"; + } + return device.connected ? "Connected" : "Disconnected"; + } + // pipewire function + function getVolumeIcon() { + // Safety check: if Pipewire is dead or sink is missing + if (!sink) + return "volume_off"; + + // If muted, show the hush icon + if (sink.audio.muted) + return "volume_off"; + + // Volume is usually 0.0 to 1.0 (0% to 100%) + const vol = sink.audio.volume; + + if (vol <= 0.25) + return "volume_mute"; + if (vol < 0.75) + return "volume_down"; + if (vol <= 1.00) + return "volume_up"; + + // If it's loud, prepare the ears! + return "volume_up"; + } + diff --git a/modules/widgets/settingsapp/Appearance.qml b/modules/widgets/settingsapp/Appearance.qml index f85b9a1..b7e51cc 100644 --- a/modules/widgets/settingsapp/Appearance.qml +++ b/modules/widgets/settingsapp/Appearance.qml @@ -27,6 +27,8 @@ ClippingWrapperRectangle { anchors.centerIn: parent clip: true color: Colors.surfaceContainerHigh + border.color: Colors.primary + border.width: 1 radius: 12 margin: 20 diff --git a/modules/widgets/settingsapp/MainWindow.qml b/modules/widgets/settingsapp/MainWindow.qml index 5c77ea6..f04e902 100644 --- a/modules/widgets/settingsapp/MainWindow.qml +++ b/modules/widgets/settingsapp/MainWindow.qml @@ -50,7 +50,7 @@ FloatingWindow { Layout.preferredWidth: 200 Layout.rightMargin: 0 margin: 20 - color: Colors.surfaceContainer + color: Colors.surfaceContainer radius: 12 ListView { id: pageView diff --git a/modules/widgets/settingsapp/WelcomePage.qml b/modules/widgets/settingsapp/WelcomePage.qml index bad7084..56aa6bb 100644 --- a/modules/widgets/settingsapp/WelcomePage.qml +++ b/modules/widgets/settingsapp/WelcomePage.qml @@ -8,7 +8,9 @@ ClippingWrapperRectangle { id: root anchors.centerIn: parent clip: true - color: Colors.surfaceContainerLow + color: Colors.surfaceContainerHigh + border.width: 1 + border.color: Colors.primary radius: 12 margin: 20 ColumnLayout { diff --git a/reusables/CustomIcon.qml b/reusables/CustomIcon.qml index d0aad4e..4ff3d99 100644 --- a/reusables/CustomIcon.qml +++ b/reusables/CustomIcon.qml @@ -11,7 +11,7 @@ Text { renderType: Text.NativeRendering font { hintingPreference: Font.PreferNoHinting - family: "Material Symbols Rounded" + family: "Material Symbols Outlined" pixelSize: iconSize weight: Font.Normal + (Font.DemiBold - Font.Normal) * truncatedFill variableAxes: { @@ -19,12 +19,4 @@ Text { "opsz": iconSize } } - - Behavior on fill { // Leaky leaky, no good - NumberAnimation { - duration: 200 - easing.type: Easing.BezierSpline - easing.bezierCurve: [0.34, 0.80, 0.34, 1.00, 1, 1] - } - } } From d08ce4d933bcc376c6b775d37aa06e450c776ec6 Mon Sep 17 00:00:00 2001 From: lucy Date: Sun, 15 Feb 2026 15:30:27 +0100 Subject: [PATCH 31/32] switch font --- reusables/CustomIcon.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reusables/CustomIcon.qml b/reusables/CustomIcon.qml index 4ff3d99..f832433 100644 --- a/reusables/CustomIcon.qml +++ b/reusables/CustomIcon.qml @@ -6,12 +6,12 @@ Text { id: root color: Colors.onSurfaceColor property real iconSize: 16 - property real fill: 1 + property real fill: 0 property real truncatedFill: fill.toFixed(1) // Reduce memory consumption spikes from constant font remapping renderType: Text.NativeRendering font { hintingPreference: Font.PreferNoHinting - family: "Material Symbols Outlined" + family: "Material Symbols Rounded" pixelSize: iconSize weight: Font.Normal + (Font.DemiBold - Font.Normal) * truncatedFill variableAxes: { From c12e3c16063710bc45f408bff51a538ea2ec810c Mon Sep 17 00:00:00 2001 From: lucy Date: Mon, 16 Feb 2026 23:32:00 +0100 Subject: [PATCH 32/32] change things idek --- modules/bar/Bar.qml | 1 - modules/bar/SysTray.qml | 2 +- modules/bar/functions.js | 2 +- modules/notifications/NotificationCard.qml | 4 +++- reusables/CustomIcon.qml | 9 ++++----- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/bar/Bar.qml b/modules/bar/Bar.qml index 45f3bcc..69c87df 100644 --- a/modules/bar/Bar.qml +++ b/modules/bar/Bar.qml @@ -32,7 +32,6 @@ Variants { anchors.fill: parent color: Qt.rgba(Colors.surface.r, Colors.surface.g, Colors.surface.b, Settings.config.translucency) radius: Settings.config.floating ? Settings.config.barHeight / 2 : 0 - RowLayout { id: leftStuff spacing: 10 diff --git a/modules/bar/SysTray.qml b/modules/bar/SysTray.qml index 395855c..e29eb6f 100644 --- a/modules/bar/SysTray.qml +++ b/modules/bar/SysTray.qml @@ -5,7 +5,7 @@ import qs Rectangle { id: root - implicitWidth: implicitHeight + 2 + implicitWidth: trayRow.implicitWidth + 8 implicitHeight: Settings.config.barHeight - 10 radius: implicitHeight / 2 color: Colors.surfaceContainer diff --git a/modules/bar/functions.js b/modules/bar/functions.js index 9ba8727..6fe2141 100644 --- a/modules/bar/functions.js +++ b/modules/bar/functions.js @@ -48,7 +48,7 @@ if (perc < 0.9) { return "battery_android_frame_5"; } - if (perc == 1) { + if (perc > 0.9) { return "battery_android_frame_full"; } } diff --git a/modules/notifications/NotificationCard.qml b/modules/notifications/NotificationCard.qml index ded11a5..f5cba72 100644 --- a/modules/notifications/NotificationCard.qml +++ b/modules/notifications/NotificationCard.qml @@ -11,8 +11,10 @@ Rectangle { required property var modelData implicitWidth: ListView.view ? ListView.view.width : 300 implicitHeight: fullLayout.implicitHeight + 20 - color: dismissArea.containsMouse ? Colors.surfaceContainer : Colors.surfaceContainerLowest + color: dismissArea.containsMouse ? Colors.primaryContainer : Colors.surfaceContainer radius: 22 + border.width: 1 + border.color: Colors.outline Timer { id: dismissTimer interval: 5000 diff --git a/reusables/CustomIcon.qml b/reusables/CustomIcon.qml index f832433..eeb4e89 100644 --- a/reusables/CustomIcon.qml +++ b/reusables/CustomIcon.qml @@ -6,16 +6,15 @@ Text { id: root color: Colors.onSurfaceColor property real iconSize: 16 - property real fill: 0 - property real truncatedFill: fill.toFixed(1) // Reduce memory consumption spikes from constant font remapping + property real fill: 1 renderType: Text.NativeRendering font { hintingPreference: Font.PreferNoHinting - family: "Material Symbols Rounded" + family: "Material Symbols Outlined" pixelSize: iconSize - weight: Font.Normal + (Font.DemiBold - Font.Normal) * truncatedFill + weight: Font.Normal + (Font.DemiBold - Font.Normal) * fill variableAxes: { - "FILL": truncatedFill, + "FILL": fill, "opsz": iconSize } }