summaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
Diffstat (limited to 'services')
-rw-r--r--services/Brightness.qml3
-rw-r--r--services/SystemUsage.qml84
2 files changed, 85 insertions, 2 deletions
diff --git a/services/Brightness.qml b/services/Brightness.qml
index 2de51a0..fabac1f 100644
--- a/services/Brightness.qml
+++ b/services/Brightness.qml
@@ -95,7 +95,6 @@ Singleton {
if (Math.round(brightness * 100) === rounded)
return;
brightness = value;
- console.log(brightness)
setProc.command = isDdc ? ["ddcutil", "-b", busNum, "setvcp", "10", rounded] : ["brightnessctl", "s", `${rounded}%`];
setProc.startDetached();
}
@@ -107,7 +106,7 @@ Singleton {
Component.onCompleted: {
initProc.command = isDdc ? ["ddcutil", "-b", busNum, "getvcp", "10", "--brief"] : ["sh", "-c", `echo "a b c $(brightnessctl g) $(brightnessctl m)"`];
- initProc.running = true;
+ initProc.running = true;
}
}
diff --git a/services/SystemUsage.qml b/services/SystemUsage.qml
new file mode 100644
index 0000000..c5503b9
--- /dev/null
+++ b/services/SystemUsage.qml
@@ -0,0 +1,84 @@
+pragma Singleton
+
+import Quickshell
+import Quickshell.Io
+import QtQuick
+
+Singleton {
+ id: root
+
+ property real cpuPerc
+ property int memUsed
+ property int memTotal
+ readonly property real memPerc: memTotal > 0 ? memUsed / memTotal : 0
+ property int storageUsed
+ property int storageTotal
+ property real storagePerc: storageTotal > 0 ? storageUsed / storageTotal : 0
+
+ property int lastCpuIdle
+ property int lastCpuTotal
+
+ Timer {
+ running: true
+ interval: 1000
+ repeat: true
+ onTriggered: {
+ stat.reload();
+ meminfo.reload();
+ storage.running = true;
+ }
+ }
+
+ FileView {
+ id: stat
+
+ path: "/proc/stat"
+ onLoaded: {
+ const data = text().match(/^cpu\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/);
+ if (data) {
+ const stats = data.slice(1).map(n => parseInt(n, 10));
+ const total = stats.reduce((a, b) => a + b, 0);
+ const idle = stats[3];
+
+ const totalDiff = total - root.lastCpuTotal;
+ const idleDiff = idle - root.lastCpuIdle;
+ root.cpuPerc = totalDiff > 0 ? (1 - idleDiff / totalDiff) : 0;
+
+ root.lastCpuTotal = total;
+ root.lastCpuIdle = idle;
+ }
+ }
+ }
+
+ FileView {
+ id: meminfo
+
+ path: "/proc/meminfo"
+ onLoaded: {
+ const data = text();
+ root.memTotal = parseInt(data.match(/MemTotal: *(\d+)/)[1], 10) || 1;
+ root.memUsed = (root.memTotal - parseInt(data.match(/MemAvailable: *(\d+)/)[1], 10)) || 0;
+ }
+ }
+
+ Process {
+ id: storage
+
+ running: true
+ command: ["sh", "-c", "df | grep '^/dev/' | awk '{print $3, $4}'"]
+ stdout: SplitParser {
+ splitMarker: ""
+ onRead: data => {
+ let used = 0;
+ let avail = 0;
+ for (const line of data.trim().split("\n")) {
+ const [u, a] = line.split(" ");
+ used += parseInt(u, 10);
+ avail += parseInt(a, 10);
+ }
+ root.storageUsed = used;
+ root.storageTotal = used + avail;
+ }
+ }
+ }
+}