import QtQuick import Quickshell.Io import "." as M M.BarIcon { id: root tooltip: "Power profile: " + (root.profile || "unknown") property string profile: "" color: root.profile === "performance" ? M.Theme.base09 : root.profile === "power-saver" ? M.Theme.base0B : M.Theme.base0A icon: { if (root.profile === "performance") return "\uF0E7"; if (root.profile === "power-saver") return "\uF06C"; if (root.profile === "balanced") return "\uF24E"; return "\uF0E7"; } Process { id: proc running: true command: ["powerprofilesctl", "get"] stdout: StdioCollector { onStreamFinished: root.profile = text.trim() } } // Event-driven: watch power-profiles-daemon DBus changes Process { id: ppMonitor running: true command: ["sh", "-c", "dbus-monitor --system \"interface='org.freedesktop.DBus.Properties',member='PropertiesChanged',path='/net/hadess/PowerProfiles'\" 2>/dev/null"] stdout: SplitParser { splitMarker: "\n" onRead: _debounce.restart() } } Timer { id: _debounce interval: 300 onTriggered: proc.running = true } Timer { interval: 60000 running: true repeat: true onTriggered: proc.running = true } Process { id: setter property string next: "" command: ["powerprofilesctl", "set", next] onRunningChanged: if (!running && next !== "") proc.running = true } MouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor onClicked: { const cycle = ["performance", "balanced", "power-saver"]; const idx = cycle.indexOf(root.profile); setter.next = cycle[(idx + 1) % cycle.length]; setter.running = true; } } }