Commit a144666

Eric Bower  ·  2026-07-01 23:39:34 -0400 EDT
parent 9444a16
refactor: abstract fns and shellcheck
1 files changed,  +36, -23
+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