Dotfiles/desktopenvs/niri/scripts/workspace

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