Two unreferenced asset files removed; two larger concerns deferred to roadmap rows because they need more thought than a focused audit allows. Deleted: - `features/apps/alacritty/config/alacritty.toml` — the alacritty module uses `programs.alacritty.settings` (Nix attrset) exclusively; nothing references the on-disk file. The neighbouring (already-empty) `themes/` directory goes with it. - `themes/templates/mako.ini.tpl` — no script reads it. Deferred to ROADMAP "Later": - `features/apps/chromium/Default/Preferences` is deployed as a Home Manager symlink into chromium's mutable profile directory. Either silently replaced on first save or silently failing to write — either way the static defaults don't survive. The actual chromium theming work happens via managed policies in core/system/browser.nix. Needs chromium-internals knowledge to decide whether to remove or rework, so flagged rather than unilaterally deleted. - `themes/templates/*.tpl` (the remaining 10 templates) are also apparently orphan — deployed via xdg.dataFile but unconsumed by any script. Likely vestigial from a pre-stylix templating system. Logged as a separate row to decide deletion vs documentation as user-reference assets. Found during Pillar 8 audit of features/apps.
36 KiB
Nomarchy Roadmap
This is the mid-term plan for Nomarchy. It exists so future sessions — human or agent — can pick up work without re-deriving context. Items move from Now → Next → Later as priorities shift, and from any column into Shipped at the bottom when done. There are no dates: ship-when-ready.
If you're new here, also read docs/STRUCTURE.md and docs/OPTIONS.md. Existing-NixOS users should also read docs/MIGRATION.md.
1. Vision & guardrails
Nomarchy is a NixOS-based distribution that gives you a polished Hyprland desktop (Hyprland + waybar + walker + a curated theming engine) on a strictly declarative, flake-based foundation. Goal: power-user polish without giving up reproducibility.
Guardrails (apply when adding anything):
- Declarative-first. No imperative state in
core/. Anything mutable lives in~/.config/nomarchy/state.jsonor in NixOS options. - Downstream-flake friendly. Every behavior toggle is a
nomarchy.*option documented indocs/OPTIONS.md. Adding a feature without a corresponding option is a bug. - Opt-in by default. New features default off (or default to the existing behavior). The installer can flip defaults for the user, but the option must read sensibly when set by hand.
- Reuse before invent. Before adding a script, grep
core/system/scripts/,features/scripts/utils/, andthemes/engine/scripts/— there are ~155 of them, and many of the things you want already exist.
2. Now / Next / Later board
Now (ready to pick up)
- Full QA audit of shipped features. Walk every feature/component end-to-end on a real install, fix what's small, log what's not. Runs as per-component PR sweeps — methodology in Pillar 8.
- Installer: "What's installed?" summary on first boot. Surface what the installer actually wrote (theme, font, profiles, drives, form factor) from
state.json+nomarchy-system-scriptsintrospection so the user can verify before they start customising. Detail in Pillar 4. - Installer: optional non-LUKS branch. Let users explicitly opt out of FDE during install. Detail in Pillar 4.
Next (bigger lifts that build on Now)
- Accessibility — home-side companion. Hyprland-side bits the system preset can't reach: slower
input.repeat_rate/repeat_delaydefaults,SUPER+ALT+Skeybinding to launch Orca, and a high-contrast palette underthemes/palettes/. Gated on a newnomarchy.accessibility.enablemirror of the system option. - Gaming — declarative flathub remote.
services.flatpak.enabledoesn't ship a declarative remote API in nixpkgs. Either add theflatpak-managed-installoverlay, write a one-shot systemd unit that runsflatpak remote-add --if-not-exists flathub …, or surface the manual step innomarchy-welcome. - Plymouth theme variants per palette. Currently one Plymouth theme; could template per-palette so the boot splash matches the active theme.
- Implement
nomarchy.overrides.*file-based override loader. The option surface is declared incore/home/overrides.nixbut the loader doesn't exist — files dropped under~/.config/nomarchy/overrides/are ignored. Spec: whenoverrides.enable = true, for eachxdg.configFile.<path>Nomarchy deploys withlib.mkDefault, check whether~/.config/nomarchy/overrides/<path>exists at build time; if so, use it as the source. Requires deciding whether discovery happens at activation time (cheap, but rebuild-required to pick up new files) or via a populatedpathsattrset (Nix-side, evaluated once per rebuild). Until shipped, document the per-file workaround (xdg.configFile.<path>.source = ./mine) in OPTIONS.md.
Later (speculative or research-shaped)
- Declarative-state migration. Move the bits of
state.jsonthat don't actually need runtime mutability (theme, font, isLightMode) into NixOS / home-manager options, leaving only genuinely runtime-only state behind. Reduces the "two sources of truth" surface. - Rolling vs pinned channel choice in the installer. Today the generated flake pins
nomarchyto a rev. Offer a "rolling" option that followsmainand anomarchy-rollbackhelper for stuck rebuilds. - Theme creation wizard. A
nomarchy-theme-newscript that scaffolds a new palette from a base16 hex set (or by sampling a wallpaper), runsnomarchy-themes-prebuild, and opens a PR template. - CI matrix on Forgejo Actions. On every push:
nix flake check, buildnomarchy-installer,nomarchy-live,default. On tag: publish ISOs as release artefacts. - Golden-image VM tests per palette. A
nixosTestper palette that boots thedefaultconfig, takes a screenshot, and diffs against a golden image. Catches Stylix regressions before they hit users. - Forgejo release pipeline.
vYY.MM.xtags matching the upstream NixOS channel; the pipeline pushes the three ISOs and an updatedflake.locksnapshot. - Optional
nomarchy-installer-vmrebuilt as a real flake app (not a one-off shell script) so users can install Nomarchy into a libvirt VM declaratively. - Surface support module via the relevant
nixos-hardwareprofile + Surface kernel patches behind anomarchy.hardware.isSurfacetoggle. - Consolidate palette imports in
flake.nixvianomarchyLib.flake.nix:79-80re-imports./themes/palettesand recomputesthemeNameseven thoughlib/default.nixalready exports both. Two computations, same result today — drift risk tomorrow. ImportnomarchyLib = import ./lib { inherit lib; }once and usenomarchyLib.{palettes,themeNames}to makelib/default.nixthe single source of truth for the theme list. - Decide what to do about
features/apps/chromium/Default/Preferences. The module deploys a static 204-byteDefault/Preferences(settingextensions.theme.use_system = false,browser.theme.color_scheme = 2) into chromium's mutable profile directory via Home Manager symlink. Chromium expects to write that file at runtime, so either the symlink is silently replaced on first save (losing the static defaults) or the write fails silently. The real chromium theming work happens via managed policies incore/system/browser.nix. Probably the user-profile deployment should be removed; needs someone with chromium-internals knowledge to confirm before deletion. themes/templates/*.tpl— decide what these are for. Eleven mustache-style templates (alacritty.toml.tpl,btop.theme.tpl,kitty.conf.tpl, etc.) are deployed to~/.local/share/nomarchy/templates/viathemes/engine/files.nix, but no script in the tree consumes them. Likely vestigial from a pre-stylix templating system. Either delete the directory + thexdg.dataFiledeployment, or document them as user-reference assets and explain how to use them.
3. Pillar: Script & menu audit
Nomarchy ships ~155 nomarchy-* scripts across three directories, plus a 379-line nomarchy-menu with 23 submenu functions. Some are first-class Nomarchy work; some are direct Omarchy ports that haven't been adapted; some are dangling references the menu calls but no script implements (e.g. nomarchy-backup, nomarchy-debug, nomarchy-pkg, nomarchy-pkg-aur-add, nomarchy-plymouth, nomarchy-refresh-hyprland, nomarchy-reinstall, nomarchy-rollback, nomarchy-screenrecord-filename, nomarchy-theme, nomarchy-update-firmware, nomarchy-upload-log, nomarchy-version, nomarchy-wallpaper, nomarchy-skill, nomarchy-luks).
This pillar fixes that. It runs as two phases.
Phase A — Inventory & triage
Lands as a single PR. Output is docs/SCRIPTS.md populated with rows for every script and every menu item.
- Run a generator (one-shot helper, doesn't have to be checked in) that produces three lists:
- All
nomarchy-*scripts undercore/system/scripts/,features/scripts/utils/,themes/engine/scripts/. - All
nomarchy-*callers (grepcore/,features/,themes/,installer/,bin/). - The set difference (orphaned callers ↔ unreferenced scripts).
- All
- Walk
features/scripts/utils/nomarchy-menuand list every menu entry with its target script. - Tag each row with a status:
kept— works on Nomarchy, no change needed.port-from-omarchy— exists upstream, needs adapting (drop pacman/yay/AUR, repath to NixOS, talk tonomarchy.system.*options).delete-dead— neither used nor needed; remove and update callers.stub-with-notify— temporarily replace with anotify-send "Not yet implemented in Nomarchy"so the menu stops looking broken until the work is scheduled.unknown— needs a deeper look before tagging.
- The completed table lives at
docs/SCRIPTS.md. The roadmap links to it; this section just sets the methodology.
Phase B — Adapt or remove
Lands as PR batches of ~10 scripts each, branch named wave/audit-<batch>. Per script:
- For
port-from-omarchy: rewrite the script for Nomarchy paths (/etc/nixos,nixos-rebuild,home-manager, no Arch idioms), wire it intonomarchy.system.*where applicable, and update every caller (menu, waybar, keybindings). - For
delete-dead:git rmthe script and fix every caller — afind+sedpass againstnomarchy-menu, every*.conf, and every nix file. - For
stub-with-notify: write the one-liner stub in place. The roadmap row stays open until the real implementation lands.
Each PR description should reference the row(s) in docs/SCRIPTS.md it closes, and reviewers spot-check that no caller still points at a stale name.
4. Pillar: Installer
- "What's installed?" summary screen on boot of a freshly-installed system, sourced from
state.json+nomarchy-system-scriptsintrospection (Now). - Optional non-LUKS branch in the installer for users who explicitly opt out of FDE (Now).
- Richer disk metadata (Shipped).
disko-golden.nixvariants for software-RAID and BTRFS-pool-as-root (Shipped).- Pre-flight resume polish (Shipped).
- Software-profile multi-select (Shipped).
- Form-factor → laptop preset (Shipped).
5. Pillar: Power, hardware, presets
- Auto-detect dGPU presence in
installer/hardware-db.shand pre-fillhardware.nvidia.prime.{intel,nvidia}BusIdin the generatedsystem.nix(driver stack itself is Shipped — see entry below). - Surface support behind
nomarchy.hardware.isSurface(Later). - Laptop preset: TLP, upower, brightness, lid, hypridle tuning (Shipped).
- Desktop preset: performance governor, no laptop UI (already filtered), ZFS hooks (Shipped).
- Accessibility preset (Shipped).
- Gaming preset (Shipped).
- Vendor matchers in
installer/hardware-db.sh(Shipped — ROG Ally added; Surface/Framework/Lenovo entries corrected; Steam Deck + Snapdragon X documented as nixos-hardware-unsupported. CI now lints DB references).
6. Pillar: Onboarding & docs
nomarchy-welcomefirst-run wizard (Shipped).docs/KEYBINDINGS.mdauto-generator (Shipped).docs/TROUBLESHOOTING.md(Shipped).docs/index.md/ README docs index (Shipped —README.mdlinks every doc indocs/).nomarchy-manual— opens the local~/.local/share/nomarchy/README.mdviaxdg-open(Shipped).
7. Pillar: Test, CI, release
- Forgejo Actions workflow:
- on every push to
main:nix flake check(≈ what we run by hand today). - on every PR: also build all three ISOs (cache hit on most of them).
- on tag
vYY.MM.x: publish ISOs as release artefacts.
- on every push to
- Versioning scheme:
vYY.MM.xmatching the upstream NixOS channel (e.g.v25.11.3). nixosTestper palette: bootsdefaultin a VM, screenshots the SDDM splash and the Hyprland desktop, diffs vs golden. Failure surfaces as CI red.- A small
bin/utils/nomarchy-bench-iso-buildthat records ISO build time + size into a per-commit JSON so we notice regressions.
8. Pillar: QA audit — features & components
Nomarchy now spans an installer, ~159 nomarchy-* scripts, a Hyprland desktop stack (Hyprland + waybar + walker + nightlight + idle), curated apps, a 22-palette theme engine, and two ISO hosts. Pillar 3 audited script existence; this pillar audits feature behavior. The goal: walk every shipped feature end-to-end on a real install, fix every bug or surprise inline when small, and capture the rest as new roadmap rows.
Runs as per-component sweeps. One PR per component, branch wave/qa-<component>. Don't grow scope mid-PR — bugs that need a new option, refactor, or missing module become a new Now/Next row.
Components (each is one sweep):
- Installer —
installer/install.sh,installer/hardware-db.sh, disko configs. Fresh install +--resume+--dry-run, on laptop and desktop, with FDE (non-LUKS branch is Later). Verify every generated file (flake.nix,system.nix,home.nix,hardware-selection.nix,state.json) is correct and idempotent. - First-boot UX —
nomarchy-welcome, generatedhome.nix, SDDM and Plymouth metadata, default theme/font/panel position. Re-run on a clean VM; note every prompt that confuses and every default that's wrong. - Core system modules —
core/system/*(laptop, desktop, accessibility, gaming, hybridGPU, impermanence, network, hardware, branding). For each: enable → rebuild → observe the claimed effect → disable → rebuild → observe it's gone. Cross-check againstdocs/OPTIONS.md. - Core home modules —
core/home/*(options, state, behavior, overrides, deployed config). Verify every home-sidenomarchy.*option does what its description claims; confirm~/.config/nomarchy/overrides/actually overrides. - Desktop stack — Hyprland (keybindings, window rules, monitors, input), waybar (every module × both panel positions × both form factors), walker (every launcher mode), idle, nightlight, notifications (mako). Reconcile
docs/KEYBINDINGS.mdagainst runtime. - Apps —
features/apps/*. Each app: launches, themed via Stylix, configured as expected. Catches the "we package it but nobody configured it" class. - Theme engine + palettes —
nomarchy-theme-setacross all 22 palettes, font and wallpaper switchers, light-mode toggle. Verify per-palette Stylix targets render correctly across SDDM, Plymouth, GTK, Qt, terminals, browsers, waybar, walker. - Scripts (runtime behavior) — Pillar 3 confirmed existence; this sweep runs every user-visible script (especially every
nomarchy-menuentry) on current NixOS and confirms it actually does the thing. - ISOs — boot
nomarchy-installerandnomarchy-live; verify thenomarchy-test-live-isoflow; check the installer ISO ships every toolinstall.shcalls (regression class:hardware-db.shmissing, already shipped). - Lib + state schema —
lib/state-schema.nix, color resolution, path helpers. Cross every codepath that producesstate.json(installer, welcome wizard, hand-edit) against the schema; confirm bad inputs are rejected with a useful message.
Per-PR deliverable:
- PR body lists what was tested, what was broken, what was fixed inline, what was deferred (with the new roadmap row linked).
- Doc updates ride with the change per
docs/AGENT.md§5.4. - Don't bundle fixes across components — keep one component per branch so reviewers can spot-check end-to-end without context-switching.
Pillar is done when every component has a closed wave/qa-<component> PR and the roadmap captures every deferred finding.
9. Process notes
- Branch naming:
wave/<pillar>-<short-slug>. Examples:wave/audit-pkg-scripts,wave/installer-disk-metadata,wave/laptop-preset. - One PR per audit batch. Reference rows in
docs/SCRIPTS.md. Smaller PRs review faster. - Living roadmap. When an item ships, move it to the Shipped section at the bottom of this file rather than deleting it. Future-us gets a free changelog.
- Plan files live separately. Detailed implementation plans (the per-feature design docs Claude writes in plan mode) belong under
~/.claude/plans/per session, not in the repo. The roadmap is the durable reference; plan files are working notes. - Don't widen scope mid-PR. If the audit reveals a missing feature, file a new roadmap row, don't graft it onto the current PR.
Shipped
(Move items here when they land — keep them brief, link the commit/PR.)
- 2026-05-18 — Hardware DB correctness pass + ROG Ally support + CI lint. Audited every
nomarchy-hardware-dbentry againstinputs.nixos-hardware.nixosModulesand found 21 of 43 entries (49%) referenced modules that don't exist —microsoft-surface-pro-8,lenovo-thinkpad-x1-carbon-gen11,framework-13-11th-gen-intel, etc. were all eval-time failures waiting for a real user. Rewrote the DB to use only valid module names: Framework gens dropped the "13-" prefix in nixos-hardware (framework-11th-gen-intel, notframework-13-11th-gen-intel); ThinkPad X1 modules arex1-Nth-gen, notx1-carbon-genN; Surface Pro 6/7/8/10 all sharemicrosoft-surface-pro-intel; Surface Book / Intel Surface Laptop have no module (rows dropped, generic detection still emits sensiblecommon-pc-laptop+ cpu/gpu). Added matchers for ROG Ally (RC71L / RC72LA / "ROG Ally" viaasus-ally-rc71l). Documented Steam Deck and Snapdragon X as nixos-hardware-unsupported in a footer comment (Steam Deck → Jovian-NixOS; Snapdragon X → installer is x86_64 only). Added a CI step (.forgejo/workflows/check.yml) that fails on any DB entry whose module name isn't innixos-hardware.nixosModules— closes this regression class. - 2026-05-18 —
nomarchy-manualre-targeted at local docs. The script'sxdg-openpreviously pointed athttps://learn.omacom.io/2/the-nomarchy-manual— an upstream Omarchy URL that opened an unrelated page when users hit the menu's Help entry. Now opens~/.local/share/nomarchy/README.md(the local docs index perSKILL.md's "Out of Scope" note), with anotify-sendfallback if the source tree isn't synced. - 2026-05-18 — Docs hygiene: STRUCTURE.md "Root Directory" + Pillar 6 reality-check.
docs/STRUCTURE.mdlisted three top-level files that don't exist (GEMINI.md, root-levelSTRUCTURE.md,TODO.md) — replaced with an accurate root listing plus adocs/sub-tree that names every doc. Pillar 6 in this file hadnomarchy-welcome,docs/TROUBLESHOOTING.md, and the "docs index" bullet still marked Next despite all three shipping on 2026-04-26 — moved to(Shipped).nomarchy-manualbullet's "orphaned reference today" claim was stale (the script is called fromnomarchy-menuandnomarchy-theme-install); rewritten to reflect the real remaining issue — its hardcodedxdg-open https://learn.omacom.io/2/the-nomarchy-manualis an Omarchy URL. - 2026-05-18 — Installer state.json is now schema-driven. Replaced the heredoc in
installer/install.shthat hardcoded the JSON literal (theme/dns/wifi/features/etc.) with anix evaloflib/state-schema.nix'ssystemblock, overlaid with the installer-chosen timezone. Closes the last source-of-truth split after the centralization batch — adding a new default in the schema now reaches the installer with no further plumbing. Output is identical modulo alphabetical key ordering (Nix'sbuiltins.toJSONsorts keys; toggle scripts read/write viajqso it's invisible to them). Dry-run path unchanged (still bind-mounts a fake/mntso the generator's absolute paths resolve correctly).bash -n+shellcheck --severity=errorclean. - 2026-05-18 — Complete the hybrid-GPU wiring + fix unoverridable state-derived options. Two related fixes shipped together. (1)
nomarchy.system.features.hybridGPU = truenow wires the full NVIDIA driver stack (services.xserver.videoDrivers = ["nvidia"],hardware.graphics.{enable,enable32Bit},hardware.nvidia.{modesetting,powerManagement}.enable,package = nvidiaPackages.stable,boot.kernelParams += "nvidia-drm.modeset=1") — was previously enabling onlysupergfxdmode-switching while leaving the system with no NVIDIA driver loaded, so mode switches silently no-op'd. All knobs uselib.mkDefaultso a downstreamsystem.nixcan pin a beta driver, flip to the open kernel module, etc. Bus-ID prime config (per-machine) stays user-supplied —docs/OPTIONS.mdhas the full recipe. (2) Bothcore/system/state.nixandcore/home/state.nixnow uselib.mkDefaulton every state.json-derived assignment, fixing a class of "I set X in my system.nix but it doesn't take effect" bugs (the state-derived value was at default priority and conflicted with the user's same-priority override). Side-effect cleanup:core/system/state.nixnow also reads fromlib/state-schema.nixlikecore/home/state.nixdoes, completing the schema-centralization started two batches ago. Verifiednix flake check+ an override test that flips hybridGPU via an overlay and confirms the entire driver stack engages. - 2026-05-18 — Pillar 4: pre-flight resume polish. Fixed four resume-flow gaps in
installer/install.sh: (1)--resumewith a missing state file now errors loudly with a tmpfs explanation instead of silently falling through to a fresh prompt cycle (the most common operator confusion was "rebooted, forgot tmpfs eats /tmp/, watched the installer start over without realising"); (2) on resume, the saved target drive is validated as a block device before any disk-phase step runs — catches the live-ISO USB-unplugged / non-deterministic /dev/sdX class of mid-install failures; (3)save_statenow stamps an ISO-8601 timestamp andload_stateshows a(saved Xm ago)banner plus aTarget: /dev/X → user @ hostsummary line, so the user canCtrl-Cif they're resuming onto the wrong host before any destructive prompt fires; (4)--helpnow documents the tmpfs limitation.shellcheck --severity=errorpasses. - 2026-05-18 — Declarative-state defaults centralization. Made
lib/state-schema.nixthe single source of truth for every state-default that previously lived in three places (the schema itself,core/system/options.nix/core/home/options.nixdefault = …clauses, andcore/home/state.nixor …fallbacks). Replaced ~25 hardcoded literals withschema.<scope>.<key>reads. Side-effect: fixed a lingering bug wherecore/home/options.nix:themestill defaulted to"summer-night"after the system-side was moved to"nord"— half the codebase's home option resolved to the wrong theme when state.json was missing/blank.nix flake check --no-buildconfirms zero semantic change for every other field. Doesn't touch the installer-writtenstate.json(separate batch — needs schema → JSON generation). - 2026-05-18 — Pillar 7 first step: Forgejo Actions CI (eval + lint). New
.forgejo/workflows/check.ymlruns on every push tomainand every PR: (1)nix flake check --no-buildto catch eval regressions, (2)bash -n+shellcheck --severity=errorover everynomarchy-*bash script (whole-tree, not just changed files — gates branches that bypass the pre-commit hook), (3)docs/SCRIPTS.mddrift check (fails loudly if a script change didn't regenerate the audit doc). All three checks pass locally on the current tree. Activation requires enabling Actions on the Forgejo repo and registering aforgejo-runner; the workflow itself is dormant until then. ISO build job is intentionally deferred — needs a binary cache (Cachix/Attic) to be tractable. - 2026-05-18 — Pillar 3 Phase B: complete. Final batch (restart/sudo/theme/misc clusters) cleared the last 13
unused?rows. Deleted five truly dead scripts:nomarchy-restart-{hyprctl,mako}(theme switching callshyprctl reload/makoctl reloaddirectly now),nomarchy-restart-tmux(one-liner of marginal value),nomarchy-battery-present(battery monitor checks/sys/class/power_supply/BAT*inline),nomarchy-sudo-keepalive(intended-to-be-sourced building block with no users). Surfaced eight useful tools inSKILL.mdso the audit catches them askeptand AI assistants can discover them:nomarchy-restart-trackpad(intel_quicki2c reload),nomarchy-sudo-{passwordless-toggle,reset},nomarchy-theme-{bg-install,refresh,remove},nomarchy-refresh-fastfetch,nomarchy-windows-vm(new Virtualization section). Final state: 159 scripts, allkept,unused?= 0, missing references = 0. - 2026-05-18 — Pillar 3 Phase B: webapp/tui/voxtype install-remove pair triage. Deleted two dead webapp URI handlers (
nomarchy-webapp-handler-hey,nomarchy-webapp-handler-zoom) — no.desktopMimeType registration anywhere routedmailto:/zoom:URIs to them, so the handlers could never fire. Surfaced six useful CLI tools inSKILL.md"Common Tasks" so they're discoverable by AI assistants and taggedkeptby the audit:nomarchy-webapp-{remove,remove-all},nomarchy-tui-{remove,remove-all},nomarchy-voxtype-{install,remove}. Script count 166 → 164;unused?21 → 13. - 2026-05-18 — Pillar 3 Phase B: dead-code sweep (NixOS-irrelevant Omarchy ports). Deleted five scripts that duplicated NixOS-native facilities or referenced infrastructure Nomarchy doesn't ship:
nomarchy-rollback(boot-menu generations +nixos-rebuild rollbackalready cover this),nomarchy-snapshot(usedsnapper; impermanence and BTRFS subvolumes are the Nomarchy answer),nomarchy-migrate-state(one-shot pre-unification migration, no current callers),nomarchy-config-direct-boot(added an EFI entry for a UKI we never build), andnomarchy-npx-install(Arch idiom —nix-shell -p nodejsis the NixOS path). Keptnomarchy-build-isoandnomarchy-build-live-isoand surfaced them in README §2 so the audit tags themkept. Script count 171 → 166. - 2026-05-18 — Pillar 3 Phase B: missing-references triage. (1) Wrote
themes/engine/scripts/nomarchy-theme-nextsoSKILL.md's documented "cycle to next theme" command resolves; (2) scrubbed three stalenomarchy-dev-*references fromcore/home/config/nomarchy-skill/SKILL.md; (3) added a line-context filter to bothnomarchy-docs-scriptsgenerators that dropsnomarchy-*tokens appearing in Nixpname/derivation idents,/tmp/&/etc/sudoers.d/paths,nixosConfigurations.*/packages.*flake outputs,mktemp -tprefixes, systemd unit vars,./result/bin/run-binaries, anddockercontainer references; (4) added a small token-level denylist for five residual non-script identifiers (nomarchy-plymouth,nomarchy-sddm-theme,nomarchy-live,nomarchy-rev,nomarchy-windows) that survive line filtering.docs/SCRIPTS.md"Missing references" section is now empty (was 15). - 2026-05-04 — Pillar 8: Distro Branding. (1) Scrubbed remaining "Omarchy" and "Spirit of Omarchy" references from README, scripts, and welcome wizard; (2) Updated
nomarchy-welcomebanner andnomarchy-versioncodename ("Sovereign"); (3) Verified existingcore/system/branding.nixhandles OS-release and bootloader labels; (4) Confirmed SDDM and Plymouth metadata are already Nomarchy-branded. - 2026-05-04 — Thorough Out-of-the-Box QA Audit. (1) Restored automatic wallpaper switching by removing image filters from deployed themes; (2) Fixed broken "Style" menu entries by creating missing
about.txtandscreensaver.txtbranding files; (3) Cleaned up conflicting keybindings by removing deprecatedtiling.confand updating the doc generator; (4) Removed legacy Nord theme hack fromnomarchy-theme-set; (5) Fixed JSON parse error insummer-daywaybar theme. - 2026-05-03 — Fixed multi-disk LUKS/BTRFS boot hang. (1) Moved temporary LUKS keyfile to
/tmp/so Disko correctly omits it from the runtime configuration; (2) Injectedx-systemd.requiresandx-systemd.device-timeout=0into BTRFS mount options to ensure all LUKS drives are decrypted before mounting. - 2026-05-03 — Fixed CLI wrappers and removed obsolete code. (1) Updated
nomarchy-font,nomarchy-theme, andnomarchy-wallpaperCLI wrappers to use modern Walker menus; (2) Removed the obsolete and brokenthemes/engine/switcher.nixand its associated Nix-inlined scripts; (3) Cleaned up remaining$NOMARCHY_PATHreferences from the Omarchy era. - 2026-05-03 — Fixed
/etc/nixosownership after installation. Added achown -R $USERNAME:users /etc/nixosstep vianixos-enterat the end ofinstaller/install.shso the main user owns their configuration and can runhome-managercommands withoutsudo. - 2026-05-01 — Installer & Script Audit Polish. (1) Fixed a critical bash dynamic scoping bug in
installer/install.shwhererc=0assignments inside functions (Impermanence, Form Factor) were clobbering the main loop's return code, causing the installer to abort when "No" was selected; (2) Polishedhosts/nomarchy-live.nixwith auto-login for thenixosuser and passwordless sudo for thewheelgroup; (3) Repurposednomarchy-toggle-suspendto executesystemctl suspenddirectly and updatednomarchy-menuto reflect this; (4) Updatednomarchy-launch-wifito usenmtuiin Alacritty; (5) Regenerateddocs/SCRIPTS.mdto reflect the updated script mappings. - 2026-04-30 —
set -esweep acrossnomarchy-*scripts. Addedset -eto 142 of 169 bash scripts that lacked it (27 already had it). Halts a class of "command failed silently in the middle of a chain, system left in half-applied state" bugs that produced repeat-fix commits. One deliberate exception:nomarchy-menuruns withoutset -ebecause it's an interactive UX loop where action failures should re-display the menu rather than abort the script. Pre-commit hook now enforcesbash -n+shellcheck --severity=errorso future scripts can't regress this. - 2026-04-30 — Installer disk-phase reliability. Hardened
installer/install.shand consolidated the disko configs: (1)select_disknow hides the live-ISO boot device(s) so the installer can't format its own boot media (NOMARCHY_INSTALL_ALLOW_ISO_TARGET=1to override); (2) added a 10 GiB minimum-capacity preflight; (3)prewipe_target_driveenumerates every active dm-crypt mapping backed by the target drive and closes them, drops the silent|| truefromwipefs/sgdisk/dd, boundsudevadm settleto 30s, and refuses to continue if anything is still mounted; (4) wrapped the disko call inrun_disko_with_retrywith last-30-lines + Retry / View full log / Abort dialog on failure; (5) replaced the sed-templateddisko-golden.nix+disko-btrfs-multi.nixpair with a singledisko-config.nixNix function called via--argstr mainDrive … --arg extraDrives '[…]'— eliminates a class of escaping bugs (cf.3aadc36); (6) added an EXIT trap so the tmpfs LUKS key file is removed even on early abort. - 2026-04-30 — Gaming home-side companion. New
nomarchy.gaming.enableoption (mirror ofnomarchy.system.gaming.enable) andcore/home/gaming.nixmodule that injects a Hyprlandwindowrulev2 = fullscreen, class:^(steam_app_).*$so Steam-launched games grab the whole screen. Closes the "Gaming — Hyprland window rule" Next-column row. - 2026-04-26 — Default to highest resolution (
highres) for monitors. Updatedfeatures/desktop/hyprland/config/monitors.confand forced it in the live ISO (nomarchy-live) to resolve issues where some hardware would default to a low resolution (1024x768). - 2026-04-26 — First-run welcome wizard (
nomarchy-welcome). Extended from a one-shot greeter into a guided picker for theme, font, and panel position. Added Step 4 to generate a starterhome.nixif missing. State is now persisted instate.jsonvia.welcome_done. Addednomarchy.panelPositionoption to Waybar. - 2026-04-26 — Multi-disk BTRFS support in the installer. Added
installer/disko-btrfs-multi.nixtemplate and updatedinstaller/install.shto allow selecting multiple drives viagum choose --no-limit. Implements BTRFS "single" data + RAID1 metadata across multiple LUKS-encrypted drives. - 2026-04-26 — Distro Branding Phase 2. Updated bootloader entries to use "Nomarchy" as the label. Set ISO volume IDs to
NOMARCHY_INSTALLERandNOMARCHY_LIVE. Fixed branding in Plymouth theme metadata and SDDM metadata. - 2026-04-26 — Distro Branding Phase 1. Renamed
installerIsotonomarchy-installerandinstallerIsoGraphicaltonomarchy-live. Updated metadata and host configurations. Scrubbed "Omarchy" from Plymouth and installer messages. - 2026-04-26 — Fix
hardware-db.shmissing innomarchy-installer.nix. Resolved boot error whereinstall.shfailed to source the hardware database on the TTY installer ISO. - 2026-04-26 — Installer review-then-edit flow (
installer/install.sh). Review screen now offers Continue / Edit a field / Abort. Edit opens a multi-select of saved fields; chosen fields clear and the next loop iteration re-prompts only those. Benefits both fresh installs (typo fixes without abort+restart) and--resume(lands on review immediately, since the loaded vars short-circuit each prompt). LUKS passphrase is held in memory across loop iterations so re-edits don't re-ask for it. - 2026-04-26 —
docs/TROUBLESHOOTING.md. The five most common rebuild errors (option-already-declared, attribute-missing, Stylix target conflict, home-manager.hm-bakchurn, impermanence path missing) with copy-paste fixes. Linked fromREADME.mdanddocs/MIGRATION.md. - 2026-04-26 — Gaming preset module (
core/system/gaming.nix). Opt-innomarchy.system.gaming.enable(default false). Wiresprograms.steam(withremotePlay/localNetworkGameTransfersfirewall holes viamkDefault),programs.gamemode, andservices.flatpak. Flathub remote and Hyprland window-rule split into separate Next-column rows. - 2026-04-26 — Accessibility preset module (
core/system/accessibility.nix). Newnomarchy.system.accessibility.{enable,cursorSize}options (opt-in, default off — accessibility isn't a hardware-derived signal). Enablesservices.gnome.at-spi2-core, installs Orca, and setsXCURSOR_SIZE=32(configurable). Hyprland-side companion (key-repeat slowdown, Orca keybinding, high-contrast palette) split into a new Next-column row. - 2026-04-26 — Desktop preset module (
core/system/desktop.nix). Newnomarchy.system.desktop.enableoption; defaults toformFactor == "desktop"(mirror of the laptop preset's auto-enable). PinspowerManagement.cpuFreqGovernorto"performance"and enablesservices.zfs.{autoScrub,trim}so a future ZFS pool gets sensible maintenance for free. - 2026-04-26 — Laptop preset module (
core/system/laptop.nix). Newnomarchy.system.laptop.{enable,thermald}options;enabledefaults toformFactor == "laptop"so the installer's existingformFactorwrite auto-flips it on. Wires TLP (governors + 75/80 charge thresholds), force-disablespower-profiles-daemon, enablesupowerandthermald(x86_64), adds the brightnessctl udev rule for backlight without root, and sets a logind lid-switch policy that defers tohibernation.enable. Closes both the Now item and the largest Next item. - 2026-04-25 — Software-profile multi-select in the installer. Users can now pick Dev, Gaming, Office, Media, and CLI Utils profiles during install; logic emits corresponding
home.packagesand system toggles into the generated config. - 2026-04-25 — Pillar 3 Phase B: script & menu audit. Ported/implemented/stubbed ~40 scripts including
nomarchy-version,nomarchy-debug,nomarchy-reinstall,nomarchy-rollback,nomarchy-update-firmware,nomarchy-pkg-*, andnomarchy-theme-*wrappers. Moved desktop scripts to packaged utility directory. - 2026-04-25 — Docker & fwupd support. Added
nomarchy.system.virtualization.docker.enableandnomarchy.hardware.fwupdoptions. Wires system services and addsdocker-composeandfwupdmgrto PATH. - 2026-04-25 — Installer VM testing. Added
installerVmto flake nixosConfigurations, packages, and apps.nomarchy-test-installernow usesnix run .#installerVm. - 2026-04-25 —
docs/KEYBINDINGS.mdauto-generator. New repo-tooling scriptbin/utils/nomarchy-docs-keybindingsparses everybindd =/bindeld =line into a Markdown doc; README's keybinding table slimmed to highlights + link. - 2026-04-25 — Installer disk picker shows NAME / SIZE / TYPE / VENDOR / MODEL / SERIAL columns instead of bare
lsblk. Type derived fromROTA+TRAN(NVMe / USB / SSD / HDD). Filters loop, ram, zram, sr. - 2026-04-25 — Pillar 3 Phase A: script & menu audit. New
bin/utils/nomarchy-docs-scriptsgenerator producesdocs/SCRIPTS.mdwith 136 scripts and the menu walk pre-tagged via heuristics (kept/unused?/missing). Phase B (per-batch porting / removal) opens. - 2026-04-25 — Installer prompts for keyboard layout + locale, applies live; new
nomarchy.{system,}.formFactoroption; waybar drops battery widget on desktop; nm-applet visibility fix in default theme; live-ISO baseline keymap/locale (a7e7fa9). - 2026-04-25 —
docs/OPTIONS.mdreference;docs/MIGRATION.mdlinked fromREADME.md(3cb012b,6ef28f0).