#!/bin/sh # Waybar custom/pacdiff: shows count of unresolved .pacnew/.pacsave files. # Source of truth is `pacdiff -o` (output mode — lists differing files, # does nothing). Hidden when zero. Mako fires once when the count goes # from "no problems" to "non-zero" (i.e. on the post-`pacman -Syu` # settle), so you're nudged exactly once per upgrade wave. # # Click handler hands off to a root shell that sets DIFFPROG before # invoking pacdiff (sudo-rs scrubs the env by default, so passing # `DIFFPROG=… sudo pacdiff` or `sudo DIFFPROG=… pacdiff` doesn't # survive — but `sudo sh -c 'DIFFPROG=… pacdiff'` does). set -eu STATE=${XDG_RUNTIME_DIR:-/tmp}/waybar-pacdiff-prev emit_empty() { printf '{"text":"","class":"fresh","tooltip":""}\n' printf 0 >"$STATE" 2>/dev/null || : exit 0 } command -v pacdiff >/dev/null 2>&1 || emit_empty count=$(pacdiff -o 2>/dev/null | grep -c . || :) case "$count" in '' | *[!0-9]*) count=0 ;; esac [ "$count" -eq 0 ] && emit_empty text="pacdiff ${count}" tooltip="${count} unresolved .pacnew/.pacsave file(s) — click to merge with \`nvim -d\`" printf '{"text":"%s","class":"warn","tooltip":"%s"}\n' "$text" "$tooltip" prev=0 if [ -f "$STATE" ]; then prev=$(cat "$STATE" 2>/dev/null || printf 0) case "$prev" in '' | *[!0-9]*) prev=0 ;; esac fi if [ "$prev" -eq 0 ] && [ "$count" -gt 0 ] && command -v notify-send >/dev/null 2>&1; then notify-send \ --app-name=pacdiff \ --urgency=normal \ --icon=text-x-generic \ "Pacman config files need merging" \ "${count} .pacnew/.pacsave file(s). Click the bar entry to run pacdiff." fi printf '%s' "$count" >"$STATE"