me like nix
1pragma Singleton
2
3import QtQuick
4import Quickshell
5import Quickshell.Io
6
7QtObject {
8 readonly property string profile: _profile
9 readonly property string backend: _backend
10
11 property string _profile: ""
12 property string _backend: ""
13
14 function setProfile(name) {
15 if (_backend === "system76") {
16 var s76profile = name === "power-saver" ? "battery" : name
17 _setProc.command = ["system76-power", "profile", s76profile]
18 } else {
19 _setProc.command = ["powerprofilesctl", "set", name]
20 }
21 _setProc.running = true
22 _profile = name
23 }
24
25 function cycleProfile() {
26 var next = "balanced"
27 if (_profile === "balanced") next = "performance"
28 else if (_profile === "performance") next = "power-saver"
29 else next = "balanced"
30 setProfile(next)
31 }
32
33 property var _backendProc: Process {
34 command: ["sh", "-c", "command -v system76-power >/dev/null 2>&1 && echo system76 || echo ppd"]
35 stdout: SplitParser {
36 onRead: data => {
37 if (!data) return
38 _backend = data.trim()
39 }
40 }
41 Component.onCompleted: running = true
42 }
43
44 property var _profileProc: Process {
45 command: ["sh", "-c", "if command -v system76-power >/dev/null 2>&1; then p=$(system76-power profile 2>/dev/null | grep -oiE 'performance|balanced|battery' | tr '[:upper:]' '[:lower:]'); [ \"$p\" = \"battery\" ] && p=\"power-saver\"; echo \"${p:-unknown}\"; else powerprofilesctl get 2>/dev/null || echo unknown; fi"]
46 stdout: SplitParser {
47 onRead: data => {
48 if (!data) return
49 _profile = data.trim()
50 }
51 }
52 Component.onCompleted: running = true
53 }
54
55 property var _setProc: Process {
56 id: _setProc
57 }
58
59 property var _timer: Timer {
60 interval: 2000
61 running: true
62 repeat: true
63 onTriggered: _profileProc.running = true
64 }
65}