30 lines
1015 B
Bash
Executable File
30 lines
1015 B
Bash
Executable File
#!/bin/bash
|
|
# EWW workspace widget for niri (literal/listen mode).
|
|
# Outputs an eww Yuck literal widget, updates on workspace changes.
|
|
|
|
render() {
|
|
local ws_json
|
|
ws_json=$(niri msg -j workspaces 2>/dev/null) || ws_json="[]"
|
|
|
|
local out="(box :class \"workspaces\" :space-evenly false"
|
|
while IFS= read -r ws; do
|
|
local idx is_active
|
|
idx=$(echo "$ws" | jq -r '.idx')
|
|
is_active=$(echo "$ws" | jq -r '.is_focused')
|
|
local id
|
|
id=$(echo "$ws" | jq -r '.id')
|
|
local class="workspace-button"
|
|
[ "$is_active" = "true" ] && class="workspace-button workspace-active"
|
|
out+=" (button :class \"$class\" :width 20 :onclick \"niri msg action focus-workspace $idx\" \"$idx\")"
|
|
done < <(echo "$ws_json" | jq -c '.[]')
|
|
out+=")"
|
|
echo "$out"
|
|
}
|
|
|
|
render
|
|
|
|
# Watch for workspace changes via event-stream
|
|
niri msg event-stream 2>/dev/null | while IFS= read -r line; do
|
|
echo "$line" | grep -qE '"WorkspacesChanged"|"WorkspaceActivated"' && render
|
|
done
|