<feed xmlns='http://www.w3.org/2005/Atom'>
<title>archsetup/archsetup.conf.example, branch main</title>
<subtitle>Builds a full dev workstation from a bare Arch Linux install.
</subtitle>
<id>https://git.cjennings.net/archsetup/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/archsetup/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/'/>
<updated>2026-07-24T17:19:04+00:00</updated>
<entry>
<title>fix(installer): eight fixes from an overnight bug-hunt and its review</title>
<updated>2026-07-24T17:19:04+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-24T17:19:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=3becfac66dc569e71d0f6085fb56e92cfa6d626a'/>
<id>urn:sha1:3becfac66dc569e71d0f6085fb56e92cfa6d626a</id>
<content type='text'>
I squashed these because the per-bug reasoning lives in todo.org, which this commit carries.

Two could cost a machine. configure_initramfs_hook swapped the udev hook for systemd on a LUKS root, leaving a standalone encrypt hook under an init that never runs it. The rebuild succeeds and the installer exits clean, then the root won't unlock at the next boot. trim_firmware ran pacman -Rdd against twelve firmware packages behind a DMI gate reading product_name, where "Framework" never appears. That left it dead on the hardware it targets, and dangerous to fix the obvious way: this machine is a Framework Desktop whose Ryzen iGPU needs the amdgpu firmware. It refuses on PCI modalias evidence now.

wipedisk discarded before it checked. blkdiscard ran with -f, which disables the exclusive open, so picking the wrong disk destroyed a live filesystem and then reported that nothing had happened.

Four more are smaller. The NVIDIA preflight aborted dwm and headless installs over a driver floor they never need. zfs-replicate exited 0 after every dataset failed. Unattended installs blocked on two prompts, and the first fix for that inherited a [Y/n] default into passwordless console login. A fresh install left the dotfiles repo permanently dirty.

The review found a pattern worth more than any single fix. Helpers had thorough tests and none proved they were called. Deleting the call left five suites green, including the guard on that pacman -Rdd. CALL_SITES now pins nine caller/callee pairs.

The suite runs 341 tests at exit 0, with no new shellcheck findings. I proved every guard by deleting it and watching the intended test go red.
</content>
</entry>
<entry>
<title>chore: open-source release-prep (udev flag, SPDX headers, boolean style)</title>
<updated>2026-06-24T23:44:29+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-24T23:44:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=934bbf398729b261ac4f75641a5900f4e2f42a7d'/>
<id>urn:sha1:934bbf398729b261ac4f75641a5900f4e2f42a7d</id>
<content type='text'>
Three release cleanups, all behavior-preserving for my machines:

- Gated the Logitech BRIO udev rule behind INSTALL_DEVICE_UDEV_RULES (default yes, opt-out), so the device-specific rule is off for anyone without that hardware. Added the config read, validation, and a conf.example entry.
- Added a GPL-3.0-or-later SPDX-License-Identifier header after the shebang of all 24 shell scripts in the repo.
- Standardized boolean conditionals on the explicit [ "$var" = "true" ] form, replacing the bare `if $var` idiom. The STEPS function-dispatch is left alone, since it runs a function name rather than testing a boolean.
</content>
</entry>
<entry>
<title>feat(archsetup): make the claude-code install optional</title>
<updated>2026-05-26T19:47:01+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-26T19:47:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=94d203e9dd23242440f7af3f585ae558d038ddb2'/>
<id>urn:sha1:94d203e9dd23242440f7af3f585ae558d038ddb2</id>
<content type='text'>
The claude-code step is a curl|sh from a third party, and not every user wants AI tooling. I put it behind INSTALL_CLAUDE_CODE (default yes, so current behavior is unchanged), with matching --claude-code / --no-claude-code flags. I wired it the same way as AUTOLOGIN and NO_GPU_DRIVERS: config mapping, a validate_config yes/no check, and a guard around the install block. I also documented the key in archsetup.conf.example.
</content>
</entry>
<entry>
<title>feat(archsetup): clone dotfiles repo and stow per DESKTOP_ENV</title>
<updated>2026-05-22T20:52:24+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-22T20:52:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=97d5de4c6ab568af656aa44a96b0ec421c27e7fd'/>
<id>urn:sha1:97d5de4c6ab568af656aa44a96b0ec421c27e7fd</id>
<content type='text'>
Dotfiles now live in their own repo (git.cjennings.net/dotfiles.git), so archsetup clones DOTFILES_REPO to the user's ~/.dotfiles and stows the right tree for the chosen DESKTOP_ENV: dwm and hyprland get common/ plus their own layer, none gets the standalone minimal/ tree. The clone runs as the target user, so the working tree is user-owned with no chown-after race.

Add DOTFILES_REPO / DOTFILES_BRANCH / DOTFILES_DIR config keys with the same injection guard the other repo keys carry. If the clone doesn't produce a git checkout, error_fatal stops the install rather than silently skipping the restore step that reverts what stow --adopt pulled in. That restore now runs for every DESKTOP_ENV, including none — minimal/ ships the .bashrc/.bash_profile that collide with /etc/skel, so its --adopt needs the same cleanup.
</content>
</entry>
<entry>
<title>feat(archsetup): add interactive username/password prompts</title>
<updated>2026-01-25T19:50:20+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-25T19:50:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=0ca4677245d4d97a0fcb32c8af14359b76445369'/>
<id>urn:sha1:0ca4677245d4d97a0fcb32c8af14359b76445369</id>
<content type='text'>
Replace hardcoded "welcome" password with interactive prompts during
preflight checks. Fixes gnome-keyring password mismatch issue.

- Username validation (lowercase, starts with letter, alphanumeric)
- Password confirmation (enter twice, must match)
- Remove forced password change on first login (chage -d 0)
</content>
</entry>
<entry>
<title>fix(testing): remove obsolete --skip-slow-packages option</title>
<updated>2026-01-25T00:52:34+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-25T00:52:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=6b76c602a1df6c18098fa6b9a43db3a64f2d5ce2'/>
<id>urn:sha1:6b76c602a1df6c18098fa6b9a43db3a64f2d5ce2</id>
<content type='text'>
This flag was removed from archsetup but remained in test scripts.
</content>
</entry>
</feed>
