Krolyxon
Commit 4aa7bd9

Branches

Refs →

aurorainstalllib.sh

92 lines · 2.2 KB · Bourne Again Shell (bash)

1# shellcheck shell=bash
2# Shared helpers, sourced by install.sh.
3
4log() {
5 local level="$1"
6 shift
7
8 local color reset='\033[0m'
9 case "$level" in
10 INFO) color='\033[0;34m' ;; # Blue
11 WARN) color='\033[0;33m' ;; # Yellow
12 ERROR) color='\033[0;31m' ;; # Red
13 SUCCESS) color='\033[0;32m' ;; # Green
14 *) color='\033[0m' ;;
15 esac
16
17 printf '%b[%s] [%s]%b %s\n' \
18 "$color" "$(date '+%H:%M:%S')" "$level" "$reset" "$*" >&2
19}
20
21usage() {
22 sed -n '3,19s/^# \{0,1\}//p' "$0"
23}
24
25###################
26## Package lists ##
27###################
28# packages/*.txt: one package per line, '#' comments.
29# A trailing '!' (e.g. "blender !") means: listed, but not pre-selected in the picker.
30
31# All packages in a list
32read_list() {
33 sed 's/#.*//' "$PKG_DIR/$1.txt" | awk 'NF { print $1 }'
34}
35
36# Packages of a list that are pre-selected in the picker
37preselected() {
38 sed 's/#.*//' "$PKG_DIR/$1.txt" | awk 'NF && $2 != "!" { print $1 }'
39}
40
41check_packages() {
42 local listed installed aur
43 listed=$(for f in "$PKG_DIR"/*.txt; do read_list "$(basename "$f" .txt)"; done | sort -u)
44 installed=$(pacman -Qqe | sort -u)
45 aur=$(pacman -Qqm | sort -u)
46
47 echo "Installed explicitly, but not in any packages/*.txt:"
48 comm -23 <(echo "$installed") <(echo "$listed") | while read -r p; do
49 if grep -qx "$p" <<< "$aur"; then echo " $p (aur)"; else echo " $p"; fi
50 done
51
52 echo
53 echo "Listed, but not installed:"
54 comm -13 <(pacman -Qq | sort -u) <(echo "$listed") | sed 's/^/ /'
55}
56
57choose_packages() {
58 local list="$1"
59 gum choose --no-limit \
60 --selected "$(preselected "$list" | paste -sd,)" \
61 $(read_list "$list")
62}
63
64prompt_style() {
65 gum style \
66 --border rounded \
67 --padding "0 1" \
68 "$1"
69}
70
71gum_warn(){
72 gum style --bold --foreground 196 "⚠ $1"
73}
74
75gum_to_array() {
76 local -n arr="$1"
77 mapfile -t arr
78 local cleaned=()
79 for item in "${arr[@]}"; do
80 [[ -n "$item" ]] && cleaned+=("$item")
81 done
82 arr=("${cleaned[@]}")
83}
84
85confirm() {
86 local msg="$1"
87 if ((AUTO_YES)); then
88 log INFO "[auto] $msg → yes"
89 return 0
90 fi
91 gum confirm --default=false "$msg"
92}