Section 6 'Always-installed packages': ALWAYS_PACKAGES array, one line per
category (first: Terminals with ghostty + ghostty-bash-completion). Every
entry installs on every run, no questions. Add a category by adding a line.
Section 7 'Advanced optional tools': menu-driven picker, data-driven —
ADV_CATEGORIES + ADV_<Category> arrays ('id:Label:pkgs...'). Ships
Virtualisation (qemu/kvm stack, VirtualBox) and Browsers (firefox,
chromium, google-chrome, brave; the latter two wire up their repos
automatically). Multi-select with comma-separated picks, invalid picks
warned and skipped, 'x' backs out, menu is skipped under --yes so
unattended runs never hang.
Bugs found by harness testing and fixed before shipping:
- ${!var} on an array name yields only element[0]: Browsers listed one
entry. Now uses a nameref (declare -n).
- var assignment was lost in an edit: unbound-variable crash on the menu.
- --snapper=no was overwritten by the interactive default; explicit flags
now always win.
Root cause of the VM failures (both qemu-kvm AND VirtualBox showed 'No
match for argument: <entire list>'): picks were resolved into ONE quoted
string and passed to dnf as a single argument, so dnf searched for a
package literally named 'qemu-kvm libvirt virt-install ...'. Picks are
now word-split into separate package arguments.
Also, a failing install no longer kills the script (set -e abort): the
menu prints a red 'Installation failed' warning, notes the system is
unchanged, and drops back to the menu so another choice can be made.
Proven in harness: VBox failure (no match) followed by successful qemu
install in the same session, exit 0.
yuri
merged commit fceeb57254 into main2026-10-27 13:57:40 +01:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Section 6 (always): ALWAYS_PACKAGES array, per-category lines — starts with Terminals (ghostty + bash completion). Add a line, get a category.
Section 7 (advanced menu): data-driven picker (ADV_CATEGORIES + ADV_ arrays). Ships Virtualisation (qemu/kvm + VirtualBox) and Browsers (firefox, chromium, google-chrome, brave — last two wire their repos). Multi-select, invalid-pick tolerance, back-navigation, skipped under --yes.
Three bugs caught by harness testing pre-ship: ${!var} array truncation (nameref fix), unbound var, --snapper=no being overridden.
Section 6 'Always-installed packages': ALWAYS_PACKAGES array, one line per category (first: Terminals with ghostty + ghostty-bash-completion). Every entry installs on every run, no questions. Add a category by adding a line. Section 7 'Advanced optional tools': menu-driven picker, data-driven — ADV_CATEGORIES + ADV_<Category> arrays ('id:Label:pkgs...'). Ships Virtualisation (qemu/kvm stack, VirtualBox) and Browsers (firefox, chromium, google-chrome, brave; the latter two wire up their repos automatically). Multi-select with comma-separated picks, invalid picks warned and skipped, 'x' backs out, menu is skipped under --yes so unattended runs never hang. Bugs found by harness testing and fixed before shipping: - ${!var} on an array name yields only element[0]: Browsers listed one entry. Now uses a nameref (declare -n). - var assignment was lost in an edit: unbound-variable crash on the menu. - --snapper=no was overwritten by the interactive default; explicit flags now always win.