summaryrefslogtreecommitdiff
path: root/dotfiles
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2025-10-16 14:30:41 -0500
committerCraig Jennings <c@cjennings.net>2025-10-16 14:30:41 -0500
commitff201c3192a7f63d00995b7eee190bd39b4fe864 (patch)
treece016056c812b70c3e9fa00ed92c33e4f102d21e /dotfiles
parentfec42e5a3d27717cce8308d7a014b35061d2b868 (diff)
added downgrade function
- select installed package to downgrade via fzf - hands off to sudo downgrade
Diffstat (limited to 'dotfiles')
-rwxr-xr-xdotfiles/system/.profile.d/arch-linux-downgrade.sh50
1 files changed, 50 insertions, 0 deletions
diff --git a/dotfiles/system/.profile.d/arch-linux-downgrade.sh b/dotfiles/system/.profile.d/arch-linux-downgrade.sh
new file mode 100755
index 0000000..d97a2dc
--- /dev/null
+++ b/dotfiles/system/.profile.d/arch-linux-downgrade.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+# arch-linux-downgrade.sh
+# Craig Jennings <c@cjennings.net>
+# Downgrade an explicitly installed Arch package, chosen via fzf.
+
+# Config:
+# export DG_HELPER=pacman # or yay, paru, etc. Must support -Qe, -Qi, -Si
+# export DG_FZF_OPTS="..." # optional extra fzf flags
+
+dg() {
+ emulate -L zsh
+ set -u
+ set -o pipefail
+
+ local helper="${DG_HELPER:-pacman}"
+
+ # Check dependencies
+ for cmd in "$helper" fzf sudo downgrade awk sort; do
+ if ! command -v "${cmd%% *}" >/dev/null 2>&1; then
+ print -u2 -- "Missing dependency: $cmd"
+ return 1
+ fi
+ done
+
+ # List explicitly installed packages
+ local selection
+ selection="$(
+ "$helper" -Qe 2>/dev/null \
+ | fzf --no-multi \
+ --prompt="Pick package to downgrade > " \
+ --height=80% \
+ --reverse \
+ --delimiter=' ' \
+ --preview-window=right:60%:wrap \
+ --preview "$helper -Qi {1} 2>/dev/null || $helper -Si {1}" \
+ ${DG_FZF_OPTS:-}
+ )"
+
+ # If fzf or pacman fails, just return
+ [[ $? -ne 0 || -z "$selection" ]] && return 0
+
+ local pkg
+ pkg="$(print -r -- "$selection" | head -n1 | awk '{print $1}')"
+
+ if ! sudo downgrade "$pkg"; then
+ print -u2 -- "Downgrade failed for $pkg"
+ return 1
+ fi
+}