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 <noreply@anthropic.com>
This commit is contained in:
@@ -107,9 +107,26 @@ how to override it. Items marked ✓ are shipped.
|
|||||||
rendered + captured); real-hardware capture was chosen for fidelity +
|
rendered + captured); real-hardware capture was chosen for fidelity +
|
||||||
simplicity, with the VM route as a documented fallback if hand-capturing all
|
simplicity, with the VM route as a documented fallback if hand-capturing all
|
||||||
themes gets tedious.)
|
themes gets tedious.)
|
||||||
- **Faster switches:** move `backgrounds/` out of the flake source (the 86 MB
|
- **Faster switches:** move `backgrounds/` out of the flake source. Diagnosis
|
||||||
re-copy on every state write is the main eval tax), then pre-built theme
|
(confirmed): `themes/` is 86 MB and `backgrounds/` is **all** of it — the
|
||||||
variants if still needed
|
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
|
- Greeter (tuigreet/SDDM) theming from the same JSON (Plymouth ships since
|
||||||
v1: `nomarchy.system.plymouth.*`, background tinted from the state file)
|
v1: `nomarchy.system.plymouth.*`, background tinted from the state file)
|
||||||
- Installer round 2: multi-disk BTRFS RAID, impermanence, BIOS/legacy
|
- Installer round 2: multi-disk BTRFS RAID, impermanence, BIOS/legacy
|
||||||
|
|||||||
Reference in New Issue
Block a user