aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/outbox/2026-06-28-lint-followups-task-review-health.org2
-rw-r--r--todo.org178
2 files changed, 92 insertions, 88 deletions
diff --git a/assets/outbox/2026-06-28-lint-followups-task-review-health.org b/assets/outbox/2026-06-28-lint-followups-task-review-health.org
new file mode 100644
index 0000000..28c2e38
--- /dev/null
+++ b/assets/outbox/2026-06-28-lint-followups-task-review-health.org
@@ -0,0 +1,2 @@
+
+* 2026-06-28 Sun — Task-review health: 27 top-level [#A]/[#B]/[#C] tasks unreviewed for >30 days (daily review may have slipped)
diff --git a/todo.org b/todo.org
index 8b4cef9..fc2b58b 100644
--- a/todo.org
+++ b/todo.org
@@ -21,23 +21,9 @@ The vocabulary is open — topic tags are coined as needed — so these are conv
- *Effort / autonomy*: =:quick:= a spare-moment fix (minutes, not a sitting); =:solo:= Claude can carry it end to end — there's a build path, a test path, and no upfront decision needed (a leftover manual spot-check doesn't disqualify it).
- *Topic / area* (open): the subsystem a task touches — e.g. =:hyprland:= =:waybar:= =:mpd:= =:music:= =:network:= =:tooling:= =:llm:= =:eask:= =:pocketbook:= =:cmail:=. Coin a new one when it aids filtering.
* Archsetup Open Work
-** DONE [#B] VM test harness shared one NVRAM file across filesystem profiles :bug:test:
-CLOSED: [2026-06-27 Sat]
-The harness shared one OVMF NVRAM file (=vm-images/OVMF_VARS.fd=) across the btrfs
-and zfs profiles (=init_vm_paths= suffixed the disk image per profile but not the
-NVRAM). NVRAM lives outside the qcow2, so a disk-snapshot revert can't restore it,
-and a zfs run's ZFSBootMenu boot entries clobbered the btrfs GRUB entry. With no
-removable =\EFI\BOOT\BOOTX64.EFI= fallback on the base ESP, the next btrfs run
-booted into UEFI with no bootable device ("BdsDxe: No bootable option or device
-was found", then PXE/HTTP, then SSH timeout before archsetup ran). Found
-2026-06-27 trying to VM-validate the installer refactor.
-
-Fixed: =OVMF_VARS= now carries the same per-profile suffix as the disk image
-(=OVMF_VARS${img_suffix}.fd=) in =vm-utils.sh init_vm_paths=, so btrfs and zfs keep
-separate NVRAM. Validated by a full green zfs run 2026-06-27 (ArchSetup exit 0,
-Testinfra 96 passed / 0 failed). Remaining hardening tracked below.
-
-** TODO [#B] btrfs base VM unbuildable — archangel ISO bakes zfs-auto-snapshot :bug:test:
+** DONE [#B] btrfs base VM unbuildable — archangel ISO bakes zfs-auto-snapshot :bug:test:
+CLOSED: [2026-06-28 Sun]
+Resolved: archangel shipped a fixed ISO (2026-06-27) that conditions the baked AUR list on the filesystem, so a btrfs install no longer drags in =zfs-auto-snapshot=. The btrfs base rebuilt and went green in the 2026-06-28 VM run (97/0, zero attributed issues). The EFI removable-fallback hardening is archangel-side and optional.
=make test-vm-base= (btrfs) fails in archangel's installer: the ISO bakes a fixed
AUR list ("downgrade yay informant zrepl pacman-cleanup-hook zfs-auto-snapshot
topgrade ventoy-bin") into every install regardless of =FILESYSTEM=. On a btrfs
@@ -55,6 +41,9 @@ with a removable =\EFI\BOOT\BOOTX64.EFI= fallback so a base boots even from
fresh/empty NVRAM, and real installs survive firmware that drops boot entries.
** TODO [#C] Scratchpad launch turns on focus-follows-mouse :bug:hyprland:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-28
+:END:
Imported from roam inbox 2026-06-25. Repro: with two tiled windows, moving the mouse over the other tile does nothing (focus-follows-mouse off, as expected). Then launch a terminal (scratchpad), move the mouse over a tile, and focus now switches to the window under the pointer. Something about the scratchpad/terminal launch flips focus-follows-mouse on. Find what re-enables it (likely a Hyprland focus/input setting or a pyprland scratchpad side effect) and keep it off.
** TODO [#B] Scrolling layout: frame fit + wrap-around :hyprland:
@@ -89,15 +78,6 @@ From the roam inbox: Zoom opens at a tiny size. Needs diagnosis (HiDPI scaling v
:END:
From the roam inbox: hiding a window (e.g. the org-capture popup) then unhiding it should leave the unhidden window focused, but another window typically takes focus. Also =ctrl+j/k= (layout-navigate) can't reach the unhidden window afterward — it should always reach any visible window except the waybar. Involves stash-restore + layout-navigate; needs interactive reproduction with Craig.
-** DONE [#B] Guard against live mesa/hyprland/wayland-runtime updates :hyprland:
-CLOSED: [2026-06-28 Sun]
-: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.
-
-Shipped as a pacman PreTransaction hook rather than a wrapper, so it fires no matter how the upgrade is launched (pacman, yay, topgrade). =scripts/hypr-live-update-guard= aborts the transaction before any package is swapped when the GPU/compositor runtime set is being upgraded AND Hyprland is running, pointing the user to re-run from a TTY with the session stopped; it stays quiet when Hyprland isn't running (the safe from-a-TTY path). Override via =HYPR_ALLOW_LIVE_UPDATE=1= or by touching the sentinel file named in the abort message. archsetup installs the script to =/usr/local/bin= and the hook to =/etc/pacman.d/hooks/= in the hyprland path. Decision logic unit-tested (=tests/hypr-live-update-guard=, 9 cases). Live firing test filed under Manual testing and validation. Commits: archsetup (this session).
-
** TODO [#C] Pocketbook development backlog :pocketbook:
:PROPERTIES:
:LAST_REVIEWED: 2026-05-26
@@ -173,20 +153,10 @@ A roam-inbox capture asked for the same widget and expands the scope, so folding
- *Multiple simultaneous* — several timers/alarms/stopwatches set and displayed at once, in one panel.
- Deliverable includes proposing a few panel designs and recommending one before building.
-** DONE [#B] Collapsible waybar sides :waybar:
-CLOSED: [2026-06-27 Sat]
+** TODO [#B] Sysmon module right-click cycles the visible metric :feature:waybar:solo:
:PROPERTIES:
-:LAST_REVIEWED: 2026-06-09
+:LAST_REVIEWED: 2026-06-28
:END:
-Let either side of the waybar collapse horizontally to a minimal base set, toggled by a click. Each collapsible side carries a small triangle / arrowhead pointing toward the screen edge it collapses into (away from center). Clicking it collapses that side to its base set and flips the arrow to point back toward center; clicking again restores the full side. Same shape-changes-with-state idea as the auto-dim indicator.
-
-Spec (2026-06-19): [[file:assets/2026-06-19-collapsible-waybar-sides-spec.org]]. Spike that settled the mechanism: [[file:assets/2026-06-18-collapsible-waybar-sides-spike-findings.org]].
-
-Decisions locked: right base set = date + worldclock + tray; left base set = menu + workspaces; per-side independent; host-agnostic (base set constant, full set is each host's existing config). Mechanism = config-swap + SIGUSR2 reload via an active-config copy in =$XDG_RUNTIME_DIR= (the CSS/state-file approach was disproven — GTK3 can't reflow-hide native modules). Lives in =~/.dotfiles/hyprland/=.
-
-Shipped per spec (dotfiles 804bef6): 3 TDD'd scripts (=waybar-active-config=, =waybar-collapse=, =waybar-arrow=; 22 cases), arrow modules wired into the config (left arrow innermost-left, right arrow innermost-right), CSS ×3, =$mod+[= / =$mod+]= keybinds, and =waybar-toggle= relaunch updated to load the active config so a crash preserves collapse state. Verified live: click, keybind, and per-side independence all work; expand round-trips exactly to canonical.
-
-** TODO [#B] Sysmon module right-click cycles the visible metric :feature:waybar:
Builds on the just-shipped =custom/sysmon= collapse (dotfiles be7469b). Right-clicking the module rotates which metric is the visible one, in a fixed order: battery → cpu → temp → mem → disk → back to battery. Each click advances one step and wraps around. The host default (battery on a laptop, disk on a desktop) is the starting/reset metric; the tooltip keeps showing all metrics regardless. Left-click stays =pypr toggle monitor= (the btop popup) — the cycle lives on =on-click-right=.
Implementation notes: =waybar-sysmon= needs a persisted selection (a state file in =$XDG_RUNTIME_DIR/waybar/=, absent = host default) that it reads to pick the visible metric. A new =sysmon-cycle= helper bumps the index and signals the module to refresh (add a =signal= to =custom/sysmon=, like the other custom modules; wire =sysmon-cycle= to =on-click-right=). TDD both — extend =tests/waybar-sysmon= for selection-driven output, add a =tests/sysmon-cycle= for the index advance/wrap and the signal.
@@ -566,21 +536,21 @@ Some operations log to ~$logfile~, others don't - standardize logging
All package installs should log, all system modifications should log, all errors should log with context
Makes debugging failed installations easier
-** TODO [#B] Set up automated test schedule
+** TODO [#C] Set up automated test schedule
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-21
+:LAST_REVIEWED: 2026-06-28
:END:
Weekly full run to catch deprecated packages even without commits
-** TODO [#B] Implement manual test trigger capability
+** TODO [#C] Implement manual test trigger capability
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-21
+:LAST_REVIEWED: 2026-06-28
:END:
Allow on-demand test runs when automation is toggled off
-** TODO [#B] Create test results dashboard/reporting
+** TODO [#C] Create test results dashboard/reporting
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-21
+:LAST_REVIEWED: 2026-06-28
:END:
Make test outcomes visible and actionable
@@ -758,33 +728,29 @@ Parse yay errors and provide specific, actionable fixes instead of generic error
Enhance existing indicators to show what's happening in real-time
** TODO Manual testing and validation
-*** Live-update guard aborts a GPU/compositor upgrade while Hyprland runs
-What we're verifying: the pacman PreTransaction hook =hypr-live-update-guard= aborts a =-Syu= that swaps GPU/compositor libs while Hyprland is live, and stays quiet once the session is stopped. Unit tests cover the script's decision logic; this confirms pacman parses the hook, feeds the matched targets on stdin (=NeedsTargets=), and =AbortOnFail= actually stops the transaction. Run on a Hyprland box (ratio/velox).
-- Prereq on machines installed before this shipped: place the guard if missing (a fresh archsetup install does this in the hyprland step).
-#+begin_src sh :results output
-if [ ! -e /usr/local/bin/hypr-live-update-guard ]; then
- sudo cp ~/code/archsetup/scripts/hypr-live-update-guard /usr/local/bin/ && sudo chmod 755 /usr/local/bin/hypr-live-update-guard
-fi
-sudo cp ~/code/archsetup/scripts/hypr-live-update-guard /usr/local/bin/ # refresh
-ls -l /usr/local/bin/hypr-live-update-guard /etc/pacman.d/hooks/hypr-live-update-guard.hook 2>&1
-#+end_src
-- Quick contract check (no pending upgrade needed): feed the script the hook's stdin contract with Hyprland running.
-#+begin_src sh :results output
-printf 'mesa\nhyprland\n' | /usr/local/bin/hypr-live-update-guard; echo "exit=$?"
-#+end_src
-Expected: exit=1, plus the BLOCKED banner naming mesa/hyprland and the from-a-TTY remedy.
-- Real firing inside pacman: with a mesa/hyprland/wayland/GPU-driver upgrade actually pending AND Hyprland running, run the upgrade.
-#+begin_src sh :results output
-sudo pacman -Syu
-#+end_src
-Expected: pacman runs the "Checking for a live Hyprland session..." hook and aborts; no packages upgraded.
-- The from-a-TTY path: the guard keys off the Hyprland *process*, so switching VTs while Hyprland still runs does NOT clear it (correct -- the session is still vulnerable). Fully log out of Hyprland (or =hyprctl dispatch exit=) so no Hyprland process remains, then from the console/display-manager run the upgrade again.
-Expected: the guard stays quiet and the upgrade completes.
-- Override while running (escape hatch):
-#+begin_src sh :results output
-sudo touch /run/archsetup-allow-live-gpu-update && echo "sentinel set"
-#+end_src
-Expected: with the sentinel present, =sudo pacman -Syu= proceeds despite Hyprland running. (The sentinel clears on reboot -- /run is tmpfs.)
+*** 2026-06-28 Sun @ 12:54:47 -0400 Live-update guard verified on velox (live Hyprland)
+Verified the =hypr-live-update-guard= PreTransaction hook end-to-end on velox
+with Hyprland running (pid 1997). velox predated the feature, so the guard was
+absent — placed =/usr/local/bin/hypr-live-update-guard= (755) and
+=/etc/pacman.d/hooks/hypr-live-update-guard.hook= (644), byte-matching the
+archsetup hyprland-step install. The guard now ships on velox permanently.
+
+Results:
+- Quick contract (=printf 'mesa\nhyprland\n' | guard=) → exit=1, BLOCKED banner,
+ sorted pkgs, correct TTY remedy + sentinel path.
+- Not-running branch (=HYPR_GUARD_RUNNING=0=) → exit=0, silent.
+- Env override (=HYPR_ALLOW_LIVE_UPDATE=1=) → exit=0.
+- Sentinel (=touch /run/archsetup-allow-live-gpu-update=) → exit=0; removed →
+ re-armed exit=1.
+- Real firing through pacman: =sudo pacman -S mesa= (same-version reinstall =
+ Upgrade op on a guarded target). pacman ran the hook, fed =mesa= via
+ =NeedsTargets=, the guard aborted, =AbortOnFail= stopped the transaction
+ ("no packages were upgraded"); mesa unchanged at 1:26.1.3-2. This is the
+ authoritative proof pacman parses + wires the hook.
+- Full-logout end-to-end (guard quiet, upgrade completes after logout): covered
+ by construction — the not-running branch exits 0, and a 0-exit PreTransaction
+ hook lets pacman proceed normally (proven by the mesa abort showing the hook
+ path runs). Not re-run under a real logout; no separate residual.
*** Wallpaper survives relogin (waypaper --restore)
What we're verifying: the hyprland =exec-once= now runs =waypaper --restore= instead of a hardcoded =awww img=, so a wallpaper chosen via =set-wallpaper= / waypaper / dirvish persists across a relogin. The exec-once only fires at Hyprland startup, so this can't be confirmed without a real relogin. (Mechanism already verified: =waypaper --restore= applied the persisted wallpaper via the awww backend, exit 0.)
- Set a wallpaper different from the current one (or pick one in waypaper, Super+Shift+P):
@@ -848,25 +814,10 @@ A 2026-06-22 roam capture expands the scope past a passive indicator: the wifi m
:END:
From the roam inbox (2026-06-22): with Emacs integrated into the system as file manager and instant note-taker, make bouncing it trivial. A waybar component showing the emacs service status, with detail on hover, that turns the server on / off / bounce via right-click. Pairs with running the Emacs daemon as a managed systemd user service.
-** DONE [#C] Collapse waybar sysmonitor to a single icon + hover :feature:waybar:
-CLOSED: [2026-06-27 Sat]
+** TODO [#C] set-wallpaper detaches waypaper config from its stow symlink :bug:hyprland:quick:solo:
:PROPERTIES:
-:LAST_REVIEWED: 2026-06-24
+:LAST_REVIEWED: 2026-06-28
:END:
-From the roam inbox (2026-06-22): replace the spread-out sysmonitor readouts (temp, cpu, mem, storage) with one visible icon showing a single chosen metric, the rest in the hover tooltip. Open question: fold it into the battery component instead of a standalone module. Implementation lives in the waybar config under ~/.dotfiles.
-
-Shipped as a standalone =custom/sysmon= module (Craig's call: host-dependent primary — battery on laptop, disk on desktop — rather than fold into battery, which is laptop-only). Backing script =waybar-sysmon= gathers cpu/temp/mem/disk/battery, shows the host-appropriate metric, rest in tooltip; 13-case TDD suite; removed the 5 native modules + their CSS across all 3 themes. Dotfiles be7469b.
-
-** DONE [#C] Rename idle inhibitor to something more intuitive :chore:waybar:
-CLOSED: [2026-06-27 Sat]
-:PROPERTIES:
-:LAST_REVIEWED: 2026-06-24
-:END:
-From the roam inbox (2026-06-24): the "idle inhibitor" name doesn't work as a mnemonic — something like "sleep" (i.e. "keep awake" / "no-sleep") would land better. Decide the new name, then rename across the touchpoints: the =custom/idle= waybar module, the keybind mnemonic, and the backing script names (=hypridle-toggle= / =waybar-idle= from the 2026-06-24 idle-inhibitor work). Needs Craig's call on the name first, so not solo.
-
-Renamed to "caffeine" (Craig's call, 2026-06-27): =custom/caffeine= module, =waybar-caffeine= + =caffeine-toggle= scripts, tooltip "Caffeine: ON/OFF", CSS + test suites updated. Keybind stays =$mod+I= (=$mod+C= is hyprpicker). Shipped in dotfiles 8b45b51.
-
-** TODO [#C] set-wallpaper detaches waypaper config from its stow symlink :bug:hyprland:quick:
=set-wallpaper= persists with =mv "$tmp" "$CONFIG"=, which replaces the =~/.config/waypaper/config.ini= stow symlink with a real file. After the first run the live config is detached from =~/.dotfiles/hyprland/.config/waypaper/config.ini=, so a later =git pull= + restow won't update it and set-wallpaper changes never flow back to the repo. Fix: write in place rather than =mv= over the symlink — e.g. =cp "$tmp" "$CONFIG"= (follows the symlink to the real dotfiles file), or resolve the link target and write there. Lives in =~/.dotfiles/hyprland/.local/bin/set-wallpaper=; it has a test suite, so add a Boundary case for "CONFIG is a symlink".
* Archsetup Resolved
@@ -1538,3 +1489,54 @@ CLOSED: [2026-06-24 Wed]
The Hyprland =exec-once= (=hyprland.conf:26=) restores the wallpaper with a hardcoded =awww img ~/pictures/wallpaper/trondheim-norway.jpg=, so any wallpaper set later (via =set-wallpaper=, waypaper, or the dirvish =bg=) reverts on relogin. =set-wallpaper= now persists the choice to =waypaper/config.ini=, so switch the exec-once to =waypaper --restore= (after =awww-daemon= is up) to make set wallpapers survive a relogin. Small, dotfiles-only; verify by setting a different wallpaper, relogging, and confirming it sticks.
Done 2026-06-24 (dotfiles): swapped the line-26 exec-once from the hardcoded =awww img …/trondheim-norway.jpg= to =awww-daemon & sleep 1 && waypaper --restore=. waypaper has a real =awww= backend (in its =--backend= list), the stowed =waypaper/config.ini= carries =backend = awww= plus a default =wallpaper == line, so =--restore= works on a fresh install too. Mechanism verified live: =waypaper --restore= reapplied the persisted wallpaper via awww, exit 0. Relogin confirmation filed under "Manual testing and validation". Follow-up filed: =set-wallpaper='s =mv= detached the live =waypaper/config.ini= from its stow symlink, so set-wallpaper changes no longer flow back to dotfiles.
+** DONE [#B] VM test harness shared one NVRAM file across filesystem profiles :bug:test:
+CLOSED: [2026-06-27 Sat]
+The harness shared one OVMF NVRAM file (=vm-images/OVMF_VARS.fd=) across the btrfs
+and zfs profiles (=init_vm_paths= suffixed the disk image per profile but not the
+NVRAM). NVRAM lives outside the qcow2, so a disk-snapshot revert can't restore it,
+and a zfs run's ZFSBootMenu boot entries clobbered the btrfs GRUB entry. With no
+removable =\EFI\BOOT\BOOTX64.EFI= fallback on the base ESP, the next btrfs run
+booted into UEFI with no bootable device ("BdsDxe: No bootable option or device
+was found", then PXE/HTTP, then SSH timeout before archsetup ran). Found
+2026-06-27 trying to VM-validate the installer refactor.
+
+Fixed: =OVMF_VARS= now carries the same per-profile suffix as the disk image
+(=OVMF_VARS${img_suffix}.fd=) in =vm-utils.sh init_vm_paths=, so btrfs and zfs keep
+separate NVRAM. Validated by a full green zfs run 2026-06-27 (ArchSetup exit 0,
+Testinfra 96 passed / 0 failed). Remaining hardening tracked below.
+** DONE [#B] Guard against live mesa/hyprland/wayland-runtime updates :hyprland:
+CLOSED: [2026-06-28 Sun]
+: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.
+
+Shipped as a pacman PreTransaction hook rather than a wrapper, so it fires no matter how the upgrade is launched (pacman, yay, topgrade). =scripts/hypr-live-update-guard= aborts the transaction before any package is swapped when the GPU/compositor runtime set is being upgraded AND Hyprland is running, pointing the user to re-run from a TTY with the session stopped; it stays quiet when Hyprland isn't running (the safe from-a-TTY path). Override via =HYPR_ALLOW_LIVE_UPDATE=1= or by touching the sentinel file named in the abort message. archsetup installs the script to =/usr/local/bin= and the hook to =/etc/pacman.d/hooks/= in the hyprland path. Decision logic unit-tested (=tests/hypr-live-update-guard=, 9 cases). Live firing test filed under Manual testing and validation. Commits: archsetup (this session).
+** DONE [#B] Collapsible waybar sides :waybar:
+CLOSED: [2026-06-27 Sat]
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-09
+:END:
+Let either side of the waybar collapse horizontally to a minimal base set, toggled by a click. Each collapsible side carries a small triangle / arrowhead pointing toward the screen edge it collapses into (away from center). Clicking it collapses that side to its base set and flips the arrow to point back toward center; clicking again restores the full side. Same shape-changes-with-state idea as the auto-dim indicator.
+
+Spec (2026-06-19): [[file:assets/2026-06-19-collapsible-waybar-sides-spec.org]]. Spike that settled the mechanism: [[file:assets/2026-06-18-collapsible-waybar-sides-spike-findings.org]].
+
+Decisions locked: right base set = date + worldclock + tray; left base set = menu + workspaces; per-side independent; host-agnostic (base set constant, full set is each host's existing config). Mechanism = config-swap + SIGUSR2 reload via an active-config copy in =$XDG_RUNTIME_DIR= (the CSS/state-file approach was disproven — GTK3 can't reflow-hide native modules). Lives in =~/.dotfiles/hyprland/=.
+
+Shipped per spec (dotfiles 804bef6): 3 TDD'd scripts (=waybar-active-config=, =waybar-collapse=, =waybar-arrow=; 22 cases), arrow modules wired into the config (left arrow innermost-left, right arrow innermost-right), CSS ×3, =$mod+[= / =$mod+]= keybinds, and =waybar-toggle= relaunch updated to load the active config so a crash preserves collapse state. Verified live: click, keybind, and per-side independence all work; expand round-trips exactly to canonical.
+** DONE [#C] Collapse waybar sysmonitor to a single icon + hover :feature:waybar:
+CLOSED: [2026-06-27 Sat]
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-24
+:END:
+From the roam inbox (2026-06-22): replace the spread-out sysmonitor readouts (temp, cpu, mem, storage) with one visible icon showing a single chosen metric, the rest in the hover tooltip. Open question: fold it into the battery component instead of a standalone module. Implementation lives in the waybar config under ~/.dotfiles.
+
+Shipped as a standalone =custom/sysmon= module (Craig's call: host-dependent primary — battery on laptop, disk on desktop — rather than fold into battery, which is laptop-only). Backing script =waybar-sysmon= gathers cpu/temp/mem/disk/battery, shows the host-appropriate metric, rest in tooltip; 13-case TDD suite; removed the 5 native modules + their CSS across all 3 themes. Dotfiles be7469b.
+** DONE [#C] Rename idle inhibitor to something more intuitive :chore:waybar:
+CLOSED: [2026-06-27 Sat]
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-24
+:END:
+From the roam inbox (2026-06-24): the "idle inhibitor" name doesn't work as a mnemonic — something like "sleep" (i.e. "keep awake" / "no-sleep") would land better. Decide the new name, then rename across the touchpoints: the =custom/idle= waybar module, the keybind mnemonic, and the backing script names (=hypridle-toggle= / =waybar-idle= from the 2026-06-24 idle-inhibitor work). Needs Craig's call on the name first, so not solo.
+
+Renamed to "caffeine" (Craig's call, 2026-06-27): =custom/caffeine= module, =waybar-caffeine= + =caffeine-toggle= scripts, tooltip "Caffeine: ON/OFF", CSS + test suites updated. Keybind stays =$mod+I= (=$mod+C= is hyprpicker). Shipped in dotfiles 8b45b51.