From 8c2a2dac34afd2034c6809b9445a0636f209bc9d Mon Sep 17 00:00:00 2001 From: Zacharias-Brohn Date: Wed, 11 Feb 2026 15:51:30 +0100 Subject: [PATCH 1/8] battery-wid --- Clock.qml | 13 ------------- Config/BarConfig.qml | 4 ++++ Helpers/UPower.qml | 13 +++++++++++++ Modules/Bar/BarLoader.qml | 7 +++++++ Modules/UPower/UPowerWidget.qml | 26 ++++++++++++++++++++++++++ scripts/install-bin.sh | 8 ++++++++ 6 files changed, 58 insertions(+), 13 deletions(-) delete mode 100644 Clock.qml create mode 100644 Helpers/UPower.qml create mode 100644 Modules/UPower/UPowerWidget.qml create mode 100644 scripts/install-bin.sh diff --git a/Clock.qml b/Clock.qml deleted file mode 100644 index 5fc1a19..0000000 --- a/Clock.qml +++ /dev/null @@ -1,13 +0,0 @@ -import QtQuick -import qs.Config -import qs.Modules -import qs.Components - -CustomText { - text: Time.time - color: Config.useDynamicColors ? DynamicColors.palette.m3tertiary : "white" - - Behavior on color { - CAnim {} - } -} diff --git a/Config/BarConfig.qml b/Config/BarConfig.qml index df6afb1..7d83ff2 100644 --- a/Config/BarConfig.qml +++ b/Config/BarConfig.qml @@ -36,6 +36,10 @@ JsonObject { id: "tray", enabled: true }, + { + id: "upower", + enabled: false + }, { id: "clock", enabled: true diff --git a/Helpers/UPower.qml b/Helpers/UPower.qml new file mode 100644 index 0000000..ed9f1ad --- /dev/null +++ b/Helpers/UPower.qml @@ -0,0 +1,13 @@ +pragma Singleton + +import Quickshell +import Quickshell.Services.UPower + + +Singleton { + id: root + + readonly property list devices: UPower.devices.values + readonly property bool onBattery: UPower.onBattery + readonly property UPowerDevice displayDevice: UPower.displayDevice +} diff --git a/Modules/Bar/BarLoader.qml b/Modules/Bar/BarLoader.qml index c36f75e..3d9584d 100644 --- a/Modules/Bar/BarLoader.qml +++ b/Modules/Bar/BarLoader.qml @@ -9,6 +9,7 @@ import qs.Config import qs.Helpers import qs.Daemons import qs.Modules.Polkit +import qs.Modules.UPower RowLayout { id: root @@ -160,6 +161,12 @@ RowLayout { } } } + DelegateChoice { + roleValue: "upower" + delegate: WrappedLoader { + sourceComponent: UPowerWidget {} + } + } } } diff --git a/Modules/UPower/UPowerWidget.qml b/Modules/UPower/UPowerWidget.qml new file mode 100644 index 0000000..2abfb76 --- /dev/null +++ b/Modules/UPower/UPowerWidget.qml @@ -0,0 +1,26 @@ +import Quickshell +import QtQuick +import qs.Components +import qs.Config +import qs.Helpers +import qs.Modules + +Item { + id: root + + implicitWidth: 100 + anchors.top: parent.top + anchors.bottom: parent.bottom + + function findDevice() { + for ( let i = 0; i < UPower.devices.count; i++ ) { + if ( UPower.devices[i].isLaptopBattery ) { + return UPower.devices[i]; + } + } + } + + CustomText { + text: findDevice().percentage + } +} diff --git a/scripts/install-bin.sh b/scripts/install-bin.sh new file mode 100644 index 0000000..329f5d0 --- /dev/null +++ b/scripts/install-bin.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + + +main() { + if [[ ]] +} + +main "$@" From 23f9b6a6cbe273f16803062ae24119ba57096f46 Mon Sep 17 00:00:00 2001 From: Zacharias-Brohn Date: Wed, 11 Feb 2026 15:57:26 +0100 Subject: [PATCH 2/8] battery-wid --- Modules/UPower/UPowerWidget.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/Modules/UPower/UPowerWidget.qml b/Modules/UPower/UPowerWidget.qml index 2abfb76..ab0f860 100644 --- a/Modules/UPower/UPowerWidget.qml +++ b/Modules/UPower/UPowerWidget.qml @@ -22,5 +22,6 @@ Item { CustomText { text: findDevice().percentage + anchors.centerIn: parent } } From fc3a226b7d480f9217355131662399cc1463d034 Mon Sep 17 00:00:00 2001 From: Zacharias-Brohn Date: Wed, 11 Feb 2026 16:05:31 +0100 Subject: [PATCH 3/8] battery-wid --- Helpers/UPower.qml | 10 ++++++++++ Modules/UPower/UPowerWidget.qml | 10 ++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Helpers/UPower.qml b/Helpers/UPower.qml index ed9f1ad..2ba5579 100644 --- a/Helpers/UPower.qml +++ b/Helpers/UPower.qml @@ -10,4 +10,14 @@ Singleton { readonly property list devices: UPower.devices.values readonly property bool onBattery: UPower.onBattery readonly property UPowerDevice displayDevice: UPower.displayDevice + + property UPowerDevice batteryDevice + + function findDevice(): void { + for ( let i = 0; i < root.devices.length; i++ ) { + if ( root.devices[i].type === "Battery" ) { + root.batteryDevice = root.devices[i]; + } + } + } } diff --git a/Modules/UPower/UPowerWidget.qml b/Modules/UPower/UPowerWidget.qml index ab0f860..4a7d311 100644 --- a/Modules/UPower/UPowerWidget.qml +++ b/Modules/UPower/UPowerWidget.qml @@ -12,16 +12,10 @@ Item { anchors.top: parent.top anchors.bottom: parent.bottom - function findDevice() { - for ( let i = 0; i < UPower.devices.count; i++ ) { - if ( UPower.devices[i].isLaptopBattery ) { - return UPower.devices[i]; - } - } - } + Component.onCompleted: UPower.findDevice() CustomText { - text: findDevice().percentage + text: UPower.batteryDevice.percentage + "%" anchors.centerIn: parent } } From a717c8c18c4aaaed5f7d46468517b5874f674ae0 Mon Sep 17 00:00:00 2001 From: Zacharias-Brohn Date: Wed, 11 Feb 2026 16:08:38 +0100 Subject: [PATCH 4/8] battery-wid --- Helpers/UPower.qml | 7 ++++--- Modules/UPower/UPowerWidget.qml | 2 -- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Helpers/UPower.qml b/Helpers/UPower.qml index 2ba5579..d0159b7 100644 --- a/Helpers/UPower.qml +++ b/Helpers/UPower.qml @@ -11,12 +11,13 @@ Singleton { readonly property bool onBattery: UPower.onBattery readonly property UPowerDevice displayDevice: UPower.displayDevice - property UPowerDevice batteryDevice + property UPowerDevice batteryDevice: findDevice() - function findDevice(): void { + function findDevice(): UPowerDevice { for ( let i = 0; i < root.devices.length; i++ ) { + console.log(root.devices[i]) if ( root.devices[i].type === "Battery" ) { - root.batteryDevice = root.devices[i]; + return root.devices[i]; } } } diff --git a/Modules/UPower/UPowerWidget.qml b/Modules/UPower/UPowerWidget.qml index 4a7d311..6e8c10d 100644 --- a/Modules/UPower/UPowerWidget.qml +++ b/Modules/UPower/UPowerWidget.qml @@ -12,8 +12,6 @@ Item { anchors.top: parent.top anchors.bottom: parent.bottom - Component.onCompleted: UPower.findDevice() - CustomText { text: UPower.batteryDevice.percentage + "%" anchors.centerIn: parent From 0a543a5297492022ba47fe04fbce2e440157e16f Mon Sep 17 00:00:00 2001 From: Zacharias-Brohn Date: Wed, 11 Feb 2026 16:10:53 +0100 Subject: [PATCH 5/8] battery-wid --- Helpers/UPower.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Helpers/UPower.qml b/Helpers/UPower.qml index d0159b7..5495000 100644 --- a/Helpers/UPower.qml +++ b/Helpers/UPower.qml @@ -16,7 +16,7 @@ Singleton { function findDevice(): UPowerDevice { for ( let i = 0; i < root.devices.length; i++ ) { console.log(root.devices[i]) - if ( root.devices[i].type === "Battery" ) { + if ( root.devices[i].isLaptopBattery ) { return root.devices[i]; } } From 99a7211ad3582f637e69f2e3d017375000668e1b Mon Sep 17 00:00:00 2001 From: Zacharias-Brohn Date: Wed, 11 Feb 2026 16:26:33 +0100 Subject: [PATCH 6/8] battery-wid --- Helpers/UPower.qml | 11 --------- Modules/UPower/UPowerWidget.qml | 40 +++++++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/Helpers/UPower.qml b/Helpers/UPower.qml index 5495000..ed9f1ad 100644 --- a/Helpers/UPower.qml +++ b/Helpers/UPower.qml @@ -10,15 +10,4 @@ Singleton { readonly property list devices: UPower.devices.values readonly property bool onBattery: UPower.onBattery readonly property UPowerDevice displayDevice: UPower.displayDevice - - property UPowerDevice batteryDevice: findDevice() - - function findDevice(): UPowerDevice { - for ( let i = 0; i < root.devices.length; i++ ) { - console.log(root.devices[i]) - if ( root.devices[i].isLaptopBattery ) { - return root.devices[i]; - } - } - } } diff --git a/Modules/UPower/UPowerWidget.qml b/Modules/UPower/UPowerWidget.qml index 6e8c10d..fa09aa0 100644 --- a/Modules/UPower/UPowerWidget.qml +++ b/Modules/UPower/UPowerWidget.qml @@ -1,19 +1,51 @@ import Quickshell +import Quickshell.Services.UPower import QtQuick +import QtQuick.Layouts import qs.Components import qs.Config -import qs.Helpers +import qs.Helpers as Helpers import qs.Modules Item { id: root - implicitWidth: 100 + implicitWidth: layout.childrenRect.width anchors.top: parent.top anchors.bottom: parent.bottom - CustomText { - text: UPower.batteryDevice.percentage + "%" + RowLayout { + id: layout anchors.centerIn: parent + + MaterialIcon { + animate: true + Layout.alignment: Qt.AlignVCenter + text: { + if (!Helpers.UPower.displayDevice.isLaptopBattery) { + if (PowerProfiles.profile === PowerProfile.PowerSaver) + return "energy_savings_leaf"; + if (PowerProfiles.profile === PowerProfile.Performance) + return "rocket_launch"; + return "balance"; + } + + const perc = Helpers.UPower.displayDevice.percentage; + const charging = [UPowerDeviceState.Charging, UPowerDeviceState.FullyCharged, UPowerDeviceState.PendingCharge].includes(Helpers.UPower.displayDevice.state); + if (perc === 1) + return charging ? "battery_charging_full" : "battery_full"; + let level = Math.floor(perc * 7); + if (charging && (level === 4 || level === 1)) + level--; + return charging ? `battery_charging_${(level + 3) * 10}` : `battery_${level}_bar`; + } + color: !Helpers.UPower.onBattery || UPower.displayDevice.percentage > 0.2 ? root.colour : Colours.palette.m3error + fill: 1 + } + + CustomText { + Layout.alignment: Qt.AlignVCenter + text: Helpers.UPower.displayDevice.isLaptopBattery ? qsTr("%1%").arg(Math.round(UPower.displayDevice.percentage * 100)) : qsTr("NaN") + } } } From 60634ce0ea1b457e2f345a111769996331420a62 Mon Sep 17 00:00:00 2001 From: Zacharias-Brohn Date: Wed, 11 Feb 2026 16:28:08 +0100 Subject: [PATCH 7/8] battery-wid --- Modules/UPower/UPowerWidget.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/UPower/UPowerWidget.qml b/Modules/UPower/UPowerWidget.qml index fa09aa0..2f7158e 100644 --- a/Modules/UPower/UPowerWidget.qml +++ b/Modules/UPower/UPowerWidget.qml @@ -39,7 +39,7 @@ Item { level--; return charging ? `battery_charging_${(level + 3) * 10}` : `battery_${level}_bar`; } - color: !Helpers.UPower.onBattery || UPower.displayDevice.percentage > 0.2 ? root.colour : Colours.palette.m3error + color: !Helpers.UPower.onBattery || UPower.displayDevice.percentage > 0.2 ? DynamicColors.palette.m3secondary : DynamicColors.palette.m3error fill: 1 } From b37fe53fa6d674e6b5889b5081681885155f138f Mon Sep 17 00:00:00 2001 From: Zacharias-Brohn Date: Wed, 11 Feb 2026 16:39:48 +0100 Subject: [PATCH 8/8] font --- Modules/Clock.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/Clock.qml b/Modules/Clock.qml index 13c2fd6..9a6f0f4 100644 --- a/Modules/Clock.qml +++ b/Modules/Clock.qml @@ -19,7 +19,7 @@ Item { anchors.bottomMargin: 3 radius: 4 color: "transparent" - Text { + CustomText { id: timeText anchors.centerIn: parent