<feed xmlns='http://www.w3.org/2005/Atom'>
<title>archsetup/scripts/testing/lib, branch v0.5</title>
<subtitle>Builds a full dev workstation from a bare Arch Linux install.
</subtitle>
<id>https://git.cjennings.net/archsetup/atom?h=v0.5</id>
<link rel='self' href='https://git.cjennings.net/archsetup/atom?h=v0.5'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/'/>
<updated>2026-01-27T23:22:55+00:00</updated>
<entry>
<title>feat(testing): rewrite test infrastructure from libvirt to direct QEMU</title>
<updated>2026-01-27T23:22:55+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-27T23:22:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=70bb2d5ab1bf6787bc613e33f5398be2eca1f5fd'/>
<id>urn:sha1:70bb2d5ab1bf6787bc613e33f5398be2eca1f5fd</id>
<content type='text'>
Replace the never-fully-operational libvirt-based VM test infrastructure
with direct QEMU management and archangel ISO for fully automated,
unattended base VM creation.

Key changes:
- vm-utils.sh: complete rewrite — QEMU process mgmt via PID file,
  monitor socket for graceful shutdown, qemu-img snapshots, SSH
  port forwarding (localhost:2222)
- create-base-vm.sh: boots archangel ISO, SSHs in, runs unattended
  install via config file, verifies, creates clean-install snapshot
- run-test.sh: snapshot revert, git bundle transfer, detached archsetup
  execution with setsid, polling, validation, and report generation
- debug-vm.sh: CoW overlay disk, GTK display, auto-cleanup on close
- setup-testing-env.sh: reduced deps to qemu-full/sshpass/edk2-ovmf/socat
- cleanup-tests.sh: PID-based process management, orphan detection
- validation.sh: port-based SSH (backward compatible), fuzzel/foot for
  Hyprland, corrected package list paths
- network-diagnostics.sh: getent/curl instead of nslookup/ping (SLIRP)

New files:
- archsetup-test.conf: archangel config for base VM (btrfs, no encrypt)
- archsetup-vm.conf: archsetup config for unattended test execution
- assets/archangel.conf.example: reference archangel config

Deleted:
- finalize-base-vm.sh: merged into create-base-vm.sh
- archinstall-config.json: replaced by archangel .conf format

Tested: full end-to-end run — 51 validations passed, 0 failures.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>refactor(dotfiles): rename system/ to common/ and remove unused configs</title>
<updated>2026-01-26T23:36:38+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-26T23:36:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=dada2f255daaa2fb493ec8c7d47e2a8123aea494'/>
<id>urn:sha1:dada2f255daaa2fb493ec8c7d47e2a8123aea494</id>
<content type='text'>
Rename dotfiles/system to dotfiles/common for clarity - indicates
shared dotfiles used across all desktop environments (DWM, Hyprland).

Removed config directories for uninstalled applications:
- ghostty (using different terminal)
- lf (using ranger instead)
- mopidy (using mpd instead)
- nitrogen (X11-only, obsolete for Wayland)
- pychess (not installed)
- JetBrains (not installed via archsetup)
- youtube-dl (using yt-dlp with different config location)

Kept audacious config for potential future use.

Updated all references in archsetup, CLAUDE.md, todo.org, and
validation.sh.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(archsetup): add Hyprland/Wayland desktop environment support</title>
<updated>2026-01-25T00:37:14+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-25T00:37:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=6ce385c2be62492d43ef90b9525d38edc7cd8190'/>
<id>urn:sha1:6ce385c2be62492d43ef90b9525d38edc7cd8190</id>
<content type='text'>
- Add DESKTOP_ENV config variable (dwm/hyprland/none, default: hyprland)
- Create wayland() and hyprland() installation functions
- Add display_server/window_manager conditional step wrappers
- Create dotfiles/hyprland/ with full config suite:
  - hyprland.conf with keybindings translated from DWM + sxhkd
  - waybar config matching conky status bar
  - hypridle/hyprlock for screen locking
  - wofi config matching rofi theme
  - gammastep config for Wayland (replaces redshift)
- Add Hyprland validation tests to validation.sh
- Update archsetup.conf.example with DESKTOP_ENV option
</content>
</entry>
<entry>
<title>fix(testing): relax UFW tests for VM environment</title>
<updated>2026-01-24T20:51:15+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-24T20:51:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=91725992d61dba7c52b5019d02d9008cd4bd6f81'/>
<id>urn:sha1:91725992d61dba7c52b5019d02d9008cd4bd6f81</id>
<content type='text'>
VM lacks iptables kernel modules so UFW cannot activate. Tests now only
verify UFW is enabled rather than active.
</content>
</entry>
<entry>
<title>fix(archsetup): add system config improvements and gnome-keyring setup</title>
<updated>2026-01-22T16:00:23+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-22T16:00:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=99d487cef4fa6857db8a43209ad2cb727a6f1161'/>
<id>urn:sha1:99d487cef4fa6857db8a43209ad2cb727a6f1161</id>
<content type='text'>
- Enable chrony service and create /etc/sysconfig/chronyd to suppress warning
- Configure wireless regulatory domain (US) for full WiFi capabilities
- Configure paccache to retain 3 package versions
- Pre-create gnome-keyring with 'login' default (auto-unlocks at login)
- Add rtkit package for pipewire realtime scheduling
- Add validation test for gnome-keyring setup
- Add system action .desktop files (logout, shutdown, reboot, suspend, lock)
</content>
</entry>
<entry>
<title>fix(archsetup): increase GRUB timeout and switch syncthing to user service</title>
<updated>2026-01-21T19:30:47+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-21T19:30:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=c16e5f9c3a92df53aa759df660f4af1199205f2a'/>
<id>urn:sha1:c16e5f9c3a92df53aa759df660f4af1199205f2a</id>
<content type='text'>
- GRUB_TIMEOUT 0→2 seconds for menu access
- Syncthing: system service → user service with lingering to prevent lock conflicts
- Update airplanemodetoggle for user service
- Update validation to check lingering instead of system service
</content>
</entry>
<entry>
<title>fix(archsetup): prevent ZFS boot failures and add validation tests</title>
<updated>2026-01-20T19:48:18+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-20T19:48:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=b91beda6f56a0da95db8a41f0123abe82acdfeb4'/>
<id>urn:sha1:b91beda6f56a0da95db8a41f0123abe82acdfeb4</id>
<content type='text'>
- Skip udev→systemd hook change on ZFS systems (ZFS hook is busybox-based)
- Add nvme to MODULES for NVMe systems (ensures devices ready for ZFS import)
- Add random.trust_cpu=off to suppress AMD RDSEED warnings
- Add has_nvme_drives() detection function

New validation tests:
- validate_terminus_font: check package installed via pacman
- validate_mkinitcpio_hooks: verify ZFS uses udev not systemd
- validate_initramfs_consolefont: check font in initramfs
- validate_nvme_module: check nvme in MODULES for NVMe systems
</content>
</entry>
<entry>
<title>feat(testing): add bare metal ZFS test script + fix scrub timer check</title>
<updated>2026-01-20T12:52:36+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-20T12:52:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=a21f2007a11000b578596057048616a50ed0431e'/>
<id>urn:sha1:a21f2007a11000b578596057048616a50ed0431e</id>
<content type='text'>
Add run-test-baremetal.sh for testing on physical ZFS systems:
- SSH to target host and run archsetup
- Support for ZFS genesis snapshot rollback
- Validate-only mode for existing installs
- Same validation checks as VM tests

Fix grep -c multi-line output issue in ZFS scrub timer check.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix(testing): add emacs config permission check</title>
<updated>2026-01-20T12:19:20+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-20T12:19:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=2b696749af25b43a88ccc56111ed17eb73d162ca'/>
<id>urn:sha1:2b696749af25b43a88ccc56111ed17eb73d162ca</id>
<content type='text'>
Verify .emacs.d directory is readable by user cjennings,
not just that it exists.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix(testing): fix validation script bugs causing false failures</title>
<updated>2026-01-20T11:48:21+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-20T11:48:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=e084842c15ed4ba2ff5e80bf86f4b95035da1aae'/>
<id>urn:sha1:e084842c15ed4ba2ff5e80bf86f4b95035da1aae</id>
<content type='text'>
- Add || true to arithmetic increments (set -e exits on ((0++)))
- Fix grep -c multi-file output parsing with tr and defaults
- Add fallback UFW check via systemctl when ufw status fails
- Add dbus-broker timing error to benign patterns (geoclue)
- Use grep -h | wc -l for error counting across multiple log files

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
