All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
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.
69 lines
1.8 KiB
Bash
Executable File
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"
|