Commit a144666
Eric Bower
·
2026-07-01 23:39:34 -0400 EDT
parent 9444a16
refactor: abstract fns and shellcheck
1 files changed,
+36,
-23
M
bin/pacm
M
bin/pacm
+36,
-23
1@@ -1,38 +1,51 @@
2 #!/usr/bin/env bash
3 set -euo pipefail
4
5-case "${1:-}" in
6-list)
7- if test -z "${2:-}"; then
8- pacman -Qqen
9- else
10- pacman -Qqen >"${2}"
11+PKGFILE="${2:-$HOME/.config/pacm/pkgfile.txt}"
12+
13+usage() {
14+ echo "usage: pacm [init|edit|install|clean|sync] [pkgfile]" >&2
15+}
16+
17+must_pkgfile() {
18+ if ! test -e "$PKGFILE"; then
19+ usage
20+ echo "must provide pkgfile at $HOME/.config/pacm/pkgfile.txt or as an argument" >&2
21+ exit 1
22 fi
23+}
24+
25+do_install() {
26+ xargs -a "$PKGFILE" sudo pacman -S --needed
27+}
28+
29+do_clean() {
30+ comm -23 <(pacman -Qqn | sort) <(sort "$PKGFILE") | xargs -r sudo pacman -Rsu
31+}
32+
33+case "${1:-}" in
34+init)
35+ pacman -Qqen >"$PKGFILE"
36+ ;;
37+edit)
38+ must_pkgfile
39+ "$EDITOR" "$PKGFILE"
40 ;;
41 install)
42- if test -z "${2:-}"; then
43- echo "must provide pacman file to install deps" >&2
44- exit 1
45- fi
46- sudo pacman -S --needed - <"$2"
47+ must_pkgfile
48+ do_install
49 ;;
50 clean)
51- if test -z "${2:-}"; then
52- echo "must provide pacman file to remove deps not in list" >&2
53- exit 1
54- fi
55- sudo pacman -Rsu $(comm -23 <(pacman -Qqn | sort) <(sort "$2"))
56+ must_pkgfile
57+ do_clean
58 ;;
59 sync)
60- if test -z "${2:-}"; then
61- echo "must provide pacman file to remove deps not in list" >&2
62- exit 1
63- fi
64- "$0" clean "$2"
65- "$0" install "$2"
66+ must_pkgfile
67+ do_clean
68+ do_install
69 ;;
70 *)
71- echo "usage: pacm [list|install|clean|sync] [pkgfile]" >&2
72+ usage
73 exit 1
74 ;;
75 esac