feat(themes): wallpapers split — 94 MB of runtime-only images leave the flake source
All checks were successful
Check / eval (push) Successful in 4m1s

The split line is consumption time: palette JSONs, previews and
per-theme overrides are read at Nix eval and stay in-repo (~3 MB);
wallpapers are runtime-only (swww via nomarchy-state-sync, never read
at eval) and move to the pinned nomarchy-wallpapers non-flake input
(git.bemagri.xyz/bernardo/Nomarchy-Wallpapers @ 803b48d, all 24 slugs).

New overlay drv nomarchy-default-themes merges the two: repo themes
copied, <slug>/backgrounds symlinked from the input, build FAILS if any
theme JSON lacks non-empty backgrounds — the drift guard for the
two-repo dance. nomarchy-state-sync's wrapper now points straight at
the merged store path (no in-package copy): the package drops from
~94 MB to 32.6 KiB and the wallpapers source appears exactly once in
any system closure, ISO included — offline promise intact. Downstream
custom wallpapers still win ($NOMARCHY_PATH/themes is checked first),
and an explicit state.json wallpaper path still works.

checks re-pointed at the merged tree (theme-wholeswap,
state-sync-validate, auto-theme); theme-contrast and airplane stay on
./themes (JSON/text only). import-palettes.py + README updated;
ROADMAP § Faster switches marked shipped; LATER now carries only the
pre-built-variants follow-on. Also files #151 (v1 launch plan, [human])
with measured history numbers: the 107 MiB pack is 94 MB wallpaper
blobs; all 848 text commits pack to ~15-20 MiB — recommendation
recorded to filter-repo at the GitHub move, not fresh-start.

Verification: V2 — nix flake check --no-build green; theme-wholeswap,
state-sync-validate, auto-theme VM check, downstream-template-home all
green; wallpapers store path exactly once in the state-sync closure;
`list` works from a scratch state dir. V3 queued: live wallpaper render
+ bg-next + custom-override precedence after next pull (HARDWARE-QUEUE).
Lock gained exactly the one input node. Implementation by a Sonnet
subagent; design and review on Fable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 16:52:51 +01:00
parent a818c19a4e
commit 7df7563051
68 changed files with 166 additions and 24 deletions

View File

@@ -13,7 +13,12 @@ Old format (per theme directory):
Output, per theme:
<slug>.json the palette (Nomarchy theme schema)
<slug>/backgrounds/ wallpapers, copied verbatim
<slug>/backgrounds/ wallpapers, copied verbatim — NOTE: this repo's
own themes/ no longer carries backgrounds/ (moved
to the Nomarchy-Wallpapers repo, ROADMAP § "Faster
switches"); if <output-themes-dir> is this repo's
themes/, move the copied backgrounds/ over there
instead of committing them here
<slug>/btop.theme copied from apps/ when present
Hierarchy vs ANSI (#70):
@@ -166,12 +171,16 @@ def main() -> None:
slug = theme["slug"]
(out / f"{slug}.json").write_text(json.dumps(theme, indent=2) + "\n")
# Assets: wallpapers and hand-made per-app theme files.
# Assets: wallpapers and hand-made per-app theme files. Wallpapers
# land in <out>/<slug>/backgrounds/ here for convenience, but if
# <out> is this repo's themes/, move them to the Nomarchy-Wallpapers
# repo instead of committing them (ROADMAP § "Faster switches") —
# this repo's themes/*/backgrounds/ was removed on purpose.
extras = []
if (theme_dir / "backgrounds").is_dir():
shutil.copytree(theme_dir / "backgrounds", out / slug / "backgrounds",
dirs_exist_ok=True)
extras.append(f"{len(list((theme_dir / 'backgrounds').iterdir()))} wallpapers")
extras.append(f"{len(list((theme_dir / 'backgrounds').iterdir()))} wallpapers — move to Nomarchy-Wallpapers")
if (theme_dir / "apps" / "btop.theme").is_file():
(out / slug).mkdir(parents=True, exist_ok=True)
shutil.copyfile(theme_dir / "apps" / "btop.theme", out / slug / "btop.theme")