From b75d061cbb70b048dc0eeac279a2ecd5ec2d2909 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Thu, 11 Jun 2026 05:03:02 -0500 Subject: docs: per-host overrides shipped — spec decisions, host-tier docs, task close-out MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CLAUDE.md | 8 +++++++- docs/PLAN-per-host-overrides.org | 2 +- todo.org | 21 +++++++++++++++++++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index b3c965d..03da278 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,13 +35,19 @@ make test-vm-base # Create the base VM only Dotfile stow operations live in the dotfiles repo's own Makefile, not here. Run them from `~/.dotfiles`: ``` -cd ~/.dotfiles && make stow hyprland # common + hyprland +cd ~/.dotfiles && make stow hyprland # common + hyprland + host tier cd ~/.dotfiles && make restow hyprland # refresh links after git pull cd ~/.dotfiles && make reset hyprland # fix conflicts, keep repo version cd ~/.dotfiles && make unstow hyprland # remove symlinks cd ~/.dotfiles && make import common # fzf select → import to common/ cd ~/.dotfiles && make test # run the dotfile-script unit suites ``` +Per-host overrides live in a stow tier named after the machine (`ratio/`, +`velox/`), auto-included by every stow target when the directory exists +(`HOST=` overrides detection; hostname binary is absent — `uname -n`). +The tier holds only files no shared package owns: hypr `conf.d/local.conf` +(velox: HiDPI scale + XWayland toolkit env), `pypr/config.toml`, and foot's +`host.ini` (the shared foot.ini sets no font — it's per-host via include). ## Dotfiles Repository diff --git a/docs/PLAN-per-host-overrides.org b/docs/PLAN-per-host-overrides.org index fdeb3d1..6816a21 100644 --- a/docs/PLAN-per-host-overrides.org +++ b/docs/PLAN-per-host-overrides.org @@ -6,7 +6,7 @@ | Field | Value | |--------------+-------------------------------------------------------------| -| State | Draft — gated on review before implementation | +| State | Implemented 2026-06-11 (dotfiles =c5e699b=) — review decisions: auto-detect via uname -n with HOST= override; foot via native include with the font made per-host; pypr whole-file per host; waybar stays shared (velox's copy was stale, not divergent); phases 1-4 in one pass; installer integration deferred to a follow-on task | | Trigger | Zoom launched enormous on ratio after a per-app QT_SCALE_FACTOR=1.5 patch meant for velox | | Supersedes | The fragile "local real files shadowing stow" pattern on velox | | Related task | =todo.org= → "Cleaner per-machine override mechanism for the dotfiles repo" | diff --git a/todo.org b/todo.org index 67de890..e40e4b2 100644 --- a/todo.org +++ b/todo.org @@ -310,10 +310,13 @@ Moved 6 suites (=airplane-mode=, =layout-navigate=, =notify=, =tmux-util=, =wayb *** 2026-06-09 Tue @ 19:21:36 -0500 Pulled Phase 3.2 onto ratio + cleaned dangling links ratio's archsetup clone was already current with origin/main (Phase 3.2 pulled), but the migration had left stale symlinks pointing into the now-deleted =~/code/archsetup/dotfiles=: =~/.config/calibre= plus a manual =~/music/radio/= playlist farm (73 broken =.m3u= links) and one dead reference under =~/projects/home/reconciliation=. Re-pointed calibre into =~/.dotfiles/common/.config/calibre=. Deleted the 73 radio links — dead and redundant, since the same playlists already stow correctly to =~/music/*.m3u=, which is what mpd reads (=music_directory=/=playlist_directory= both =~/music=) — and removed the reconciliation link. ratio now has zero archsetup-dangling symlinks. (The ~3400 other dangling links in =~= are unrelated system/flatpak noise: ca-certificates, =/run/host=, =/bin=.) -** TODO [#B] Cleaner per-machine override mechanism for the dotfiles repo +** DONE [#B] Cleaner per-machine override mechanism for the dotfiles repo +CLOSED: [2026-06-11 Thu] :PROPERTIES: -:LAST_REVIEWED: 2026-06-09 +:LAST_REVIEWED: 2026-06-11 :END: +Shipped 2026-06-11 as dotfiles =c5e699b= after spec review (all five questions decided — see the spec's Status table). Host tiers =ratio/= + =velox/= auto-included by every stow target; first tenants: hypr local.conf (velox HiDPI scale + XWayland toolkit env, replacing the Zoom per-app hack), pypr whole-file split, foot font via per-host host.ini include. waybar stays shared (velox's was stale, not divergent). velox restows cleanly for the first time and caught up on all pending dotfiles work. Drift guards extended to foot.ini; Makefile host logic unit-tested (15 suites green). Phase 5 (installer) filed as a follow-on below. velox needs a Hyprland restart for the env vars — see Manual testing. + velox keeps laptop-specific configs (foot font, pypr scratchpad sizing for 2256x1504, waybar battery) as local REAL files shadowing the stow symlinks. That's fragile: any =make restow= on velox re-conflicts (hit exactly this during the 2026-05-22 migration — stow aborts on the real files). The =~/.dotfiles= model needs a real per-machine override story (a =minimal/=-style per-host package, a documented local-override convention with =.stow-local-ignore=, or host-conditional includes) so overrides survive restows without manual backup/restore. Spec: [[file:docs/PLAN-per-host-overrides.org][docs/PLAN-per-host-overrides.org]] — gated on review before implementation. @@ -957,7 +960,21 @@ Enhance existing indicators to show what's happening in real-time CLOSED: [2026-06-10 Wed] Already shipped before this review — commit =798b86f= gave git_install the same MAX_INSTALL_RETRIES loop as pacman/aur, with a clean-slate build dir per attempt. The task predates the fix; closing as done. +** TODO [#C] Teach archsetup to stow the host tier :solo: +:PROPERTIES: +:LAST_REVIEWED: 2026-06-11 +:END: +Phase 5 of the per-host overrides spec, deferred from the 2026-06-11 implementation: the installer's stow calls in =user_customizations()= stow =common= + the DE package only. Add the host tier (=$(cat /etc/hostname)= at install time, or a conf key) guarded so a host without a tier is skipped with a message — same semantics as the dotfiles Makefile. Matters only for fresh installs of ratio/velox-named machines; the post-install =make stow= path already handles it. + ** TODO Manual testing and validation +*** velox per-host env applies after Hyprland restart +What we're verifying: the velox tier's env lines (GDK_SCALE/QT_SCALE_FACTOR 1.5, XCURSOR_SIZE 36) only apply at Hyprland startup, and the foot font moved to host.ini — neither can be confirmed over ssh. +- On velox, log out of Hyprland and back in (or reboot) +- Open a foot window — text should render at 12pt (same as before the migration) +- Launch Zoom (ideally from a browser link) — it should open at normal size with no per-app patch +- Check the cursor isn't tiny on the HiDPI panel +Expected: foot at 12pt, Zoom normally sized, cursor 36px — all from the velox tier, no local real files involved. + *** Dupre Chrome theme renders correctly What we're verifying: the new Chrome theme's colors look right in a real browser — palette mapping can't be eyeballed from a manifest. - Open chrome://extensions in Chrome -- cgit v1.2.3