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
86
87
88
|
(defpoll time :interval "10s" "date '+%I:%M'")
(defpoll ampm :interval "10s" "date '+%p'")
(defpoll date :interval "60s" "date '+%d/%m'")
(defpoll full_date :interval "60s" "date '+%A, %d %B %Y'")
(deflisten workspaces :initial "[]" "@@workspaces-script@@")
(deflisten active-windows :initial "[]" "@@windows-script@@")
(deflisten system_stats
:initial "{\"cpu\":{\"percent\":0,\"per_core\":[],\"freq_mhz\":null,\"load_avg\":null,\"tooltip\":\"CPU: 0%\"},\"ram\":{\"percent\":0,\"used\":\"0B\",\"total\":\"0B\",\"available\":\"0B\",\"swap_percent\":0,\"swap_used\":\"0B\",\"swap_total\":\"0B\",\"speed_mhz\":null,\"tooltip\":\"RAM: 0%\"},\"net\":{\"status\":\"down\",\"tooltip\":\"Network Offline\",\"routes\":[]},\"sound\":{\"percent\":0,\"mute\":true,\"sink\":null,\"tooltip\":\"Volume: unknown\"}}"
"@@systemstats-script@@")
(defwindow bar
:monitor 0
:geometry (geometry
:x "0px"
:y "0px"
:width "60px"
:height "100%"
:anchor "top right")
:stacking "fg"
:focusable "none"
:reserve (struts :distance "60px" :side "right")
(bar-content))
(defwidget bar-content []
(box :orientation "v"
:space-evenly false
:class "bar-container"
:vexpand true
(workspaces-widget)
(windows-widget)
(system-widget)))
(defwidget workspaces-widget []
(box :orientation "v" :space-evenly false :spacing 4 :halign "fill" :class "workspaces"
(for ws in workspaces
(eventbox :onclick "niri msg action focus-workspace ${ws.idx}"
:cursor "pointer" :halign "fill"
:tooltip "${ws.tooltip}"
(box :class "workspace-button ${ws.is_active ? 'active' : ''}" :halign "fill"
(overlay :halign "fill"
(image :class "workspace-icon"
:path "${ws.icon}"
:image-width 20 :image-height 20)
(label :class "workspace-idx" :text "${ws.idx}" :halign "end" :valign "end")))))))
(defwidget windows-widget []
(box :orientation "v" :space-evenly false :spacing 4 :halign "center" :class "windows" :vexpand true
(for w in active-windows
(eventbox :onclick "niri msg action focus-window --id ${w.id}"
:cursor "pointer"
:halign "fill"
:tooltip "${w.app_id}: ${w.title != '' ? ' ' : ''}${w.title}"
(box :halign "fill" :class "window-button ${w.is_focused ? 'focused' : ''}"
(image :class "window-icon" :path "${w.icon}" :image-width 20 :image-height 20))))))
(defwidget system-widget []
(box :orientation "v" :space-evenly false :spacing 6 :halign "fill" :class "system"
(box :orientation "v" :class "system-item" :halign "fill" :space-evenly false :spacing 4
:tooltip "${system_stats.net.tooltip}"
(image :class "system-icon"
:path "${system_stats.net.status == 'down' ? '@@icon-offline@@' : system_stats.net.routes[0].type == 'wifi' ? '@@icon-wifi@@' : system_stats.net.routes[0].type == 'ethernet' ? '@@icon-ethernet@@' : system_stats.net.routes[0].type == 'tun' ? '@@icon-proxy@@' : '@@icon-offline@@'}"
:image-width 24 :image-height 24)
(label :class "system-label small"
:text "${system_stats.net.status == 'down' ? '-' : system_stats.net.routes[0].tx}")
(label :class "system-label small"
:text "${system_stats.net.status == 'down' ? '-' : system_stats.net.routes[0].rx}"))
(box :orientation "v" :class "system-item" :space-evenly false :spacing 4
:tooltip "${system_stats.cpu.tooltip}"
(image :class "system-icon" :path "@@icon-cpu@@" :image-width 24 :image-height 24)
(label :class "system-label" :text "${system_stats.cpu.percent}%"))
(box :orientation "v" :class "system-item" :space-evenly false :spacing 4
:tooltip "${system_stats.ram.tooltip}"
(image :class "system-icon" :path "@@icon-ram@@" :image-width 24 :image-height 24)
(label :class "system-label" :text "${system_stats.ram.percent}%"))
(eventbox :onclick "pamixer --toggle-mute"
:onscroll "bash -c '[ \"{}\" = \"up\" ] && pamixer --increase 5 --unmute || pamixer --decrease 5'"
:cursor "pointer" :halign "fill"
(box :orientation "v" :space-evenly false :spacing 4 :class "system-item"
:tooltip "${system_stats.sound.tooltip}"
(image :class "system-icon" :path "@@icon-audio@@" :image-width 24 :image-height 24)
(label :class "system-label" :text "${system_stats.sound.mute ? '-' : (system_stats.sound.percent + '%')}")))
(box :orientation "v" :class "system-item" :space-evenly false :spacing 4
:tooltip "${full_date} ${time} (${date})"
(image :class "system-icon" :path "@@icon-calendar@@" :image-width 24 :image-height 24)
(label :class "system-label small" :text time)
(label :class "system-label small" :text ampm)
(label :class "system-label small" :text date))))
|