blob: d97a2dc9d46c803e7b96aa0e53c5599fc761c2c3 (
plain)
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
|
#!/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
}
|