aboutsummaryrefslogtreecommitdiffstats
path: root/modules/desktop/eww/bar.yuck
blob: 52dba3212b182b24791a10f34142915a277c73d3 (plain)
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
(defpoll time :interval "10s" "date '+%H:%M'")
(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 != '' ? ws.icon : '@@icon-unknown@@'}"
                   :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 != '' ? w.icon : '@@icon-unknown@@'}" :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@@' : '@@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" :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 date))))