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.
61 lines
3.3 KiB
Markdown
61 lines
3.3 KiB
Markdown
# 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`](../docs/VISION.md) — still subordinate to these pillars.
|
||
|
||
## The four pillars (in priority order)
|
||
|
||
1. **Rock-stable.** A workstation you never fight. Everything is a NixOS/HM
|
||
generation — atomic, rollbackable, never partial. `nix flake check` is
|
||
green at every commit on `main`. Regressions are caught by the VM-test
|
||
suite (`checks.*`), not by users. `v1` only ever advances after human
|
||
on-hardware QA.
|
||
2. **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.json` `settings.*`) — never
|
||
`~/.local/state`, never `~/.config` side files. Re-cloning your flake
|
||
reproduces the machine, settings and all.
|
||
3. **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).
|
||
4. **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.jsonc` whole-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 a `nomarchy.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 deliberate `v2`, hand-edited by the
|
||
maintainer (the last attempt was discarded over a Hyprland OOM — see
|
||
agent/MEMORY.md).
|
||
- **No repo-wide reformat.** The `.nix` files 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.
|