aboutsummaryrefslogtreecommitdiff
path: root/installer
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-04-13 00:10:17 -0400
committerCraig Jennings <c@cjennings.net>2026-04-13 00:10:17 -0400
commitbc613e72238f864a597777826d1f9cc533c4cffa (patch)
treee36ec8edf7e7965f99dacfe6b15e9ca75d70e202 /installer
parent9f6c75916cee8cb65b21b71c69f62d080818ad63 (diff)
downloadarchangel-bc613e72238f864a597777826d1f9cc533c4cffa.tar.gz
archangel-bc613e72238f864a597777826d1f9cc533c4cffa.zip
refactor: merge install_base and install_base_btrfs
Extract the pacstrap package list into pacstrap_packages(filesystem) in lib/common.sh (common + filesystem-specific). install_base() now dispatches on FILESYSTEM for both the archzfs-repo-append and the package list. install_base_btrfs() deleted; install_btrfs() call site updated to invoke install_base. Old: 49 + 38 lines of ~95% copy-paste. New: 32 lines + a 20-line pure helper. 7 bats tests cover: zfs has zfs-dkms/zfs-utils, btrfs has btrfs-progs + grub + grub-btrfs + snapper + snap-pac, each flavor excludes the other's specifics, common packages are in both, unknown filesystem returns status 1, output is one-per-line. make test: 65/65.
Diffstat (limited to 'installer')
-rwxr-xr-xinstaller/archangel84
-rw-r--r--installer/lib/common.sh28
2 files changed, 43 insertions, 69 deletions
diff --git a/installer/archangel b/installer/archangel
index 4dc6689..5719d4f 100755
--- a/installer/archangel
+++ b/installer/archangel
@@ -878,84 +878,30 @@ install_base() {
pacman-key --init
pacman-key --populate archlinux
- # Add archzfs repo to pacman.conf for pacstrap
- # SigLevel=Never: pacstrap -K creates empty keyring where key import fails;
- # repo is explicitly added and served over HTTPS, GPG adds no real value here
- if ! grep -q "\[archzfs\]" /etc/pacman.conf; then
- cat >> /etc/pacman.conf << 'EOF'
+ # ZFS needs the archzfs repo added to pacman.conf for pacstrap.
+ # SigLevel=Never: pacstrap -K creates empty keyring where key import
+ # fails; repo is explicitly added and served over HTTPS, GPG adds no
+ # real value here.
+ if [[ "$FILESYSTEM" == "zfs" ]]; then
+ if ! grep -q "\[archzfs\]" /etc/pacman.conf; then
+ cat >> /etc/pacman.conf << 'EOF'
[archzfs]
Server = https://github.com/archzfs/archzfs/releases/download/experimental
SigLevel = Never
EOF
+ fi
+ info "ZFS will be built from source via DKMS - this ensures kernel compatibility."
fi
info "Installing base packages (this takes a while)..."
- info "ZFS will be built from source via DKMS - this ensures kernel compatibility."
- # Use yes to auto-select defaults for provider prompts
- yes "" | pacstrap -K /mnt \
- base \
- base-devel \
- linux-lts \
- linux-lts-headers \
- linux-firmware \
- zfs-dkms \
- zfs-utils \
- efibootmgr \
- networkmanager \
- avahi \
- nss-mdns \
- openssh \
- git \
- vim \
- sudo \
- zsh \
- nodejs \
- npm \
- ttf-dejavu \
- fzf \
- wget \
- inetutils \
- wireless-regdb
- info "Base system installed."
-}
-
-install_base_btrfs() {
- step "Installing Base System (Btrfs)"
+ local packages
+ mapfile -t packages < <(pacstrap_packages "$FILESYSTEM") \
+ || error "Unknown filesystem: $FILESYSTEM"
- info "Updating pacman keys..."
- pacman-key --init
- pacman-key --populate archlinux
-
- info "Installing base packages (this takes a while)..."
- yes "" | pacstrap -K /mnt \
- base \
- base-devel \
- linux-lts \
- linux-lts-headers \
- linux-firmware \
- btrfs-progs \
- grub \
- grub-btrfs \
- efibootmgr \
- snapper \
- snap-pac \
- networkmanager \
- avahi \
- nss-mdns \
- openssh \
- git \
- vim \
- sudo \
- zsh \
- nodejs \
- npm \
- ttf-dejavu \
- fzf \
- wget \
- inetutils \
- wireless-regdb
+ # Use yes to auto-select defaults for provider prompts
+ yes "" | pacstrap -K /mnt "${packages[@]}"
info "Base system installed."
}
@@ -1614,7 +1560,7 @@ install_btrfs() {
mount "${efi_parts[0]}" /mnt/efi
# Install base system
- install_base_btrfs
+ install_base
# Configure system
configure_system
diff --git a/installer/lib/common.sh b/installer/lib/common.sh
index dcaf071..d181e0b 100644
--- a/installer/lib/common.sh
+++ b/installer/lib/common.sh
@@ -57,6 +57,34 @@ require_command() {
}
#############################
+# Package Selection
+#############################
+
+# Print the pacstrap package list for the given filesystem, one per line.
+# Common packages first, then filesystem-specific ones.
+# Returns 1 for unknown filesystem.
+#
+# Usage: mapfile -t pkgs < <(pacstrap_packages zfs)
+pacstrap_packages() {
+ local fs="$1"
+ local common=(
+ base base-devel
+ linux-lts linux-lts-headers linux-firmware
+ efibootmgr
+ networkmanager avahi nss-mdns openssh
+ git vim sudo zsh nodejs npm
+ ttf-dejavu fzf wget inetutils wireless-regdb
+ )
+ local fs_specific
+ case "$fs" in
+ zfs) fs_specific=(zfs-dkms zfs-utils) ;;
+ btrfs) fs_specific=(btrfs-progs grub grub-btrfs snapper snap-pac) ;;
+ *) return 1 ;;
+ esac
+ printf '%s\n' "${common[@]}" "${fs_specific[@]}"
+}
+
+#############################
# Password / Passphrase Input
#############################