swadhinbiswas Sysmon: Row with separate Text per metric (fix icon/number overlap), spacing=10 · 8/22/2026
8c0b061
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/env python3
"""Regenerate BarWidget.qml with separate Text elements per metric (no overlap)."""
icon_cpu = chr(0xF0BB) #
icon_temp = chr(0xF12D7) #
icon_ram = chr(0xF05FB) #
icon_disk = chr(0xF02D3) #
icon_gpu = chr(0xF1218) #
icon_net = chr(0xF01E3) #
qml = f'''import QtQuick
import Quickshell
import Quickshell.Io
import qs.Commons
import qs.Ui
BarWidget {{
id: root
moduleName: "omarchy.sysmon"
property int cpuPct: 0
property int memPct: 0
property int diskPct: 0
property int gpuTemp: 0
property int cpuTemp: 0
property string netDown: "0"
property string netUp: "0"
readonly property string scriptPath: omarchyPath + "/shell/plugins/sysmon/sysmon-stats.sh"
Process {{
id: proc
running: true
command: ["bash", scriptPath]
stdout: SplitParser {{
onRead: function(line) {{
var m = String(line).match(/C=(\\d+) M=(\\d+) D=(\\d+) G=(\\d+) T=(\\d+) RX=([\\d.]+) TX=([\\d.]+)/)
if (m) {{
root.cpuPct = parseInt(m[1])
root.memPct = parseInt(m[2])
root.diskPct = parseInt(m[3])
root.gpuTemp = parseInt(m[4])
root.cpuTemp = parseInt(m[5])
root.netDown = m[6]
root.netUp = m[7]
}}
}}
}}
}}
implicitWidth: row.implicitWidth + Style.spacing.controlPaddingX * 2
implicitHeight: barSize
visible: !root.vertical
Row {{
id: row
anchors.verticalCenter: parent.verticalCenter
spacing: 10
Repeater {{
model: [
{{ icon: "{icon_cpu}", value: root.cpuPct + "%" }},
{{ icon: "{icon_temp}", value: root.cpuTemp + "\\u00b0" }},
{{ icon: "{icon_ram}", value: root.memPct + "%" }},
{{ icon: "{icon_disk}", value: root.diskPct + "%" }},
{{ icon: "{icon_gpu}", value: root.gpuTemp + "\\u00b0" }},
{{ icon: "{icon_net}", value: root.netDown + "\\u2193" }},
{{ icon: "", value: root.netUp + "\\u2191" }}
]
delegate: Text {{
text: modelData.icon + " " + modelData.value
color: root.bar ? root.bar.barForeground : Color.foreground
font.family: root.bar ? root.bar.fontFamily : Style.font.family
font.pixelSize: Style.font.body
opacity: 0.85
}}
}}
}}
}}
'''
with open('shell/plugins/sysmon/BarWidget.qml', 'w') as f:
f.write(qml)
print(f"written {len(qml)} bytes")