From 70334e68bb2bc8d6adcf1a8103d5db553f32733b Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Fri, 19 Jun 2026 21:13:08 +0100 Subject: [PATCH] docs(roadmap): record the faster-switches diagnosis + decided approach Flesh out the "Faster switches" item with the confirmed diagnosis (themes/ is 86 MB and backgrounds/ is all of it; the config is ~208 KB; wallpapers are never read at eval; theme-state.json is git-tracked so every apply re-copies the whole 86 MB source) and the decided-but-deferred approach: Option 1, a separate pinned wallpapers artifact (repo/tarball via flake input/fetchurl, read through the existing NOMARCHY_DEFAULT_THEMES hook), which keeps eval pure. Notes the rejected impure-state alternative and the pre-built-theme-variants follow-on. Co-Authored-By: Claude Opus 4.8 --- docs/ROADMAP.md | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 8335cf4..0c5ce2a 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -107,9 +107,26 @@ how to override it. Items marked ✓ are shipped. rendered + captured); real-hardware capture was chosen for fidelity + simplicity, with the VM route as a documented fallback if hand-capturing all themes gets tedious.) -- **Faster switches:** move `backgrounds/` out of the flake source (the 86 MB - re-copy on every state write is the main eval tax), then pre-built theme - variants if still needed +- **Faster switches:** move `backgrounds/` out of the flake source. Diagnosis + (confirmed): `themes/` is 86 MB and `backgrounds/` is **all** of it — the + palette JSONs + per-theme overrides are only ~208 KB, and the wallpapers are + **never read at Nix eval** (only the Python `swww` path uses them). But + `theme-state.json` is git-tracked, so every `apply` rewrites it → the flake + tree changes → Nix re-copies the whole 86 MB source before `home-manager + switch` can evaluate. You pay an 86 MB copy to change a 1 KB file. + **Decided approach (deferred — don't want the extra moving part yet):** + Option 1, a **separate pinned wallpapers artifact** — a `Nomarchy-wallpapers` + repo or release tarball, pulled once via a flake input / `fetchurl` (pinned + by hash → content-addressed, never re-copied on a state write), with + `nomarchy-theme-sync` reading wallpapers from that stable store path (the + `NOMARCHY_DEFAULT_THEMES` env hook already anticipates external theme + assets). Keeps eval **pure**; the live ISO still bakes them in (fetched at + build). A state write then re-copies only ~208 KB. Rejected alternative: + moving `theme-state.json` out to `~/.config` + `--impure` eval (one repo, no + second artifact, but trades away the in-tree-pinned-state reproducibility). + Follow-on if `home-manager switch` itself is still the bottleneck after the + copy is gone: **pre-built theme variants** (build each theme's generation + ahead of time so a switch just activates a cached one). - Greeter (tuigreet/SDDM) theming from the same JSON (Plymouth ships since v1: `nomarchy.system.plymouth.*`, background tinted from the state file) - Installer round 2: multi-disk BTRFS RAID, impermanence, BIOS/legacy