aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-09 19:33:54 -0500
committerCraig Jennings <c@cjennings.net>2026-06-09 19:33:54 -0500
commit940c1969c705d3703ff429ee57eb76ba051e55c1 (patch)
tree59036632b1a72f63b7b502dd6ec67bf85a04bfb9
parentcb5f017988118bd02b4fc89360e80cc151fe0f73 (diff)
downloadarchsetup-940c1969c705d3703ff429ee57eb76ba051e55c1.tar.gz
archsetup-940c1969c705d3703ff429ee57eb76ba051e55c1.zip
chore(todo): close dotfiles-separation, file mesa/hyprland update guard
Mark the dotfiles-separation epic DONE. Phases 1-3.2 shipped and ratio's stale dotfiles symlinks are cleaned up. Promote its two open follow-ups (per-host override, Phase-2 VM verify) to standalone [#B] tasks. Close the claude-code-optional and input-validation items as shipped. Note that six open-source-release sub-tasks now target the dotfiles repo after Phase 3.2 moved that tree out. File a [#B] guard against a live mesa/hyprland/wayland-runtime -Syu crashing the compositor.
-rw-r--r--todo.org50
1 files changed, 28 insertions, 22 deletions
diff --git a/todo.org b/todo.org
index c1dd0a3..8481dd8 100644
--- a/todo.org
+++ b/todo.org
@@ -38,6 +38,14 @@ The =protonmail-bridge= package ships an enabled systemd user service (=/usr/lib
Fix applied per-machine 2026-05-22: =systemctl --user disable --now protonmail-bridge.service=, leaving the Hyprland exec-once GUI as the sole bridge (tray icon returns, served cert matches, =mbsync -a= clean). A fresh install re-enables the package service, so make it durable: mask/disable =protonmail-bridge.service= during install (likely in =scripts/cmail-setup-finish.sh=) and document that the Hyprland exec-once is the intended launcher — never run both. Source: handoff from .emacs.d 2026-05-22.
+** TODO [#B] Guard against live mesa/hyprland/wayland-runtime updates :hyprland:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-09
+:END:
+A live =pacman -Syu= that swaps mesa/hyprland/wayland runtime libs out from under a running Hyprland session can crash the compositor: the next GPU-lib call hits a now-"(deleted)" library and SIGABRTs, taking the Wayland clients down with it. Hit ratio 2026-06-07 (mesa 26.0.6 -> 26.1.2 + hyprland upgraded live; Hyprland SIGABRT took down awww/insync/emacs). Likely the driver behind ratio's high lifetime unsafe-shutdown ratio — a crashed compositor forces a hard reset.
+
+Ship a guard: an update wrapper, or a documented practice, that when a pending =-Syu= set includes mesa/hyprland/wayland runtime libs advises running it from a TTY (or after logging out of Hyprland) rather than live. Returned to archsetup from archangel 2026-06-09 — hyprland/mesa are installed and managed by archsetup, not the ISO installer.
+
** TODO [#C] Pocketbook development backlog :pocketbook:
:PROPERTIES:
:LAST_REVIEWED: 2026-05-26
@@ -153,10 +161,10 @@ Health requested [#A] (load-bearing for the PEP 723 pattern they're promoting +
Related: the new [#B] LLM task above may grow scripts that benefit from PEP 723 (e.g. =scripts/llm-smoke-test.sh= if Python-based). =uv= landing here removes that friction.
-** DOING [#A] Separate dotfiles from archsetup
-SCHEDULED: <2026-05-21 Thu>
+** DONE [#A] Separate dotfiles from archsetup
+CLOSED: [2026-06-09 Tue]
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-21
+:LAST_REVIEWED: 2026-06-09
:END:
*** 2026-05-11 Mon @ 13:01:29 -0500 AI Response: Dotfile separation plan
Approach: keep =dotfiles/= committed in this repo as the working default (Craig's machines and CI keep functioning untouched), but make the *source location* a config variable. The install script learns one new conf key — =DOTFILES_REPO= / =DOTFILES_BRANCH= — and when set, clones that repo into =~/.dotfiles= and stows from there instead of from =dotfiles/= inside archsetup. The Makefile gets a =DOTFILES= override env var so the same stow targets work whether dotfiles live in-repo or elsewhere. No submodule (adds fragility for a curl|bash installer); a separate published =archsetup-dotfiles= repo is optional follow-up, not a blocker.
@@ -206,25 +214,24 @@ Gave =~/.dotfiles= its own Makefile rather than repointing archsetup's =DOTFILES
Moved 6 suites (=airplane-mode=, =layout-navigate=, =notify=, =tmux-util=, =waybar-airplane=, =waybar-touchpad=) into =~/.dotfiles/tests/=, dropping the =dotfiles/= =SCRIPT=-path prefix (=REPO_ROOT= is now the dotfiles root), and copied their fixtures (=layout-navigate/fake-hyprctl=, =tmux-util/fake-{fzf,kill,sleep,tmux}=). =waybar-netspeed='s suite was already there. =safe-rm-rf= stayed in archsetup (it tests the installer, not a dotfile). =make test= green: 7 suites, 124 tests. Committed 59b10c4 + pushed to the dotfiles repo. =minimal= is a standalone tree (stowed alone, not =common + minimal=), so a =make stow minimal= target needs its own branch — deferred as a small follow-up; the move kept stow/restow/reset/unstow behavior-identical to archsetup (dwm/hyprland).
-*** TODO [#A] Pull Phase 3.2 changes onto ratio
-Follow-up once the velox-side Phase 3.2 work has pushed (the ~/.dotfiles Makefile + moved unit suites to git@cjennings.net:dotfiles.git, and the archsetup commit that strips the stow targets + git-rm's =dotfiles/=). ratio already stows from =~/.dotfiles= (migrated in 3.1, 2026-05-22), and none of these changes touch a stowed file — the Makefile and =tests/= live at the dotfiles repo root, outside the stow trees — so ratio needs no restow, just two pulls plus a safety check. Run on ratio (or over SSH from velox):
+*** 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=.)
-1. *Safety check FIRST, before pulling archsetup.* Confirm no live symlink points into =~/code/archsetup/dotfiles=: =find ~ -lname '*code/archsetup/dotfiles*' 2>/dev/null= should be empty, and =find ~ -xtype l 2>/dev/null= (dangling links) should be empty. If anything still points into archsetup/dotfiles, ratio isn't fully migrated — re-stow from =~/.dotfiles= before continuing, or the archsetup pull will dangle those links.
-2. =cd ~/.dotfiles && git pull --ff-only= — picks up the new Makefile + =tests/=.
-3. =cd ~/code/archsetup && git pull --ff-only= — drops the now-removed =dotfiles/= and the stow targets from ratio's clone.
-4. Re-check dangling links after the archsetup pull: =find ~ -xtype l 2>/dev/null= — expect none.
-5. Adopt the new flow: dotfile stow management now lives in the dotfiles repo — =cd ~/.dotfiles && make restow hyprland= (no =DOTFILES== override; the archsetup Makefile no longer has stow/restow/reset/unstow/import).
-6. =cd ~/.dotfiles && make test= — confirm the migrated unit suites pass on ratio.
-
-*** TODO [#A] Cleaner per-machine override mechanism for the dotfiles repo
+** TODO [#B] Cleaner per-machine override mechanism for the dotfiles repo
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-09
+:END:
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.
-**** 2026-05-26 Tue @ 10:21:08 -0500 AI Response: Spec written, gated on review
+*** 2026-05-26 Tue @ 10:21:08 -0500 AI Response: Spec written, gated on review
Surfaced by a HiDPI scaling failure: a per-app =QT_SCALE_FACTOR=1.5= in the shared =Zoom.desktop= (meant for velox) made Zoom open enormous on ratio. Reverted that patch to plain =/usr/bin/zoom %U=; the durable fix is this mechanism. Proposed approach: a per-host stow tier (=ratio/=, =velox/=) stowed as =common + hyprland + $(uname -n)=, with the existing =conf.d/*.conf= glob as the first clean tenant — move =local.conf= out of the shared =hyprland/= tier into per-host tiers so each machine gets its own (HiDPI monitor scale + =env = QT_SCALE_FACTOR/GDK_SCALE= on velox, minimal on ratio). XWayland apps don't scale via the compositor (=force_zero_scaling=true=), so toolkit env vars set in =conf.d= are the right layer — kills per-app =.desktop= hacks. Open question in the spec: whole-file configs with no include directive (waybar JSON, pypr toml) need a separate strategy. Full design + 5 open questions for Craig in the spec.
-*** TODO [#A] Verify Phase 2 in the VM (hyprland + none) — pending clean run
+** TODO [#B] Verify Phase 2 in the VM (hyprland + none) — pending clean run
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-09
+:END:
Phase 2 shipped without a full VM integration pass: four runs hit env issues (pacman timeout, an SSH drop at 60 min, then a port-2222 collision with an active archangel VM). The fixed clone code was exercised by run 3 and run 4 ran 60 min past it, but the stow-per-DESKTOP_ENV paths — especially =none=/minimal, which no run reached — are unverified end-to-end. Close the gap: =make test= (hyprland) and a =DESKTOP_ENV=none= run, once port 2222 is free.
** DOING [#A] Prepare for GitHub open-source release
@@ -233,6 +240,8 @@ SCHEDULED: <2026-05-21 Thu>
:LAST_REVIEWED: 2026-05-21
:END:
Remove personal info, credentials, and code quality issues before publishing.
+*** 2026-06-09 Tue @ 19:21:36 -0500 Reconciliation: six sub-tasks now target the ~/.dotfiles repo, not archsetup
+Phase 3.2 removed the in-repo =dotfiles/= tree, so six sub-tasks below no longer describe archsetup content — they target files now owned by the =~/.dotfiles= repo (=git.cjennings.net/dotfiles.git=): "Remove credentials and secrets from dotfiles", "Remove/template personal info from dotfiles", "Remove binary font files from repo", "Move battery out of waybar sysmonitor group", "Resolution-adaptive scratchpad sizing", and "Dynamic waybar/foot config based on screen resolution". Their paths are relative to that repo now. Kept here for tracking per Craig (2026-06-09); he'll re-scope the archsetup-vs-dotfiles split shortly. archsetup-proper release work (scripts personal-info, device-specific config, shellcheck, and scrubbing the pre-=b10cba5= dotfiles secrets from archsetup's own history) stays this task.
*** 2026-05-11 Mon @ 13:01:29 -0500 AI Response: Open-source-prep source audit
Checked each subtask below against the source / git state. Bottom line: almost nothing is fully done. =LICENSE= and =README.md= were added this session (see those subtasks); the rest still stands.
- *Remove credentials and secrets from dotfiles* — NOT DONE. All five named files still tracked: =dotfiles/common/.config/.tidal-dl.token.json=, =.config/calibre/smtp.py.json=, =.config/transmission/settings.json=, =.msmtprc=, =.mbsyncrc=. =.gitignore= lists none of them; no =.example= templates exist.
@@ -313,14 +322,11 @@ PragmataPro and Apple Color Emoji fonts in =dotfiles/common/.local/share/fonts/=
Add to =.gitignore=, document font installation separately.
May have licensing issues for redistribution.
-*** TODO [#A] Make claude-code installation optional :quick:
-Line 1781: =curl | sh= from claude.ai — should be behind a config flag.
-Not all users want AI tooling; curl-pipe-bash is a red flag for reviewers.
+*** 2026-06-09 Tue @ 19:21:36 -0500 Made claude-code install optional
+Shipped in =f2dad22= (feat: make the claude-code install optional). The =curl | sh= from claude.ai now sits behind a config flag instead of running unconditionally.
-*** DOING [#A] Add input validation for username and paths
-Variables like ~$username~, ~$source_dir~, and paths are not validated.
-Special characters or malicious input could break the script or cause security issues.
-Should validate inputs match expected patterns (alphanumeric, valid paths, etc.).
+*** 2026-06-09 Tue @ 19:21:36 -0500 Input validation added (validate_config + validate_username)
+validate_config + validate_username shipped (detail in the 2026-05-11 note below). The =$source_dir= path check was judged unnecessary — it derives from the now-always-validated =$username= (=/home/$username/.local/src=). Closed as done.
**** 2026-05-11 Mon @ 18:20:49 -0500 AI Response: validate_config + validate_username added
Added two pre-flight validators to =archsetup= (right after =load_config=, before any install step):