(deflisten workspaces-status :initial "[]" "./listen/niri/workspaces" ) (deflisten window-title "./listen/niri/window-title") (deflisten notifications-status :initial '{"dnd": false, "count": 0}' "swaync-client --subscribe" ) (defvar workspaces-icon '{ "admin": "", "everything": "", "apps": "" }') (defvar notifications-icon '{ "nothing": "", "new": "", "dnd": "" }') (defvar battery-icon '{ "Discharging": { "0": "󰂎", "10": "󰁺", "20": "󰁻", "30": "󰁼", "40": "󰁽", "50": "󰁾", "60": "󰁿", "70": "󰂀", "80": "󰂁", "90": "󰂂", "100": "󰁹" }, "Charging": { "0": "󰢟", "10": "󰢜", "20": "󰂆", "30": "󰂇", "40": "󰂈", "50": "󰢝", "60": "󰂉", "70": "󰢞", "80": "󰂊", "90": "󰂋", "100": "󰂅" } }') (defwidget workspaces [] (box :class "workspaces" (for workspace in {workspaces-status} (eventbox :onclick "niri msg action focus-workspace ${workspace.idx}" :width 25 :class "${workspace.is_active ? " workspace-active" : ""}" "${"${workspaces-icon?.[workspace.name]}" ?: ""} " ) ) ) ) (defwidget window-title [] (box (label :limit-width 80 :text "${window-title ?: ""}" )) ) (defwidget notifications [] (box (eventbox :onclick "swaync-client --toggle-panel" :onmiddleclick "swaync-client --close-all" :onrightclick "swaync-client --toggle-dnd" :width 25 (label :class "icons" :text "${notifications-status.dnd ? "${notifications-icon.dnd}" : notifications-status.count > 0 ? "${notifications-icon.new}" : "${notifications-icon.nothing}"} ${notifications-status.count}" ) )) ) (defwidget time [] "${formattime(EWW_TIME, "%Y-%m-%d")} ${formattime(EWW_TIME, "%H:%M:%S")}" ) (defwidget tray [] (box (systray :icon-size 15 :spacing 10 )) ) (defwidget battery [] (label :text "${EWW_BATTERY.BAT0.capacity == 100 ? "${battery-icon[EWW_BATTERY.BAT0.status]["100"]}" : EWW_BATTERY.BAT0.capacity >= 90 ? "${battery-icon[EWW_BATTERY.BAT0.status]["90"]}" : EWW_BATTERY.BAT0.capacity >= 80 ? "${battery-icon[EWW_BATTERY.BAT0.status]["80"]}" : EWW_BATTERY.BAT0.capacity >= 70 ? "${battery-icon[EWW_BATTERY.BAT0.status]["70"]}" : EWW_BATTERY.BAT0.capacity >= 60 ? "${battery-icon[EWW_BATTERY.BAT0.status]["60"]}" : EWW_BATTERY.BAT0.capacity >= 50 ? "${battery-icon[EWW_BATTERY.BAT0.status]["50"]}" : EWW_BATTERY.BAT0.capacity >= 40 ? "${battery-icon[EWW_BATTERY.BAT0.status]["40"]}" : EWW_BATTERY.BAT0.capacity >= 30 ? "${battery-icon[EWW_BATTERY.BAT0.status]["30"]}" : EWW_BATTERY.BAT0.capacity >= 20 ? "${battery-icon[EWW_BATTERY.BAT0.status]["20"]}" : EWW_BATTERY.BAT0.capacity >= 10 ? "${battery-icon[EWW_BATTERY.BAT0.status]["10"]}" : "${battery-icon[EWW_BATTERY.BAT0.status]["0"]}"} ${EWW_BATTERY.BAT0.capacity}%" ) ) (defwindow dock :monitor 0 :geometry (geometry :x "0" :y "0" :width "100%" :height "30px" :anchor "bottom center" ) :stacking "fg" :exclusive true (centerbox :class "main" (box :class "left" :halign "start" :space-evenly false (workspaces) (window-title) ) (box :class "middle" :space-evenly false (tray) (time) (notifications) ) (box :class "right" :halign "end" :space-evenly false (battery) ) ) )