Commit Graph
29 Commits
Author SHA1 Message Date
alvinlollo 1e8a1e3282 fix(ci): Update Qt version to latest
Upstream pin check / quickshell-pin (push) Successful in 46s
Tests / tests (push) Failing after 2m54s
2026-10-08 18:19:34 +11:00
alvinlollo db83549996 feat(gum): Add further additions of gum to install script
Tests / tests (push) Successful in 2m29s
2026-10-08 14:48:20 +11:00
alvinlollo 59d82f06f5 feat(installer): sshd opt-in, gsettings replay, live-medium motd stamp
Tests / tests (push) Successful in 2m50s
- 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.
2026-10-07 21:55:30 +11:00
alvinlollo a6c99b72d0 fix(ci): ensure /dev/fd symlinks exist for mkinitcpio and procsub
Tests / tests (push) Successful in 2m33s
The chroot's /dev only gains fd/stdin/stdout/stderr symlinks at boot, and
container executors often lack them, which breaks mkinitcpio's preset step
(pipes through /dev/stdin) and bash process substitution
("/dev/fd/63: No such file or directory").

- build-iso workflow: create the links in the executor's /dev, then mount a
  fresh devtmpfs and create them there too so the chroot tree is covered
  whether the executor's /dev is devtmpfs or a plain tmpfs
- customize_airootfs.sh: self-heal the same links inside the chroot
2026-10-06 14:53:16 +11:00
alvinlollo c64c64dc97 feat(installer): ask GitHub username first in git screen
Tests / tests (push) Successful in 2m14s
screen_git now prompts GitHub username before git name/email, and the
screen description plus installation summary list SSH before git to
match the new prompt order. Behavior unchanged - prompts are
independent and all assignment sites are read after the screen returns.
2026-10-05 17:42:15 +11:00
alvinlollo bb6f64e977 feat(installer): build-stamp motd, LUKS mode A/B, TPM2, unl0kr, login managers
Tests / tests (push) Failing after 2m33s
- 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
2026-10-05 16:26:12 +11:00
alvinlollo 3b3764573e fix(installer): resolve owner in one chroot call, log ydotool link errors
Tests / tests (push) Failing after 2m28s
Two low-severity review findings on 8501a60:

- owner="$(id -u):$(id -g)" as two substitutions only propagates the
  last status, so a lone id -u failure would build ':1000' and abort at
  the chown with "invalid owner" under the wrong line. Run both ids in
  a single arch-chroot sh -c chained with && and join with paste -sd:;
  pipefail makes any failure abort at the owner= line. Verified both
  paths: existing user yields 1000:1000, missing user trips the ERR
  trap before owner is used.
- the ydotool symlink mkdir/ln wrote stderr to the terminal while the
  failure warn pointed at $LOG, which never recorded it; redirect both
  into the log, matching the bluetooth block.
2026-10-02 17:18:40 +10:00
alvinlollo 8501a60165 fix(installer): chown target files by numeric id, not live-medium name
The end-4 step's chowns ran on the live medium, whose /etc/passwd has
no $USERNAME (the user exists only inside /mnt), so 'chown -R
alvin:alvin' failed with "invalid user" and the ERR trap aborted the
install at line 543. Resolve uid/gid once via arch-chroot id and chown
by number; the three remaining name-based chowns (fork/fish/hypr
restores) would have hit the same wall later.

Replace those three mid-function chowns with one catch-all over the
target home after the last root-side write: sed -i on the presets
rewrites through a temp file, which leaves them root-owned with no
chown after it.

systemctl --user enable ydotool.service could never work inside the
chroot (no /run/user/UID/bus exists before boot; it only ever warned
with "Failed to connect to user scope bus", so ydotool never
autostarted). Write the symlink enable would write:
~/.config/systemd/user/default.target.wants/ydotool.service ->
/usr/lib/systemd/user/ydotool.service.
2026-10-02 17:05:19 +10:00
alvinlollo f3bd10cf0f fix(iso): sweep ii-builder leftovers via NSpid before userdel
Tests / tests (push) Successful in 2m19s
end-4's ./setup sudo keepalive orphans a `sleep 60` child as ii-builder;
userdel then exits 8 and aborts the ISO build (CI exit 8).

Sweep uid-matching processes inside the build chroot before userdel,
mirroring shadow's user_busy_processes() checks (real/effective/saved
uid + root device/inode). Because arch-chroot mounts proc before
`unshare --fork --pid`, /proc entry numbers are outer-namespace pids:
signal the last NSpid field instead, require matching NSpid depth, and
surface kill errors instead of swallowing them. userdel keeps its stderr
and, on final failure, dumps the leftover process list before aborting.
2026-09-27 14:03:47 +10:00
alvinlollo 83ed87f6a9 feat(iso): build end-4 deps in-image, ship end4-pC as default shell
Tests / tests (push) Successful in 2m35s
- 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
2026-09-27 10:31:49 +10:00
alvinlollo 8484bddcf2 fix(installer): parse pkglist name field, skip unresolvable pkgs, keymap confirm
pacstrap failed at line 382 because pkglist lines from pacman -Q are
'name version' and were passed whole as pacman targets (~400 'target
not found'). Parse only the first field, pre-filter against pacman -Slq
so packages missing from the live repos (local-aur) are skipped with a
warning, and fall back to an unfiltered list if pacman -Syy fails.
Keymap screen now offers a US-layout confirm before the gum filter.
2026-09-23 22:32:01 +10:00
alvinlollo 117b5e97aa Add alvin-install TUI installer, fix NetworkManager boot
Tests / tests (push) Successful in 2m23s
- New gum-based installer script (alvin-install) with LUKS encryption,
  nmtui networking, disk selector, user/git config, and CachyOS repo setup
- Replace NetworkManager full unit file with symlink for consistency
- Add alvin-install reference to MOTD
- Add file_permissions entry in profiledef.sh
- Fix localrepo path case in pacman.conf
2026-09-20 22:22:20 +10:00
alvinlollo 50d49bbe38 fix(ci): add PreTransaction hook to ensure /dev/stdin exists inside pacstrap chroot
Tests / tests (push) Successful in 2m31s
2026-09-17 15:58:16 +10:00
alvinlollo c9cf5ead97 Remove conflicting os-release, move branding to profiledef.sh
Tests / tests (push) Successful in 2m30s
2026-09-16 17:13:07 +10:00
alvinlollo d5356b772e Fix custom branding
Tests / tests (push) Successful in 4m18s
2026-09-16 15:44:38 +10:00
alvinlollo 10198915a1 Remove airootfs files that conflict with package installs
Tests / tests (push) Successful in 2m21s
These files exist in the airootfs overlay but are owned by packages
in packages.x86_64, causing 'exists in filesystem' errors during
mkarchiso pacman install:

- usr/lib/os-release (filesystem)
- usr/share/pacman/keyrings/cachyos-* (cachyos-keyring)
- etc/clamav/certs/clamav.crt (clamav)
- etc/skel/.zshrc (grml-zsh-config)
2026-09-15 18:49:59 +10:00
alvinlollo 2eb1e9f61a Switch from systemd-networkd to NetworkManager, add AGENTS.md
Tests / tests (push) Successful in 2m22s
- Replace systemd-networkd/resolved symlinks with NetworkManager
- Remove unused networkd config files (ethernet, wlan, wwan)
- Add AGENTS.md for CI/agent guidance
- Update motd and packages.x86_64
2026-09-15 17:16:50 +10:00
alvinlollo df046dcba2 Add end-4 hyprland dependecies post-install 2026-09-15 15:37:30 +10:00
alvinlollo 94ce80a365 Add zsh config 2026-09-15 15:37:29 +10:00
alvinlollo 7d1a71569b Add starfish for fish 2026-09-15 15:37:28 +10:00
alvinlollo 861cfe8f77 Add end-4 dotfiles config 2026-09-15 15:37:28 +10:00
alvinlollo 2b27267ecf Add fish config 2026-09-15 15:37:27 +10:00
alvinlollo de7d5abe93 Add Bat config 2026-09-15 15:37:27 +10:00
alvinlollo 4006c15796 Add Lazyvim config 2026-09-15 15:37:27 +10:00
alvinlollo 0aa143fe75 Add CachyOS keyrings and AUR packages 2026-09-15 15:37:24 +10:00
alvinlollo 9afaf4f18a Add Australian Locales 2026-09-15 15:37:22 +10:00
alvinlollo a2eebba9a5 Add soft custom branding 2026-09-15 15:37:21 +10:00
alvinlollo ffee0ed8bc Add Packages and Clamav config 2026-09-15 15:37:21 +10:00
alvinlollo 437c7cefa7 Copied default archiso releng configuration 2026-09-15 15:37:19 +10:00