<feed xmlns='http://www.w3.org/2005/Atom'>
<title>archsetup/Makefile, 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-06-02T17:16:38+00:00</updated>
<entry>
<title>refactor: drop in-repo dotfiles/, move stow tooling to the dotfiles repo</title>
<updated>2026-06-02T17:16:38+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-02T17:16:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=b10cba594db836c0747066addad48bda4d30cd02'/>
<id>urn:sha1:b10cba594db836c0747066addad48bda4d30cd02</id>
<content type='text'>
Since the installer clones DOTFILES_REPO into ~/.dotfiles and stows from there, the in-repo dotfiles/ tree was dead weight. Nothing reads it at install time. I removed it (831 files) now that both machines are migrated.

The Makefile's stow / restow / reset / unstow / import targets and the dotfile-script unit suites moved to the dotfiles repo. They sit alongside the scripts they manage and run standalone (cd ~/.dotfiles &amp;&amp; make ...). This Makefile keeps the VM-integration targets and the installer-helper suite (safe-rm-rf).

I updated CLAUDE.md and README.md so stow operations run from ~/.dotfiles, and the dotfile-management, theme, and unit-test sections point at the standalone repo. The README was already describing the old in-repo model from before the installer switched to cloning. This brings it in line.
</content>
</entry>
<entry>
<title>docs: document the unit-test layer and add a make test-unit target</title>
<updated>2026-05-20T17:02:47+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-20T17:02:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=2172c904e34e044ba938d5a4948182d9fd878816'/>
<id>urn:sha1:2172c904e34e044ba938d5a4948182d9fd878816</id>
<content type='text'>
The README only covered the VM integration harness. The unit suites under tests/ (one directory per script, fake binaries on PATH) went unmentioned, so a contributor adding a .local/bin script had no way to know they existed or how to run them.

I added a make test-unit target that runs every tests/*/test_*.py suite explicitly. unittest discover can't find them because the per-script directory names are hyphenated and aren't valid package paths. Then I split the README Testing section into Unit and VM-integration layers, added a guide for adding a suite, and pointed Contributing at test-unit for script changes.
</content>
</entry>
<entry>
<title>fix(Makefile): detect and prompt on restow conflicts</title>
<updated>2026-02-21T19:15:28+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-21T19:15:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=8a50c06a3fcd97169c5321b1a1e3923bb7382da7'/>
<id>urn:sha1:8a50c06a3fcd97169c5321b1a1e3923bb7382da7</id>
<content type='text'>
Dry-run stow before restowing to catch real files blocking symlinks.
Shows conflicting files and prompts to overwrite or abort.
</content>
</entry>
<entry>
<title>feat(test,hyprland): improve test infrastructure and fix easyeffects</title>
<updated>2026-01-29T12:53:36+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-29T12:53:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=6a270da7fb81443a86ba15a99ea43936bfcfbd62'/>
<id>urn:sha1:6a270da7fb81443a86ba15a99ea43936bfcfbd62</id>
<content type='text'>
Test Infrastructure:
- Add make test-keep target to keep VM running after test
- Add make test-vm-base target for creating base VM only
- Update make test to auto-create VM if missing
- Remove manual user creation from create-base-vm.sh (archsetup handles it)
- Remove unused USERNAME/USER_PASSWORD from archsetup-test.conf

Archsetup:
- Add snapper-gui-git for btrfs snapshot GUI
- Add SYNC_ACL=yes for snapper permissions
- Add setfacl for wheel group access to /.snapshots

Hyprland:
- Remove easyeffects scratchpad (keep auto-launch)
- Remove ecosystem permissions (caused too many popups)

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(Makefile): add deps target for project dependencies</title>
<updated>2026-01-28T19:09:27+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-28T19:09:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=9c8ad46924104a82367863dd5dcfd34dd2ee359b'/>
<id>urn:sha1:9c8ad46924104a82367863dd5dcfd34dd2ee359b</id>
<content type='text'>
Installs stow, fzf for Makefile targets and qemu-full, virt-manager,
libguestfs, bridge-utils, dnsmasq, archiso, sshpass, socat for VM testing.
</content>
</entry>
<entry>
<title>feat(testing): add make test target and display report on completion</title>
<updated>2026-01-28T04:22:34+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-28T04:22:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=d227e69ce273c08bf495d2f700b0f067011c0126'/>
<id>urn:sha1:d227e69ce273c08bf495d2f700b0f067011c0126</id>
<content type='text'>
Add 'make test' Makefile target to run full VM integration test suite.
Print test report to terminal after generation for immediate visibility.
</content>
</entry>
<entry>
<title>feat(makefile): allow import to common, dwm, or hyprland</title>
<updated>2026-01-27T00:38:54+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-27T00:38:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=544928b6a82b6ccfd2ce7724a5509424e4ab1c2d'/>
<id>urn:sha1:544928b6a82b6ccfd2ce7724a5509424e4ab1c2d</id>
<content type='text'>
Import now requires destination:
  make import common     # Import to shared configs
  make import dwm        # Import to DWM-specific
  make import hyprland   # Import to Hyprland-specific

Prompt and header now show destination.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix(makefile): include top-level dotdirs in import selection</title>
<updated>2026-01-27T00:37:17+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-27T00:37:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=c2e13c7b96939f774aba5e3c0c5e78bf29bd7080'/>
<id>urn:sha1:c2e13c7b96939f774aba5e3c0c5e78bf29bd7080</id>
<content type='text'>
Import now searches:
- ~/.*  (top-level dotdirs like .emacs.d, .ssh)
- ~/.config/*
- ~/.local/*

Excludes .cache, .local, .config from top-level (they're handled separately).

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(makefile): add import target, rename adopt to reset</title>
<updated>2026-01-27T00:36:20+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-27T00:36:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=62d33405e1fa63538e09c3e1ec487d97ad82defa'/>
<id>urn:sha1:62d33405e1fa63538e09c3e1ec487d97ad82defa</id>
<content type='text'>
New targets:
- import: Use fzf to select ~/.config and ~/.local dirs to import
          into dotfiles/common/, then restow to create symlinks
- reset: Renamed from adopt - clearer name for "resolve conflicts,
         keep repo version"

Import workflow:
1. fzf multi-select from ~/.config and ~/.local
2. Move selected dirs to dotfiles/common/
3. Restow common to create symlinks
4. Reminder to git commit

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: add Makefile for GNU Stow dotfile management</title>
<updated>2026-01-27T00:31:06+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-27T00:31:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=c8f706d3f3b96e778549267bb533023476639e41'/>
<id>urn:sha1:c8f706d3f3b96e778549267bb533023476639e41</id>
<content type='text'>
Targets:
- stow: Create symlinks (fresh install)
- restow: Refresh symlinks after git pull
- adopt: Pull system files, reset to repo version
- unstow: Remove all symlinks

Usage: make &lt;target&gt; &lt;de&gt;
  make stow dwm
  make restow hyprland
  make adopt dwm

Shows help if DE argument missing.

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