diff --git a/.config/waybar/config##hostname.owlenpc00 b/.config/waybar/config##hostname.owlenpc00 index 8f157f8..ecb1497 100644 --- a/.config/waybar/config##hostname.owlenpc00 +++ b/.config/waybar/config##hostname.owlenpc00 @@ -10,6 +10,7 @@ "modules-left": [ "clock", "custom/swaync", + "custom/alhp", "hyprland/window", "hyprland/workspaces" ], @@ -278,5 +279,14 @@ "on-scroll-down": "hyprctl hyprsunset gamma -10", // dimmer "interval": 0 + }, + + "custom/alhp": { + "id": "custom-alhp", + "exec": "$HOME/.config/waybar/scripts/alhp.sh", + "return-type": "json", + "interval": 60, + "tooltip": true, + "format": "{text}", } } diff --git a/.config/waybar/scripts/alhp.sh b/.config/waybar/scripts/alhp.sh new file mode 100755 index 0000000..74f745c --- /dev/null +++ b/.config/waybar/scripts/alhp.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' + +# defaults +text="" +tooltip='All good' +class='good' + +# Check if alhp.utils command exists, if not consider it as down +if ! command -v alhp.utils &> /dev/null; then + tooltip="Service unavailable" + text="" + class="down" +else + ALHP_OUTPUT=$(alhp.utils -j) + mirror_stale=$(jq -r '.mirror_out_of_date' <<<"$ALHP_OUTPUT") + + total=$(jq -r '.total' <<<"$ALHP_OUTPUT") + mirror_stale=$(jq -r '.mirror_out_of_date' <<<"$ALHP_OUTPUT") + + # safe array even if packages is null + readarray -t packages < <( + jq -r '.packages // [] | .[]' <<<"$ALHP_OUTPUT" + ) + + # 1) Mirror stale? highest priority + if [[ "$mirror_stale" == "true" ]]; then + class="stale" + tooltip="Mirror is out of date" + # 2) Any pending PKGBUILDs? + elif (( total > 0 )); then + class="bad" + text="$total" + tooltip=$(printf "%s\n" "${packages[@]}") + fi +fi + +case "$class" in + good) icon=" ";; + stale) icon="󰏖 ";; + bad) icon="󰏗 ";; + down) icon="x ";; +esac + +# Emit compact JSON for Statusbar +jq -nc \ + --arg text "$icon $text" \ + --arg class "$class" \ + --arg tooltip "$tooltip" \ + '{text: $text, class: $class, tooltip: $tooltip}' +