34 lines
1021 B
Bash
34 lines
1021 B
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
# Fallback output
|
|
fallback='{"text":" ","class":"hidden"}'
|
|
# Get active workspace
|
|
active_ws=$(hyprctl activeworkspace -j 2>/dev/null | jq -r '.id' 2>/dev/null) || {
|
|
echo "$fallback"
|
|
exit 0
|
|
}
|
|
# Get workspace info
|
|
ws=$(hyprctl workspaces -j 2>/dev/null | jq ".[] | select(.id==$active_ws)" 2>/dev/null) || {
|
|
echo "$fallback"
|
|
exit 0
|
|
}
|
|
# Layout
|
|
layout=$(echo "$ws" | jq -r '.layout // "unknown"' 2>/dev/null)
|
|
# Clients
|
|
clients=$(hyprctl clients -j 2>/dev/null | jq "[.[] | select(.workspace.id==$active_ws)]" 2>/dev/null) || {
|
|
echo "$fallback"
|
|
exit 0
|
|
}
|
|
count=$(echo "$clients" | jq 'length' 2>/dev/null)
|
|
# In scrolling layout, only 1 is visible
|
|
visible=1
|
|
# Conditions
|
|
if [[ "$layout" != "scrolling" ]] || (( count <= visible )); then
|
|
echo "$fallback"
|
|
exit 0
|
|
fi
|
|
# Tooltip (safe escaping)
|
|
tooltip=$(echo "$clients" | jq -r '.[].title' 2>/dev/null | sed ':a;N;$!ba;s/\n/\\n/g')
|
|
# Final output
|
|
echo "{\"text\":\"★ $count\",\"tooltip\":\"$tooltip\",\"class\":\"overflow\"}"
|