Files
nixos/Droidnix/generated/.config/waybar/scripts/hyprscroll-overflow.sh
T
2026-04-01 19:41:03 +02:00

42 lines
1.4 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# Fallback JSON (hidden)
fallback='{"text":" ","class":"hidden"}'
# Get active workspace ID
active_ws=$(hyprctl activeworkspace -j 2>/dev/null | jq -r '.id') || {
echo "$fallback"
exit 0
}
# Get all clients on the active workspace
clients=$(hyprctl clients -j 2>/dev/null | jq "[.[] | select(.workspace.id==$active_ws)]") || {
echo "$fallback"
exit 0
}
# Count total windows
count=$(echo "$clients" | jq 'length')
# Get monitor geometry for active workspace
monitor=$(hyprctl monitors -j 2>/dev/null | jq -r ".[] | select(.activeWorkspace==$active_ws)")
if [[ -z "$monitor" ]]; then
echo "$fallback"
exit 0
fi
mon_width=$(echo "$monitor" | jq '.width')
mon_height=$(echo "$monitor" | jq '.height')
# Calculate number of windows that are actually visible on screen
# Assume a window is visible if its top-left corner is inside monitor bounds
visible_count=$(echo "$clients" | jq --argjson mw "$mon_width" --argjson mh "$mon_height" '
map(select(
.at[0] >= 0 and .at[0] < $mw and
.at[1] >= 0 and .at[1] < $mh
)) | length
')
# Show fallback if all windows are already visible
if (( count <= visible_count )); then
echo "$fallback"
exit 0
fi
# Build tooltip from window titles (escaped)
tooltip=$(echo "$clients" | jq -r '.[].title' | sed ':a;N;$!ba;s/\n/\\n/g')
# Output JSON for Waybar
echo "{\"text\":\"★ $count\",\"tooltip\":\"$tooltip\",\"class\":\"overflow\"}"