aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/dot_config/waybar/executable_pacdiff-status.sh
blob: c9278d23c84c9ccac7af443cb60e3f0f89a9bce2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/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 runs `DIFFPROG='nvim -d' sudo pacdiff` in a floating
# ghostty. DIFFPROG is propagated through sudo-rs by the env_keep policy
# in etc/sudoers-rs (no -E needed — env_keep is unconditional pass-through).

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"