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>
@@ -39,7 +39,7 @@ Flat on purpose. Two module trees, one options file each, no hidden layers.
|
||||
├── themes/ # 24 presets: <slug>.json + optional <slug>/ assets
|
||||
│ ├── nord.json # palette (required, works alone)
|
||||
│ └── nord/ # assets (optional, fixed filenames)
|
||||
│ ├── backgrounds/ # wallpapers (auto-picked, SUPER+SHIFT+T cycles)
|
||||
│ ├── backgrounds/ # wallpapers (pinned nomarchy-wallpapers input, not this repo)
|
||||
│ ├── btop.theme # hand-made config drop (else generated)
|
||||
│ └── waybar.css # whole-swap: replaces the generated bar style
|
||||
├── modules/
|
||||
@@ -434,7 +434,7 @@ per theme — a single place to look, unlike the old distro's split:
|
||||
|
||||
| Asset | Mechanism |
|
||||
|---|---|
|
||||
| `backgrounds/` | wallpapers; empty `wallpaper` in the state means "first one"; `bg next` cycles |
|
||||
| `backgrounds/` | wallpapers; empty `wallpaper` in the state means "first one"; `bg next` cycles. Pinned in a separate `nomarchy-wallpapers` flake input, not this repo (ROADMAP § "Faster switches") — merged in at build time |
|
||||
| `btop.theme` | baked into the generation (generated from the palette when absent) |
|
||||
| `waybar.css` | **whole-swap**: replaces the generated bar style entirely (probed at eval time, self-contained) |
|
||||
| `waybar.jsonc` | whole-swap for the bar *layout* (must be plain JSON) |
|
||||
@@ -443,7 +443,9 @@ per theme — a single place to look, unlike the old distro's split:
|
||||
Four themes ship a `waybar.css` identity (summer-day, summer-night,
|
||||
executive-slate, boreal). Custom user themes can live in
|
||||
`$NOMARCHY_PATH/themes/` (preset lookup) and `nomarchy.themesDir` (eval-time
|
||||
asset probe).
|
||||
asset probe) — including their own `backgrounds/`, which wins over the
|
||||
pinned `nomarchy-wallpapers` input (checked first); an explicit `wallpaper`
|
||||
path in `state.json` works too.
|
||||
|
||||
## 5. Day-to-day
|
||||
|
||||
|
||||
@@ -89,12 +89,43 @@ rofi#2317, and take the fix when a release carries it. If it is still open at
|
||||
the next lock bump, that is fine — nothing here rots meanwhile.
|
||||
*Last checked 2026-07-17: open, no maintainer response, no linked PR.*
|
||||
|
||||
### 151. `[human]` v1 launch plan — devise with Bernardo (includes the GitHub move)
|
||||
|
||||
Bernardo, 2026-07-17: before tagging v1, sit down and devise the launch plan.
|
||||
Known ingredients, so that session starts concrete:
|
||||
- **The repo moves to GitHub.** Everything baking the Gitea URL follows: the
|
||||
downstream template's `inputs.nomarchy.url`, the `nomarchy-wallpapers`
|
||||
input URL (baked 2026-07-17 — sweep it in the same move), README/docs
|
||||
links, and CI (eval CI runs on Gitea act_runner — decide GitHub Actions
|
||||
vs keeping Gitea CI on a mirror).
|
||||
- The move is the natural moment for the **history-rewrite decision**, and
|
||||
it is now measured (2026-07-17): the 107 MiB pack is 94.2 MB wallpaper
|
||||
blobs + 9.9 MB preview generations; all 848 commits of *text* pack to
|
||||
~15–20 MiB. So the history is not long-heavy, it is image-heavy.
|
||||
Recommendation on the table: **filter, don't reset** —
|
||||
`git filter-repo` stripping only `themes/*/backgrounds/` keeps every
|
||||
commit's diffs/blame/`log -S` (load-bearing: it diagnosed #147) at a
|
||||
~15–20 MiB clone. Cost: all SHAs change, and ROADMAP/journal cite them —
|
||||
mitigate by freezing the Gitea repo as a read-only archive (old SHAs
|
||||
resolve there; stash filter-repo's commit-map in it) + one ROADMAP note.
|
||||
Argue against a full mirror (ships 94 MB of deleted images to every
|
||||
clone forever) and against fresh-start (burns the archaeology to save
|
||||
~15 MiB).
|
||||
- The existing v1 bar (VISION § v1.0): HARDWARE-QUEUE burn-down, install P0
|
||||
re-verify before the `v1` fast-forward, visual ritual. LICENSE shipped
|
||||
(MIT, 2026-07-17).
|
||||
- Adjacent calls that may fold in: cachix/public binary cache (#120's
|
||||
prerequisite), the netinstall decision itself, release notes/announce.
|
||||
|
||||
`v1` stays human-only throughout — agents prepare evidence and checklists,
|
||||
never the tag or branch.
|
||||
|
||||
## LATER
|
||||
|
||||
- **Wallpapers artifact split** (ROADMAP § Faster switches — decided,
|
||||
deferred): pinned `Nomarchy-wallpapers` input so a state write stops
|
||||
re-copying 86 MB. Follow-on: pre-built theme variants if switches are
|
||||
still slow after.
|
||||
- **Pre-built theme variants** (ROADMAP § Faster switches follow-on): if
|
||||
`home-manager switch` itself is still the theme-switch bottleneck now
|
||||
that the wallpapers split shipped (2026-07-17), pre-build each theme's
|
||||
generation so a switch just activates a cached one. Measure first.
|
||||
- **Installer round 2** (ROADMAP § Installer): multi-disk BTRFS RAID,
|
||||
impermanence, BIOS/legacy boot.
|
||||
- **Boot-from-snapshot**: a systemd-boot equivalent of grub-btrfs.
|
||||
|
||||
@@ -39,6 +39,12 @@ Everything else below stays open; order is convenience, not a gate.
|
||||
toast appears. Same relogin answers #149's question (does the Waybar
|
||||
unit still race Hyprland IPC on a cold relogin without linger?).
|
||||
**Fail:** the panel stays lit inside the shut lid (the #148 symptom).
|
||||
- [ ] **Wallpapers-split live smoke (dev box)** — after the next
|
||||
`nomarchy-pull` + `nomarchy-home`: wallpaper still renders at session
|
||||
start; `SUPER+SHIFT+T` (bg next) cycles; `readlink` of the applied
|
||||
image resolves into the `nomarchy-wallpapers` store path, not the
|
||||
repo. **Pass:** all three. A custom wallpaper dropped in
|
||||
`~/.nomarchy/themes/<slug>/backgrounds/` must still win.
|
||||
- [ ] **#115 suspend-then-hibernate (laptop with hibernate/resume wired)** —
|
||||
after system rebuild: Preferences shows **Suspend then hibernate (on)**
|
||||
(hidden if `CanHibernate=no`). Confirm:
|
||||
|
||||
@@ -19,6 +19,26 @@ Template:
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-17 — Wallpapers split shipped: 94 MB out of the flake source
|
||||
- **Task:** LATER "Wallpapers artifact split" (promoted by Bernardo live —
|
||||
he created the Nomarchy-Wallpapers repo mid-session). Also filed #151
|
||||
(v1 launch plan, [human]) with measured history numbers.
|
||||
- **Did:** all 24 themes' backgrounds → Nomarchy-Wallpapers (803b48d,
|
||||
pushed); new `nomarchy-wallpapers` non-flake input; overlay drv
|
||||
`nomarchy-default-themes` merges repo themes (~3 MB) + input backgrounds
|
||||
with a build-failing drift guard; state-sync wrapper points at the
|
||||
merged store path (package 94 MB → 32.6 KiB); checks re-pointed;
|
||||
`themes/*/backgrounds/` git-rm'd. Split line: eval-time assets stay
|
||||
in-repo, runtime-only wallpapers move. Sonnet implemented; design +
|
||||
review here.
|
||||
- **Verified:** V2 — flake check green; theme-wholeswap, state-sync-validate,
|
||||
auto-theme VM check, template HM build all green; wallpapers source
|
||||
exactly once in the closure; `list` works from a scratch state dir.
|
||||
- **Pending:** V3 queued (wallpaper renders + bg-next after next pull;
|
||||
custom-wallpaper override precedence). History rewrite decision folded
|
||||
into #151.
|
||||
- **Next suggestion:** #151 planning session with Bernardo.
|
||||
|
||||
## 2026-07-17 — v1-prep hygiene sweep: repo is clean; LICENSE was the real gap
|
||||
- **Task:** Bernardo asked for a structure/necessity audit + full docs sweep
|
||||
ahead of v1. Three Sonnet passes (structure, docs-vs-code, mechanical
|
||||
|
||||
@@ -193,7 +193,7 @@ Design/decision records and a running log of shipped work (items marked
|
||||
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. Diagnosis
|
||||
- ✓ **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
|
||||
@@ -213,6 +213,17 @@ Design/decision records and a running log of shipped work (items marked
|
||||
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).
|
||||
**Shipped (2026-07-17):** Option 1, exactly as decided. New `nomarchy-wallpapers`
|
||||
flake input (`flake = false`, its own repo, `<slug>/backgrounds/*`); a new
|
||||
overlay derivation `nomarchy-default-themes` copies this repo's `./themes`
|
||||
(now ~3 MB — JSONs, previews, btop/waybar/rofi overrides) and symlinks in
|
||||
`backgrounds/` per slug from the input, failing the build if a theme JSON
|
||||
has no matching non-empty backgrounds (drift guard, belt to
|
||||
`check-theme-wholeswap.py`'s same assertion). `nomarchy-state-sync`'s
|
||||
`themesDir` now points straight at that merged store path (no more
|
||||
in-package `cp -r`) — its own closure dropped from ~94 MB to a few hundred
|
||||
KB. `themes/*/backgrounds/` removed from this repo's working tree going
|
||||
forward (existing git history still carries the old blobs — not rewritten).
|
||||
- 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
|
||||
|
||||
18
flake.lock
generated
@@ -212,6 +212,23 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nomarchy-wallpapers": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1784302860,
|
||||
"narHash": "sha256-nQ+eLEggLxDcbKks3Ui6rbJ4P24H2JXenLLg9si007M=",
|
||||
"ref": "main",
|
||||
"rev": "803b48ddf35aeff08999c8c7f563457181105cf5",
|
||||
"revCount": 2,
|
||||
"type": "git",
|
||||
"url": "https://git.bemagri.xyz/bernardo/Nomarchy-Wallpapers.git"
|
||||
},
|
||||
"original": {
|
||||
"ref": "main",
|
||||
"type": "git",
|
||||
"url": "https://git.bemagri.xyz/bernardo/Nomarchy-Wallpapers.git"
|
||||
}
|
||||
},
|
||||
"nur": {
|
||||
"inputs": {
|
||||
"flake-parts": [
|
||||
@@ -243,6 +260,7 @@
|
||||
"nixos-hardware": "nixos-hardware",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"nixpkgs-unstable": "nixpkgs-unstable",
|
||||
"nomarchy-wallpapers": "nomarchy-wallpapers",
|
||||
"stylix": "stylix"
|
||||
}
|
||||
},
|
||||
|
||||
60
flake.nix
@@ -30,9 +30,20 @@
|
||||
url = "github:NixOS/nixos-hardware/master";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
# Wallpapers only — split out of this repo (ROADMAP § "Faster
|
||||
# switches") so a `state.json` write stops re-copying ~94 MB of
|
||||
# backgrounds/ before Nix can evaluate a 1 KB change. Runtime-only:
|
||||
# never read at eval, only by nomarchy-state-sync's Python (swww
|
||||
# path) via NOMARCHY_DEFAULT_THEMES. `flake = false` — it's just a
|
||||
# content tree (`<slug>/backgrounds/*`), not a flake.
|
||||
nomarchy-wallpapers = {
|
||||
url = "git+https://git.bemagri.xyz/bernardo/Nomarchy-Wallpapers.git?ref=main";
|
||||
flake = false;
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, nixpkgs-unstable, home-manager, stylix, nixos-hardware, ... }:
|
||||
outputs = { self, nixpkgs, nixpkgs-unstable, home-manager, stylix, nixos-hardware, nomarchy-wallpapers, ... }:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
username = "nomarchy"; # reference host only; downstream picks its own
|
||||
@@ -95,10 +106,43 @@
|
||||
inherit (prev.stdenv.hostPlatform) system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
# The default themes root: this repo's ./themes (JSONs, previews,
|
||||
# btop/waybar/rofi overrides — ~3 MB post wallpaper-split) merged
|
||||
# with backgrounds/ symlinked in from the pinned nomarchy-wallpapers
|
||||
# input. One tree so nomarchy-state-sync (baked-in fallback) and
|
||||
# the theme-wholeswap check both see slug/backgrounds/ in the same
|
||||
# place a downstream machine would via NOMARCHY_DEFAULT_THEMES.
|
||||
nomarchy-default-themes =
|
||||
let
|
||||
wallpaperSlugs = builtins.attrNames
|
||||
(nixpkgs.lib.filterAttrs (n: t: t == "directory")
|
||||
(builtins.readDir nomarchy-wallpapers));
|
||||
linkBackgrounds = slug: ''
|
||||
if [ -d ${nomarchy-wallpapers}/${slug}/backgrounds ]; then
|
||||
mkdir -p $out/${slug}
|
||||
ln -s ${nomarchy-wallpapers}/${slug}/backgrounds $out/${slug}/backgrounds
|
||||
fi
|
||||
'';
|
||||
in
|
||||
final.runCommand "nomarchy-default-themes" { } ''
|
||||
cp -r ${./themes} $out
|
||||
chmod -R u+w $out
|
||||
|
||||
${nixpkgs.lib.concatMapStringsSep "\n" linkBackgrounds wallpaperSlugs}
|
||||
|
||||
for j in $out/*.json; do
|
||||
slug=$(basename "$j" .json)
|
||||
if [ ! -d "$out/$slug/backgrounds" ] || [ -z "$(ls -A "$out/$slug/backgrounds" 2>/dev/null)" ]; then
|
||||
echo "nomarchy-default-themes: $slug has no non-empty backgrounds/ (drift vs nomarchy-wallpapers)" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
'';
|
||||
nomarchy-state-sync = final.callPackage ./pkgs/nomarchy-state-sync {
|
||||
# Presets baked into the package, so `nomarchy-state-sync list`
|
||||
# works on machines that don't check out this repo.
|
||||
themesDir = ./themes;
|
||||
# works on machines that don't check out this repo. Already a
|
||||
# store artifact (nomarchy-default-themes) — no copy needed.
|
||||
themesDir = final.nomarchy-default-themes;
|
||||
};
|
||||
nomarchy-doctor = final.callPackage ./pkgs/nomarchy-doctor { };
|
||||
nomarchy-battery-notify = final.callPackage ./pkgs/nomarchy-battery-notify { };
|
||||
@@ -336,11 +380,13 @@
|
||||
# Whole-swap waybar.css is read raw (no palette prepend) — every
|
||||
# @color it references must be @define-color'd in the same file
|
||||
# (neon-glass shipped zero defines; BACKLOG #62). Also gate
|
||||
# preview.png + non-empty backgrounds/ per preset.
|
||||
# preview.png + non-empty backgrounds/ per preset — run against
|
||||
# the merged tree (pkgs.nomarchy-default-themes) so this doubles
|
||||
# as the drift guard between this repo and nomarchy-wallpapers.
|
||||
theme-wholeswap = pkgs.runCommand "nomarchy-theme-wholeswap"
|
||||
{ nativeBuildInputs = [ pkgs.python3 ]; }
|
||||
''
|
||||
python3 ${./tools/check-theme-wholeswap.py} ${./themes}
|
||||
python3 ${./tools/check-theme-wholeswap.py} ${pkgs.nomarchy-default-themes}
|
||||
touch $out
|
||||
'';
|
||||
|
||||
@@ -389,7 +435,7 @@
|
||||
''
|
||||
set -eu
|
||||
tool=${./pkgs/nomarchy-state-sync/nomarchy-state-sync.py}
|
||||
export NOMARCHY_DEFAULT_THEMES=${./themes}
|
||||
export NOMARCHY_DEFAULT_THEMES=${pkgs.nomarchy-default-themes}
|
||||
|
||||
mkdir good && cp ${./templates/downstream/state.json} good/state.json
|
||||
chmod +w good/state.json
|
||||
@@ -2180,7 +2226,7 @@
|
||||
)
|
||||
|
||||
env = ("NOMARCHY_PATH=/root/.nomarchy "
|
||||
"NOMARCHY_DEFAULT_THEMES=${./themes} "
|
||||
"NOMARCHY_DEFAULT_THEMES=${pkgs.nomarchy-default-themes} "
|
||||
"NOMARCHY_REBUILD=/root/rebuild ")
|
||||
|
||||
# Pair + schedule (setup writes only, no rebuild).
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
, git
|
||||
# Shipped theme presets, baked into the package as a fallback so
|
||||
# `list`/`apply` work even when $NOMARCHY_PATH has no themes/ dir.
|
||||
# Already a store artifact (nomarchy-default-themes merges the repo's
|
||||
# ./themes with backgrounds/ symlinked from nomarchy-wallpapers) — the
|
||||
# wrapper points straight at it, no copy, so it stays in the closure
|
||||
# without duplicating it into $out.
|
||||
, themesDir ? null
|
||||
}:
|
||||
|
||||
@@ -25,17 +29,12 @@ stdenvNoCC.mkDerivation {
|
||||
install -Dm755 nomarchy-state-sync.py $out/bin/nomarchy-state-sync
|
||||
patchShebangs $out/bin/nomarchy-state-sync
|
||||
|
||||
${lib.optionalString (themesDir != null) ''
|
||||
mkdir -p $out/share/nomarchy
|
||||
cp -r ${themesDir} $out/share/nomarchy/themes
|
||||
''}
|
||||
|
||||
# Stdlib-only Python. home-manager is deliberately NOT wrapped in —
|
||||
# the rebuild must use the user's own home-manager from their PATH.
|
||||
wrapProgram $out/bin/nomarchy-state-sync \
|
||||
--prefix PATH : ${lib.makeBinPath [ awww libnotify git ]} \
|
||||
${lib.optionalString (themesDir != null)
|
||||
"--set NOMARCHY_DEFAULT_THEMES $out/share/nomarchy/themes"}
|
||||
"--set NOMARCHY_DEFAULT_THEMES ${themesDir}"}
|
||||
|
||||
# #107: old CLI name kept as a symlink so muscle memory and scripts
|
||||
# survive a pull (drop after the next stable release notes say so).
|
||||
|
||||
|
Before Width: | Height: | Size: 5.3 MiB |
|
Before Width: | Height: | Size: 652 KiB |
|
Before Width: | Height: | Size: 353 KiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 254 KiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 3.8 MiB |
|
Before Width: | Height: | Size: 315 KiB |
|
Before Width: | Height: | Size: 661 KiB |
|
Before Width: | Height: | Size: 287 KiB |
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 3.9 MiB |
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 434 KiB |
|
Before Width: | Height: | Size: 2.2 MiB |
|
Before Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 1.5 MiB |
|
Before Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 2.0 MiB |
|
Before Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 1010 KiB |
|
Before Width: | Height: | Size: 471 KiB |
|
Before Width: | Height: | Size: 653 KiB |
|
Before Width: | Height: | Size: 983 KiB |
|
Before Width: | Height: | Size: 2.3 MiB |
|
Before Width: | Height: | Size: 3.1 MiB |
|
Before Width: | Height: | Size: 384 KiB |
|
Before Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 2.1 MiB |
|
Before Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 3.4 MiB |
|
Before Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 2.5 MiB |
|
Before Width: | Height: | Size: 3.4 MiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 889 KiB |
|
Before Width: | Height: | Size: 205 KiB |
|
Before Width: | Height: | Size: 1.5 MiB |
|
Before Width: | Height: | Size: 798 KiB |
|
Before Width: | Height: | Size: 248 KiB |
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 4.8 MiB |
|
Before Width: | Height: | Size: 3.6 MiB |
|
Before Width: | Height: | Size: 2.8 MiB |
|
Before Width: | Height: | Size: 2.7 MiB |
|
Before Width: | Height: | Size: 4.6 MiB |
|
Before Width: | Height: | Size: 263 KiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 955 KiB |
|
Before Width: | Height: | Size: 444 KiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 403 KiB |
|
Before Width: | Height: | Size: 2.0 MiB |
@@ -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")
|
||||
|
||||