diff options
| author | coasteen <coasteen@proton.me> | 2026-07-09 10:46:52 +0330 |
|---|---|---|
| committer | coasteen <coasteen@proton.me> | 2026-07-09 10:46:52 +0330 |
| commit | a3008666c6c75ff61b1fc329b4d962a6c367d5f0 (patch) | |
| tree | a203a54b3c61884ea13957cf18284f6c83f8e64d /home-configuration/config/waybar/window.sh | |
Diffstat (limited to 'home-configuration/config/waybar/window.sh')
| -rwxr-xr-x | home-configuration/config/waybar/window.sh | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/home-configuration/config/waybar/window.sh b/home-configuration/config/waybar/window.sh new file mode 100755 index 0000000..abf1e39 --- /dev/null +++ b/home-configuration/config/waybar/window.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash + +MAX_TITLE_LEN=20 + +print_status() { + window=$(hyprctl activewindow -j 2>/dev/null) + address=$(jq -r '.address // empty' <<< "$window") + + # No active window → show Desktop + Workspace + if [[ -z "$address" || "$address" == "null" ]]; then + ws=$(hyprctl activeworkspace -j | jq -r '.id') + + top_line="Desktop" + bottom_line="Workspace $ws" + + esc_top=$(sed 's/&/&/g; s/</</g; s/>/>/g' <<< "$top_line") + esc_bottom=$(sed 's/&/&/g; s/</</g; s/>/>/g' <<< "$bottom_line") + + text="<span size='7500' foreground='#a6adc8' rise='-2000'>$esc_top</span> +<span size='9000' weight='bold' foreground='#ffffff'>$esc_bottom</span>" + + jq -nc \ + --arg text "$text" \ + --arg tooltip "$bottom_line" \ + '{ text: $text, class: "custom-window", tooltip: $tooltip }' + return + fi + + class=$(jq -r '.class // "Unknown"' <<< "$window") + title=$(jq -r '.title // ""' <<< "$window") + + app_class="${class,,}" + + # Discord / Vesktop cleanup + if [[ "$app_class" == *discord* || "$app_class" == *vesktop* ]]; then + title=$(sed -E 's/^\([0-9]+\)[[:space:]]*//' <<< "$title") + title=$(sed -E 's/^Discord[[:space:]]*\|[[:space:]]*//' <<< "$title") + fi + + # Truncate title + if (( ${#title} > MAX_TITLE_LEN )); then + title="${title:0:$((MAX_TITLE_LEN-3))}..." + fi + + esc_top=$(sed 's/&/&/g; s/</</g; s/>/>/g' <<< "$class") + esc_bottom=$(sed 's/&/&/g; s/</</g; s/>/>/g' <<< "$title") + + text="<span size='7500' foreground='#a6adc8' rise='-2000'>$esc_top</span> +<span size='9000' weight='bold' foreground='#ffffff'>$esc_bottom</span>" + + tooltip="$class: $title" + + jq -nc \ + --arg text "$text" \ + --arg tooltip "$tooltip" \ + '{ text: $text, class: "custom-window", tooltip: $tooltip }' +} + +# Initial output +print_status + +last="" + +# Update only when state changes +while true; do + current_window=$(hyprctl activewindow -j 2>/dev/null) + current_ws=$(hyprctl activeworkspace -j 2>/dev/null) + + current="$current_window$current_ws" + + if [[ "$current" != "$last" ]]; then + print_status + last="$current" + fi + + sleep 0.5 +done |
