/ de-omarchy / scripts / _gen_sysmon_qml.py
swadhinbiswas Sysmon: Row with separate Text per metric (fix icon/number overlap), spacing=10 · 8/22/2026
8c0b061
85 lines · 2.4 KB
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")