From 42abc57b65af469c9981b34120d6253d7ebf271d Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 31 May 2025 01:38:34 +0200 Subject: [PATCH] warn on low battery --- .config/quickshell/modules/bar/Bar.qml | 2 +- .../bar/{Battery.qml => BatteryIndicator.qml} | 11 +++---- .config/quickshell/services/Battery.qml | 29 +++++++++++++++++++ 3 files changed, 36 insertions(+), 6 deletions(-) rename .config/quickshell/modules/bar/{Battery.qml => BatteryIndicator.qml} (89%) create mode 100644 .config/quickshell/services/Battery.qml diff --git a/.config/quickshell/modules/bar/Bar.qml b/.config/quickshell/modules/bar/Bar.qml index ac1f8cf8b..5e4d7eb5e 100644 --- a/.config/quickshell/modules/bar/Bar.qml +++ b/.config/quickshell/modules/bar/Bar.qml @@ -241,7 +241,7 @@ Scope { Layout.alignment: Qt.AlignVCenter } - Battery { + BatteryIndicator { visible: (barRoot.useShortenedForm < 2 && UPower.displayDevice.isLaptopBattery) Layout.alignment: Qt.AlignVCenter } diff --git a/.config/quickshell/modules/bar/Battery.qml b/.config/quickshell/modules/bar/BatteryIndicator.qml similarity index 89% rename from .config/quickshell/modules/bar/Battery.qml rename to .config/quickshell/modules/bar/BatteryIndicator.qml index 5def8560e..74cdf0169 100644 --- a/.config/quickshell/modules/bar/Battery.qml +++ b/.config/quickshell/modules/bar/BatteryIndicator.qml @@ -1,5 +1,6 @@ import "root:/modules/common" import "root:/modules/common/widgets" +import "root:/services" import QtQuick import QtQuick.Layouts import Quickshell @@ -9,11 +10,11 @@ import Quickshell.Services.UPower Rectangle { id: root property bool borderless: ConfigOptions.bar.borderless - readonly property var chargeState: UPower.displayDevice.state - readonly property bool isCharging: chargeState == UPowerDeviceState.Charging - readonly property bool isPluggedIn: isCharging || chargeState == UPowerDeviceState.PendingCharge - readonly property real percentage: UPower.displayDevice.percentage - readonly property bool isLow: percentage <= ConfigOptions.bar.batteryLowThreshold / 100 + readonly property var chargeState: Battery.chargeState + readonly property bool isCharging: Battery.isCharging + readonly property bool isPluggedIn: Battery.isPluggedIn + readonly property real percentage: Battery.percentage + readonly property bool isLow: percentage <= ConfigOptions.battery.low / 100 readonly property color batteryLowBackground: Appearance.m3colors.darkmode ? Appearance.m3colors.m3error : Appearance.m3colors.m3errorContainer readonly property color batteryLowOnBackground: Appearance.m3colors.darkmode ? Appearance.m3colors.m3errorContainer : Appearance.m3colors.m3error diff --git a/.config/quickshell/services/Battery.qml b/.config/quickshell/services/Battery.qml new file mode 100644 index 000000000..372c1f1bb --- /dev/null +++ b/.config/quickshell/services/Battery.qml @@ -0,0 +1,29 @@ +pragma Singleton + +import "root:/modules/common" +import QtQuick +import QtQuick.Layouts +import Quickshell +import Quickshell.Io +import Quickshell.Hyprland +import Quickshell.Services.UPower + +Singleton { + property bool available: UPower.displayDevice.isLaptopBattery + property var chargeState: UPower.displayDevice.state + property bool isCharging: chargeState == UPowerDeviceState.Charging + property bool isPluggedIn: isCharging || chargeState == UPowerDeviceState.PendingCharge + property real percentage: UPower.displayDevice.percentage + + property bool isLow: percentage <= ConfigOptions.battery.low / 100 + property bool isCritical: percentage <= ConfigOptions.battery.critical / 100 + property bool isSuspending: percentage <= ConfigOptions.battery.suspend / 100 + + onIsLowChanged: { + if (available && isLow) Hyprland.dispatch(`exec notify-send "Low battery" "Consider plugging in your device" -u critical -a "Shell"`) + } + + onIsCriticalChanged: { + if (available && isCritical) Hyprland.dispatch(`exec notify-send "Critically low battery" "🙏 I ask for pleas charge\nAutomatic suspend triggers at ${ConfigOptions.battery.suspend}%" -u critical -a "Shell"`) + } +}