- offer_chroot(): optional arch-chroot shell into the still-mounted target,
from install_cleanup() on success and from the EXIT trap when a step fails
after pacstrap (TARGET_INSTALLED flag); temp NOPASSWD sudoers drop-ins are
always removed before the shell is opened.
- INT/TERM handler re-exits with 128+N: without it bash runs the EXIT trap
with $? = 0 for a signal-killed shell and the rc != 0 test would skip the
offer. A signal during teardown only aborts the prompt (first) so the
unmount still runs; a second forces the exit.
- cleanup(): report a failed umount -R / cryptsetup close instead of hiding
stderr, so a repair shell leaving busy mounts is visible before reboot.
- Document the flow in AGENTS.md.
unl0kr already prompts for the LUKS passphrase on screen, so a login
manager on top of it would be a second prompt. The login screen now only
collects a fallback (none/greetd/sddm/gdm) when unl0kr is selected;
resolve_login_manager applies it only when install_unl0kr falls back to
the systemd initramfs, and the summary shows both states.
Also ships /etc/unl0kr.conf (breezy-dark) plus the empty
/usr/share/unl0kr/unl0kr.conf the package omits so unl0kr stops warning
about an unparseable config, and pins Hyprland in the user's
AccountsService record so gdm autologin does not fall back to
gnome.desktop.
- alvin-install: new sshd screen (default on) + install step. openssh is
guaranteed into the pacstrap list when requested, and the final banner
reports whether the enable actually succeeded (SSHD_APPLIED) instead of
what was selected. The prompt warns that password login uses the same
password as LUKS, and only mentions the GitHub key import when a
username was given.
- alvin-install: replay the `gsettings set` commands end-4 logged during
its setup run with a clean env and a throwaway session bus as the target
user, then read each key back in a second session to confirm it persisted
(gvariant_unescape normalizes both '...' and "..." GVariant output). The
venv check now walks the uv bin/python symlink chain, re-rooting
absolute hops under $TARGET, since that link dangles on the live medium.
- build: append the build stamp to the live /etc/motd (keeps the installed
system's motd untouched) and drop alvin-install's install_motd step.
- docs: installer sections in README/AGENTS.md, sshd notes, corrected line
counts.
- profiledef.sh stages airootfs/root/.iso-build-stamp (git/CI gated, falls
back to 'commit unknown'); customize_airootfs.sh installs it as
/etc/alvin-build-stamp; install_motd appends it to the target /etc/motd
- alvin-install: skippable git/GitHub screens with ssh-import-id import
(yay build + python-distro, curl .keys fallback), LUKS Mode A (systemd
sd-encrypt + rd.luks.name) vs Mode B (unl0kr + cryptdevice), TPM2
enrollment via $PASSWORD with rd.luks.options activation, unl0kr
build/verify with Mode-A fallback, login manager none/greetd/sddm/gdm
(enable DM before disabling getty@tty1), autologin per DM (forced off
when TPM enrolled), build-stamp motd; includes the existing
GRUB_DISABLE_BOOTNEXT grub tweak
- review fixes: greetd autologin TOML quoting, .ssh chowned before
ssh-import-id, builtin-aware initramfs module verification across all
installed kernels, curl exit-code split (fetch failure vs no keys),
plain Hyprland on every login path
- add curl to packages.x86_64; document stamp flow and installer in
AGENTS.md/README.md
- customize_airootfs.sh stages dots-hyprland at /opt, runs ./setup
install-deps as a throwaway builder, harvests the built packages into
/opt/localrepo so pacstrap resolves them offline
- image ships its own [local-aur] (file:///opt/localrepo); CI and
localrepo/update.sh keep that copy in sync; .gitignore covers work/,
out/ and airootfs/opt/localrepo/
- alvin-install runs ./setup install --skip-alldeps on the target
- clone pctrade/end4-pC into /etc/skel/.config/quickshell, patch qsConfig
ii -> end4-pC in the staged variables.lua (guarded + idempotent), and
restore the fork after setup rsync --delete's ~/.config/quickshell
- ship user presets in skel, point fish `q` alias at end4-pC
- AGENTS.md: document the fourth package source and new gotchas