From 9528b10015b240ee81f80af6ebeaca01a0189d34 Mon Sep 17 00:00:00 2001 From: Kainoa Kanter Date: Fri, 22 Aug 2025 12:59:05 -0700 Subject: [PATCH 1/2] feat: power profile widget --- Commons/WidgetLoader.qml | 2 +- Modules/Bar/Widgets/PowerProfile.qml | 57 ++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 Modules/Bar/Widgets/PowerProfile.qml diff --git a/Commons/WidgetLoader.qml b/Commons/WidgetLoader.qml index ce44431..17ef9bf 100644 --- a/Commons/WidgetLoader.qml +++ b/Commons/WidgetLoader.qml @@ -65,7 +65,7 @@ QtObject { // This is where you should add your Modules/Bar/Widgets/ // so it gets registered in the BarTab function discoverAvailableWidgets() { - const widgetFiles = ["ActiveWindow", "Battery", "Bluetooth", "Brightness", "Clock", "MediaMini", "NotificationHistory", "ScreenRecorderIndicator", "SidePanelToggle", "SystemMonitor", "Tray", "Volume", "WiFi", "Workspace"] + const widgetFiles = ["ActiveWindow", "Battery", "Bluetooth", "Brightness", "Clock", "MediaMini", "NotificationHistory", "PowerProfile", "ScreenRecorderIndicator", "SidePanelToggle", "SystemMonitor", "Tray", "Volume", "WiFi", "Workspace"] const availableWidgets = [] diff --git a/Modules/Bar/Widgets/PowerProfile.qml b/Modules/Bar/Widgets/PowerProfile.qml new file mode 100644 index 0000000..ecef0ca --- /dev/null +++ b/Modules/Bar/Widgets/PowerProfile.qml @@ -0,0 +1,57 @@ +import QtQuick +import Quickshell +import Quickshell.Services.UPower +import QtQuick.Layouts +import qs.Commons +import qs.Services +import qs.Widgets + +NIconButton { + id: root + + property var powerProfiles: PowerProfiles + readonly property bool hasPP: powerProfiles.hasPerformanceProfile + + sizeMultiplier: 0.8 + visible: hasPP + + function profileIcon() { + if (!hasPP) + return "balance" + if (powerProfiles.profile === PowerProfile.Performance) + return "speed" + if (powerProfiles.profile === PowerProfile.Balanced) + return "balance" + if (powerProfiles.profile === PowerProfile.PowerSaver) + return "eco" + } + + function profileName() { + if (!hasPP) + return "Unknown" + if (powerProfiles.profile === PowerProfile.Performance) + return "Performance" + if (powerProfiles.profile === PowerProfile.Balanced) + return "Balanced" + if (powerProfiles.profile === PowerProfile.PowerSaver) + return "Power Saver" + } + + function changeProfile() { + if (!hasPP) return; + if (powerProfiles.profile === PowerProfile.Performance) + powerProfiles.profile = PowerProfile.Balanced + else if (powerProfiles.profile === PowerProfile.Balanced) + powerProfiles.profile = PowerProfile.PowerSaver + else if (powerProfiles.profile === PowerProfile.PowerSaver) + powerProfiles.profile = PowerProfile.Performance + } + + icon: root.profileIcon() + tooltipText: root.profileName() + colorBg: Color.mSurfaceVariant + colorFg: Color.mOnSurface + colorBorder: Color.transparent + colorBorderHover: Color.transparent + onClicked: root.changeProfile() +} From 274fb8658a08b44319a1055ac4f2c8b810203ef7 Mon Sep 17 00:00:00 2001 From: Kainoa Kanter Date: Fri, 22 Aug 2025 13:04:44 -0700 Subject: [PATCH 2/2] better profile switching order --- Modules/Bar/Widgets/PowerProfile.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Modules/Bar/Widgets/PowerProfile.qml b/Modules/Bar/Widgets/PowerProfile.qml index ecef0ca..6a9b978 100644 --- a/Modules/Bar/Widgets/PowerProfile.qml +++ b/Modules/Bar/Widgets/PowerProfile.qml @@ -40,11 +40,11 @@ NIconButton { function changeProfile() { if (!hasPP) return; if (powerProfiles.profile === PowerProfile.Performance) - powerProfiles.profile = PowerProfile.Balanced - else if (powerProfiles.profile === PowerProfile.Balanced) powerProfiles.profile = PowerProfile.PowerSaver - else if (powerProfiles.profile === PowerProfile.PowerSaver) + else if (powerProfiles.profile === PowerProfile.Balanced) powerProfiles.profile = PowerProfile.Performance + else if (powerProfiles.profile === PowerProfile.PowerSaver) + powerProfiles.profile = PowerProfile.Balanced } icon: root.profileIcon()