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/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 diff --git a/Modules/UPower/UPowerWidget.qml b/Modules/UPower/UPowerWidget.qml new file mode 100644 index 0000000..2f7158e --- /dev/null +++ b/Modules/UPower/UPowerWidget.qml @@ -0,0 +1,51 @@ +import Quickshell +import Quickshell.Services.UPower +import QtQuick +import QtQuick.Layouts +import qs.Components +import qs.Config +import qs.Helpers as Helpers +import qs.Modules + +Item { + id: root + + implicitWidth: layout.childrenRect.width + anchors.top: parent.top + anchors.bottom: parent.bottom + + 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 ? DynamicColors.palette.m3secondary : DynamicColors.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") + } + } +} 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 "$@"