Some checks failed
Check / eval (push) Has been cancelled
The machine flake's git-tracked settings file is system state, not "theme" only — rename it to state.json. CLI becomes nomarchy-state-sync with a nomarchy-theme-sync symlink for scripts and muscle memory. Eval (mkFlake, doctor, lifecycle) still accepts theme-state.json; the next write migrates to state.json and removes the legacy file. Documented in MIGRATION.md; drop the CLI alias after release notes.
3.3 KiB
3.3 KiB
Goals — what "done" looks like for Nomarchy
The north star every loop iteration serves. When two options conflict,
the earlier pillar wins. Product themes toward a v1.0 ship (day-2
confidence, default identity, release bar) live in
docs/VISION.md — still subordinate to these pillars.
The four pillars (in priority order)
- Rock-stable. A workstation you never fight. Everything is a NixOS/HM
generation — atomic, rollbackable, never partial.
nix flake checkis green at every commit onmain. Regressions are caught by the VM-test suite (checks.*), not by users.v1only ever advances after human on-hardware QA. - Reproducible, with zero hidden state. The downstream flake checkout
is the machine. All user-settable config is menu-writable into the
git-tracked state file (
state.jsonsettings.*) — never~/.local/state, never~/.configside files. Re-cloning your flake reproduces the machine, settings and all. - Effortless to configure. The user never has to learn Nix. Every
common knob is reachable from
nomarchy-menu(SUPER+M); the menu is an ergonomic writer for the flake. Where a toggle can take effect without a rebuild, it must (--no-switch+ flip the running service). - Beautiful. One JSON themes the entire desktop coherently — Hyprland, Waybar, Kitty, btop, rofi, GTK/Qt, boot splash, greeter. Every new surface follows the palette. Informative, self-gating Waybar modules (they hide when irrelevant). No unthemed corner survives contact with the theme switcher.
Quality bars (non-negotiable)
- The honesty rule (docs/TESTING.md): for anything visual, "the Nix evaluates" is not "it renders". Verify at the highest tier you can reach (see LOOP.md's verification ladder) and state the tier you reached. Never claim a check you didn't run.
- Parity rule: any module added to the generated Waybar config must
also be added to the summer-day/night
waybar.jsoncwhole-swaps. - Menu placement: new menu entries go in the right category submenu
(Tools › / System ›), with a direct
SUPER+CTRL+<mnemonic>bind and self-gating where applicable. The root picker stays six entries. - Opt-in features ship a commented example in
templates/downstream/{home,system}.nix. - Option surface discipline: a toggle exists only when there is real
config behind it. Bare package installs go in the template's
home.packages(opt-out = delete the line), never anomarchy.apps.*.
Non-goals (do not drift into these)
- No binary cache. Compile-from-source is a deliberate values call; automation targets the config/lock channel, not artifact distribution.
- No second theming pipeline. The dispatcher owns menu structure; the renderer (rofi) stays swappable. No GTK4 launcher.
- No nixpkgs major bump on
main. Lock updates stay within the pinned release branch; a release jump is a deliberatev2, hand-edited by the maintainer (the last attempt was discarded over a Hyprland OOM — see agent/MEMORY.md). - No repo-wide reformat. The
.nixfiles use deliberate aligned hand-formatting; adopting a formatter is an open maintainer decision (BACKLOG.md § Decisions), not a cleanup. - No multi-DE. Hyprland is the desktop.