diff options
Diffstat (limited to 'justfile')
| -rw-r--r-- | justfile | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -179,6 +179,48 @@ services-drift: # ═══════════════════════════════════════════════════════════════════ +# System config (/etc) +# ═══════════════════════════════════════════════════════════════════ + +# Show /etc drift: package configs modified from defaults, plus user-created files +etc-drift: + #!/usr/bin/env bash + set -eo pipefail + tmp=$(mktemp -d); trap 'rm -rf "$tmp"' EXIT + + find etc -type f ! -name .ignore 2>/dev/null \ + | sed 's|^etc/|/etc/|' | sort -u > "$tmp/managed" + + patterns=() + if [ -f etc/.ignore ]; then + while IFS= read -r line; do + [[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue + patterns+=("$line") + done < etc/.ignore + fi + + keep() { + local path=$1 + grep -qxF "$path" "$tmp/managed" && return 1 + for pat in ${patterns[@]+"${patterns[@]}"}; do + [[ "$path" == $pat ]] && return 1 + done + return 0 + } + + echo "=== /etc drift ===" + echo "--- modified package configs ---" + pacman -Qii 2>/dev/null | grep -oP 'MODIFIED\t\K/\S+' | sort -u \ + | while IFS= read -r p; do keep "$p" && echo " modified: $p"; done + + echo "--- user-created (no owning package) ---" + find /etc -xdev -type f -print0 2>/dev/null \ + | xargs -0 pacman -Qo 2>&1 >/dev/null \ + | sed -n 's/^error: No package owns //p' | sort -u \ + | while IFS= read -r p; do keep "$p" && echo " unowned: $p"; done + + +# ═══════════════════════════════════════════════════════════════════ # Package management # ═══════════════════════════════════════════════════════════════════ |
