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