moonarch/defaults/bin/moonarch-waybar-updates
nevaforget 8ddbb23851
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
feat: add waybar module for package update notifications
Add moonarch-waybar-updates script that checks for available updates
from both official repos (checkupdates) and AUR (paru -Qua). Uses a
cache mechanism to avoid excessive mirror hits while still detecting
freshly installed updates within 60 seconds.
2026-04-09 10:54:49 +02:00

69 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/bash
# ABOUTME: Waybar module that checks for available package updates with caching.
# ABOUTME: Combines pacman repo updates (checkupdates) and AUR updates (paru -Qua).
CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/moonarch"
CACHE_FILE="$CACHE_DIR/waybar-updates"
PACMAN_DB="/var/lib/pacman/local"
MAX_AGE=3600
mkdir -p "$CACHE_DIR"
needs_refresh() {
# No cache yet
[[ ! -f "$CACHE_FILE" ]] && return 0
# Pacman DB changed since last check (update was installed)
[[ "$PACMAN_DB" -nt "$CACHE_FILE" ]] && return 0
# Cache older than MAX_AGE
local age=$(( $(date +%s) - $(stat -c %Y "$CACHE_FILE") ))
[[ "$age" -ge "$MAX_AGE" ]] && return 0
return 1
}
if needs_refresh; then
repo_updates=$(checkupdates 2>/dev/null)
repo_count=0
if [[ -n "$repo_updates" ]]; then
repo_count=$(echo "$repo_updates" | wc -l)
fi
aur_updates=""
aur_count=0
if command -v paru &>/dev/null; then
aur_updates=$(paru -Qua 2>/dev/null)
if [[ -n "$aur_updates" ]]; then
aur_count=$(echo "$aur_updates" | wc -l)
fi
fi
total=$((repo_count + aur_count))
if [[ "$total" -eq 0 ]]; then
echo "" > "$CACHE_FILE"
exit 0
fi
# Build tooltip with package lists
tooltip=""
if [[ -n "$repo_updates" ]]; then
tooltip+="Repo ($repo_count):"$'\n'"$repo_updates"
fi
if [[ -n "$aur_updates" ]]; then
[[ -n "$tooltip" ]] && tooltip+=$'\n\n'
tooltip+="AUR ($aur_count):"$'\n'"$aur_updates"
fi
jq --compact-output -n \
--arg text "$total" \
--arg alt "has-updates" \
--arg tooltip "$tooltip" \
--arg class "has-updates" \
'{text: $text, alt: $alt, tooltip: $tooltip, class: $class}' > "$CACHE_FILE"
fi
# Output cached result (empty cache = no updates = module hidden)
cat "$CACHE_FILE"