Component 8 (Scripts runtime behavior) closeout entry summarises the four inline fixes: omacom URL in nomarchy-menu "Learn → Nomarchy", looknfeel.conf path drift, unreachable Overrides case branch, and schema-vs-script default drift for the theme fallback in nomarchy-theme-bg-next. New Later row tracks an interaction-pattern bug in show_setup_config_menu: five of nine entries edit files that Home Manager generates from declarative options, so the next rebuild clobbers the edit. Two more open paths the modules don't deploy. Either rewire the menu or surface the ephemerality.
52 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. nomarchy-menu"Setup → Config" pattern edits Nix-managed files. Five of the nine entries inshow_setup_config_menuopen files that Home Manager generates from declarative options (hypridle.conffromservices.hypridle.settings,hyprsunset.conffromservices.hyprsunset,walker/config.tomlfromprograms.walker.config,waybar/config.jsoncfromprograms.waybar.settings,hyprland.conffromwayland.windowManager.hyprland.settings). The menu pattern is "edit then restart", but ahome-manager switchclobbers the edit and the file goes back to the Nix-generated content. Two more entries (hyprlock.conf,swayosd/config.toml) point at paths the modules don't deploy at all —open_in_editorcreates an empty file. Either remove these entries (the user should edit the Nix module), or rewire each to open the matching Nomarchy option doc / module file path, or document the ephemerality innotify-sendwhen entering edit mode. Picked up during Pillar 8 / Component 8.themes/templates/*.tpl— prune the truly dead, document the rest. Eleven mustache-style templates deployed to~/.local/share/nomarchy/templates/viathemes/engine/files.nix. Originally flagged as "no script consumes them" — that was wrong:themes/engine/scripts/nomarchy-theme-set-templates(called at the end ofnomarchy-theme-set) reads them, substitutes palette colors, and writes the output to~/.config/nomarchy/current/theme/<file>only when no file is already there. Now categorise: (a) functionally dead —alacritty.toml.tpl,btop.theme.tpl,chromium.theme.tpl,swayosd.css.tplall produce files at paths nothing reads (alacritty + swayosd are Stylix/Nix-themed; btop reads from~/.config/btop/themes/nomarchy.themenot from the theme symlink; chromium.theme references were deleted in9b06b6c). (b) superseded —kitty.conf.tplandghostty.conf.tplare now generated bythemes/engine/files.nix(commit8d3ce2d); the template path skips harmlessly via the "if not exists" check. (c) still relevant —hyprland.conf.tpl,hyprlock.conf.tpl,obsidian.css.tpl,keyboard.rgb.tpl,hyprland-preview-share-picker.css.tpl(this last one was orphaned when the share-picker dir was deleted in20de3d4— verify before keeping). Delete (a) + (b) + the orphan share-picker tpl; document the rest indocs/creating-themes.mdas the layered override surface they actually are.- Move
programs.uwsmHyprland session out ofcore/system/virtualization.nix. Session-manager config is wired in the virtualization module by historical accident — it's loaded unconditionally on every install and has nothing to do with libvirt/docker. Move to a dedicatedcore/system/session.nix(or fold into the Hyprland feature module) so the location matches the responsibility. - Route installer keymap into Hyprland's Wayland session.
core/home/config/nomarchy/default/hypr/input.conf:3hardcodeskb_layout = us. The installer writesservices.xserver.xkb.layout = "$KEYMAP_LAYOUT"(andconsole.keyMap), but Hyprland reads its own input config on native Wayland, so a non-US user's chosen layout works in XWayland apps and the TTY console but not in native Wayland apps — surprising and inconsistent. Fix paths: (a) templateinput.conffrom a newnomarchy.keymap.{layout,variant}home option that the installer writes alongsideformFactor, or (b) propagateXKB_DEFAULT_LAYOUTvia session env so Hyprland's fallback kicks in. Option (a) is the durable fix; needs the installer's heredoc to add the option write. - Make
nomarchy.toggles.waybara Nix-level gate, or document it as runtime-only. Today the toggle is exported asNOMARCHY_TOGGLE_WAYBARenv, consumed only bynomarchy-toggle-waybar(which pkill/exec's at runtime). The Nix module always setsprograms.waybar.enable = lib.mkDefault true, so waybar comes back on every rebuild/reboot regardless of the toggle. Inconsistent withtoggles.idle, which correctly gatesservices.hypridle.enable. Either gateprograms.waybar.enableon the toggle (persistent) or rename the option to make its session-only nature obvious. - Package missing VSCode theme extensions via
extensionFromVscodeMarketplace. 15 of the 21 palettes that ship athemes/palettes/<theme>/apps/vscode.jsondeclare a theme extension that isn't inpkgs.vscode-extensions— includingsainnhe.everforestwhich is the defaultsummer-nightpalette's theme. With the577b3aefix in place, the 6 nixpkgs-packaged extensions install by default (catppuccin, catppuccin-latte, nord, tokyo-night, rose-pine, gruvbox), but the other 15 (sainnhe.everforest,qufiwefefwoyn.kanagawa,monokai.theme-monokai-pro-vscode,oldjobobo.{lumon,miasma,retro-82}-theme,Bjarne.{ethereal,hackerman,vantablack,white}-nomarchy,shadesOfBuntu.flexoki-light,jovejonovski.ocean-green,TahaYVR.matteblack) still leaveworkbench.colorThemereferencing an unloaded theme, so VSCode silently falls back. Fix: extendfeatures/apps/vscode.nixto look up the active palette's extension viapkgs.vscode-utils.extensionFromVscodeMarketplace { publisher; name; version; sha256; }— each entry pinned by hash. Could be table-driven inlib/so a new palette only needs to add a row. - Reconcile nightlight: systemd-managed hyprsunset vs
pkill/hyprctl exectoggle.features/desktop/nightlight.nixalways setsservices.hyprsunset.enable = lib.mkDefault trueand bakes the temperature (toggles.nightlight ? nightlightTemperature : 6500) intoextraArgsat Nix-eval time. The toggle scriptthemes/engine/scripts/nomarchy-toggle-nightlightbypasses systemd entirely:pkill hyprsunseton disable,hyprctl dispatch exec hyprsunset --temperature 4000on enable — racing the systemd-managed instance and ignoring the user's chosennightlightTemperature. The comment "Always enabled, we control via IPC and state" doesn't match the implementation (there's no IPC; the temperature is rebuild-time, not runtime). Pick one: (a) toggle stays ashyprctl dispatch hyprsunset temperature ${T}(proper IPC, no daemon restart), with Nix droppingextraArgsto just--temperature 6500on boot; or (b) gateservices.hyprsunset.enableon the toggle and runsystemctl --user restart hyprsunsetfrom the script. Both also need the script to readnightlightTemperatureinstead of hardcoding 4000.
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-21 — Pillar 8 / Component 8 (Scripts runtime behavior): closeout. Code-review-shaped sweep over
features/scripts/utils/nomarchy-menu(382 lines, 23 submenu functions), every script referenced from those submenus, the schema↔script field-name cross-check, and cross-cutting typo/stale-reference patterns. Four real fixes inline: (1)nomarchy-menu:70— "Learn → Nomarchy" still callednomarchy-launch-webapp https://learn.omacom.io/2/the-nomarchy-manual(an upstream Omarchy URL — the same one fixed innomarchy-manualback on 2026-05-18). Now callsnomarchy-manual, which opens the local docs index. (2)nomarchy-menu:179— "Style → Hyprland" opened~/.config/hypr/looknfeel.conf, a path nothing deploys; the actual file lives at~/.config/nomarchy/default/hypr/looknfeel.conf(sourced via the chain fromnomarchy.conf). Updated the path. (3)nomarchy-menu:258—*Overrides*) xdg-open ~/.config/nomarchy/overrides/case branch with no matching menu option, dead code anticipating the still-unimplementednomarchy.overrides.*loader. Removed (will reappear with the option when the loader ships). (4)nomarchy-theme-bg-next:12—jq -r '.theme // "nord"'defaulted to"nord"if.themewas missing, whilelib/state-schema.nix:17defines"summer-night"as the schema default. On a fresh-or-emptystate.jsonthe script looked for backgrounds underpalettes/nord/while the rest of the system treatedsummer-nightas active. Matched to the schema default. Cross-cutting sweeps came back clean: no$NN[A-Z]+env var typos elsewhere (the prior pair fixed in40b6212was the lot), no references to scripts deleted in earlier Pillar 3 batches (nomarchy-restart-{hyprctl,mako,tmux},nomarchy-battery-present,nomarchy-sudo-keepalive,nomarchy-rollback,nomarchy-snapshot,nomarchy-migrate-state,nomarchy-config-direct-boot,nomarchy-npx-install,nomarchy-webapp-handler-{hey,zoom}), no strayomarchy/omacomstrings outside historical roadmap entries, and everystate.jsonfield-write resolves againstlib/state-schema.nix(or the documented off-schemawelcome_done). One UX-shaped pattern bug logged separately to Later:show_setup_config_menuedits Nix-managed files that get clobbered on the nexthome-manager switch. Runtime verification (run every user-visible menu entry and confirm it does the thing) remains on the user. - 2026-05-21 — Pillar 8 / Component 7 (Theme engine + palettes): closeout. Code-review-shaped sweep across
themes/engine/{stylix,stylix-compat,loader,files,scripts}.nix, the 23 theme-engine scripts, and the 21 palettes' file completeness. Three real fixes inline + targeted dead-surface cleanup: (1)nomarchy-theme-setprinted a warning when the named theme directory didn't exist but continued executing — wrote the bad name intostate.jsonand rannomarchy-env-updateon a broken state. Nowexit 1after the warning. (2)nomarchy-theme-bg-set(called by the walker background-selector menu and by thenomarchy-wallpaperCLI) updated the live~/.config/nomarchy/current/backgroundsymlink + restarted swaybg but never wrotestate.json— so every wallpaper picked via either path silently reverted to the theme default on the nexthome-manager switch(themes/engine/files.nixre-resolvesnomarchy.wallpaperat every rebuild). Now writes the chosen path intostate.json.wallpaper, mirroringnomarchy-theme-bg-next. Added a file-exists check so a bogus path fails loudly instead of leaving a dangling symlink + a crashed swaybg. (3) Palette tree dead-surface cleanup: deletedthemes/palettes/{flexoki-light,lumon,retro-82,rose-pine}/apps/chromium.theme(9-byte RGB strings nothing reads — chromium is themed via managed policies incore/system/browser.nix, not per-palette files) andthemes/palettes/summer-day/apps/kitty/{kitty.conf,everforest-light.conf}(a 76KB stray kitty config at the wrong nested path, superseded by thekitty.confgenerator added in8d3ce2d). Total: 6 files / 2210 lines. Updated the misleading comment innomarchy-themes-prebuild("the installer wires this up") to reflect reality (the installer only tips the user to run it). Updated thethemes/templates/*.tplLater row with a fact-check + concrete categorisation — the templates ARE consumed bynomarchy-theme-set-templates, but most write to paths nothing reads or are now superseded by Nix-side generators. Palette completeness matrix: all 21 palettes havecolors.toml,backgrounds/,icons.theme, andapps/; 5 carry thelight.modemarker (catppuccin-latte, flexoki-light, rose-pine, summer-day, white); only tokyo-night shipskeyboard.rgbfor the ASUS ROG path, and the keyboard-set chain isn't wired intonomarchy-theme-setso it stays manual — niche enough to leave. Runtime verification (switch through all 22 palettes and eyeball SDDM + Plymouth + GTK + Qt + terminals + browsers + waybar + walker rendering) remains on the user. - 2026-05-21 — Pillar 8 / Component 6 (Apps): closeout. Code-review-shaped sweep over
features/apps/{alacritty,btop,chromium,elephant,ghostty,kitty,lazygit,opencode,swayosd,tmux,vscode,walker}. Three real theming bugs fixed inline: (1)features/apps/kitty/config/kitty.conf:1andfeatures/apps/ghostty/config/config:2referenced palette-specific include files (~/.config/nomarchy/current/theme/{kitty,ghostty}.conf) that didn't exist for any of the 22 palettes — kitty include failed silently, ghostty's was optional (?-prefix), and both terminals rendered with their built-in defaults regardless of the active Nomarchy palette. Stylix'skitty.enable = truewas a no-op because the module usesxdg.configFileinstead ofprograms.kitty; ghostty has no Stylix target. Added theme-engine generators inthemes/engine/files.nixmirroring the existingwaybar.csspattern, mappingpalette.base*to kitty/ghostty color directives. (2)features/apps/btop/config/btop.conf:5setcolor_theme = "current"butthemes/engine/loader.nix:72deploys the active palette's btop theme to~/.config/btop/themes/nomarchy.theme— name mismatch, btop fell back to its built-in Default theme on every palette. Renamed to"nomarchy". (3)programs.vscode.profiles.default.userSettings.workbench.colorThemewas set unconditionally fromthemes/palettes/<theme>/apps/vscode.json, but the matching theme extensions were bundled withdevExtensions(defaultfalse) — so VSCode silently fell back to its built-in theme out of the box on every palette. SplitthemeExtensions(always-on, covers the 6 palettes whose theme extension is in nixpkgs) fromdevExtensions(opt-in). The remaining 15 palettes — including the defaultsummer-night(sainnhe.everforest) — still break because their theme extensions aren't packaged in nixpkgs; logged as a new Later row. Chromium staticDefault/Preferencessymlink already had an open Later row; verified the file's contents are duplicate of the managed-policy intent incore/system/browser.nix, so the existing entry's hypothesis is correct — left for the user to greenlight deletion. alacritty (Stylix-themed viaprograms.alacritty.settings), elephant (no UI), swayosd (base16 inline), walker (covered in Component 5), lazygit + tmux (terminal ANSI inheritance, transitively fixed by the kitty/ghostty changes), and opencode (minimal opt-in config) are healthy. Runtime verification (launch each app on each palette and eyeball the theming) remains the user's responsibility. - 2026-05-21 — Pillar 8 / Component 5 (Desktop stack): closeout. Code-review-shaped sweep over Hyprland, waybar, walker, hypridle, hyprsunset, mako, KEYBINDINGS.md (the runtime-rendering subset — waybar across panel positions × form factors × all 22 palettes, walker launcher modes, hypridle timeout feel — stays on the user). Five real bugs fixed inline: (1) 9 of 17
~/.config/nomarchy/default/hypr/apps/*.confwindow-rule files were deployed but never sourced, includingsystem.conf(thetag +floating-windowrules every TUI helper class relies on +class:org.nomarchy.screensaverfullscreen rule that hypridle's 150s on-timeout depends on) andpip.conf(the PiP pin/size rules).apps.confnow sources all 17. (2) Two$NNOMARCHY_TOGGLE_*typos (double-N) innomarchy-menu:330andnomarchy-launch-screensaver:16madetoggles.suspendandtoggles.screensavervacuous — Suspend always showed in the system menu and the screensaver always launched at idle regardless of the documented option. (3) 4 broken per-palette waybarstyle.cssoverrides (catppuccin,lumon,nord,retro-82) fully replaced the default style with 2–14 lines of only@define-colordeclarations — picking those palettes produced a waybar with zero structural styling. Default style already imports per-palette colors viathemes/engine/files.nix-generatedtheme/waybar.css, so deletion restores correct rendering;summer-day/summer-nightkept as legitimate 100+-line redesigns. (4)core/home/config/nomarchy/default/hypr/{bindings,plain-bindings}.confwere explicitly-labeled deprecated files sourced by nothing (plain-bindings.conf referenced undefined$terminal/$browser/etc. Hyprland vars) — deleted;docs/SCRIPTS.mdregenerated to drop stale callers and incidentally corrected 4 Origin columns whose scripts moved fromcore/system/scripts/tofeatures/scripts/utils/. (5) Mako post-fix (commit2a301a0) verified: deployment + the 4 referenced scripts (nomarchy-notification-dismiss,nomarchy-launch-wifi,nomarchy-launch-floating-terminal-with-presentation,nomarchy-menu-keybindings) all resolve. Two structural inconsistencies logged to Later: keymap routing (already in72f7e7b) and the new hyprsunset toggle-vs-systemd reconcile.KEYBINDINGS.mdregenerated with zero diff — generator already covers both binding source locations. Runtime verification (boot live ISO, eyeball waybar/walker/screensaver flows across panel positions and palettes) remains the user's responsibility before declaring Component 5 fully closed. - 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).