virt-manager on niri/Noctalia failed with 'authentication unavailable:
no polkit agent available to authenticate action org.libvirt.unix.manage'
- bare compositors ship no polkit agent, unlike GNOME/KDE.
Two fixes:
- install_session_prereqs installs polkit-gnome and wires its agent
.desktop into /etc/xdg/autostart (paths overridable for testing).
- niri module optionally installs the qemu/libvirt stack, enables
libvirtd, and adds the user to the libvirt group: members manage
qemu:///system with no polkit prompt at all (the real fix; applies
after re-login).
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.
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.
- On btrfs, snapshots + zstd compression now just happen (no prompt);
--snapper=no remains the explicit opt-out.
- Vendor scripts/snapper-*.sh + config/snapper.actions from
SysGuides/sysguides-snapper-fedora (MIT, upstream 0a28eb4) into
vendor/snapper/ and install from there — no runtime clone of an
external repo, and no dependency on exec bits (fixes the
'./install.sh: Permission denied' failure seen on the test VM).
- grub-btrfs still cloned at runtime from Antynea/grub-btrfs with the
Fedora config applied; everything else is local now.
New modules/user/dotfiles.sh behind a menu question ('Clone personal
dotfiles?', default no) and --dotfiles=yes|no flag.
Does a --bare clone of yuri/fedora-dots into ~/.cfg.git, checks the repo
out into $HOME with status.showUntrackedFiles=no, and handles an empty
repo gracefully (configures the alias, skips checkout). Existing
~/.cfg.git is left untouched (idempotent).
Fix proven in the harness: the module originally used a plain git clone,
which creates a working copy and breaks the git-dir alias — the same
failure YuKu hit manually; --bare is required.
Dispatch runs the dotfiles module before DE/TWM so configs are in place
when sessions are installed.
noctalia 5.3.0 is in the Fedora 44 updates repo (confirmed on
packages.fedoraproject.org and by a fresh-install dnf install noctalia).
The niri module no longer calls add_terra_repo; Terra stays in the base
section and in the mango module, which is the only consumer left
(mangowc). README + comments updated.
New section between base and DE menus:
- 'Disable SELinux permanently?' — default no; writes SELINUX=disabled with a
backup, warns about the security tradeoff.
- When / is btrfs: 'snapper + grub-btrfs + compression?' — default yes. Shows
subvolume list + fstab, appends ,compress=zstd:1 to btrfs fstab entries that
lack a compress= option (idempotent, fstab backed up), then runs the
SysGuides sysguides-snapper-fedora installer (snapper root+home, grub-btrfs,
DNF5 pre/post snapshot actions).
- Flags for unattended runs: --selinux=keep|disabled, --snapper=yes|no.
- Fix found by the harness: the flag initializers sat after the arg loop and
wiped parsed values; --snapper=no was silently ignored. Initializers moved
before the loop.
README + section renumbering updated.
On F44, 'dnf copr enable solopasha/hyprland' fails with 'Chroot not found':
verified via the Copr API, solopasha is rawhide-only right now. lionheartp/
Hyprland (solopasha fork, also ships noctalia packages) and hermitfeather/
hyprland both have fedora-44 chroots.
The module now tries lionheartp, hermitfeather, then solopasha, and aborts
with an actionable message if none has a chroot for this release. README
updated to name the chain, not a single repo.
- Terra repo is added right after RPM Fusion in the base setup (it carries
noctalia + mangowc). Modules keep calling add_terra_repo so they still
work standalone; it is a no-op when terra-release is present.
- Hyprland was retired from the Fedora repos after F42 (dependency churn);
the module could never resolve 'hyprland' on F44. It now enables the
solopasha/hyprland COPR first — the de facto standard for F43/44 — and
treats the accessory packages (hyprpaper/hyprlock/waybar/mako/wofi/
xwayland-satellite) as optional so a name drift warns instead of aborting.
- README updated.
- XFCE module installs/enables sddm instead of lightdm; one greeter across
every session choice, no lightdm left anywhere.
- Interactive menus now default to 'none' for both DE and TWM (press Enter
for no DE / no TWM). none+none is still refused by the existing guard.
- README and session.sh comments updated to match.
The corrections commit replaced the lib/+modules/ entrypoint with the
older single-file version, reintroducing the DEBUG_MODE unbound-variable
crash, the unguarded clear, and TWM dispatch pointing at nonexistent
root-level scripts. lib/ and modules/ were orphaned.
Restores the tested restructured setup.sh + the SC2034 fix in lib/common.sh.
Splits setup.sh into lib/common.sh, lib/session.sh and seven modules
(3 DE, 4 TWM). Targets a bare Fedora 44+ install.
Fixes carried over from the first build:
- DEBUG_MODE was unbound under set -u, aborting the script at the version banner
- mangled 'echohttps://...' line left over from the starburst split
- set -e was missing entirely; --debug flag parsing restored
- unguarded 'clear' aborted the run without TERM
- $PRETTY_NAME unguarded under set -u
- modules were sourced, leaking shell options into the parent
- Flathub added twice (system-wide + per-user)
- no dnf5-plugins check before using 'dnf config-manager'
- no Fedora release gate
- /usr/share/xsessions assumed to exist when writing session entries