Audited every entry in `installer/hardware-db.sh` against
`inputs.nixos-hardware.nixosModules` and found **21 of 43 entries (49%)
referenced modules that don't exist** in the upstream attribute set —
those installs would fail at eval time with "attribute not found"
errors on real hardware. Specifically:
- Framework 13 per-gen: nixos-hardware uses `framework-11th-gen-intel`,
not `framework-13-11th-gen-intel`. Fixed all four generations.
- Framework 13 AMD AI 300: `framework-amd-ai-300-series` (no "13-").
- Framework Intel Core Ultra: added `framework-intel-core-ultra-series1`.
- Framework 16 AMD AI 300: added `framework-16-amd-ai-300-series`.
- Framework generic fallback now uses the `framework` umbrella module.
- ThinkPad X1 Carbon: modules are `lenovo-thinkpad-x1-Nth-gen`,
not `-x1-carbon-genN`. Fixed gens 6/7/9/10/11; added X1 Nano.
- ThinkPad P14s: requires arch+gen suffix; switched to the AMD gen3/4/5
modules (the prior `lenovo-thinkpad-p14s` had no attribute).
- Surface Pro 6/7/8/10: all share `microsoft-surface-pro-intel`. Pro 9
keeps its dedicated module. Pro 3 fixed to `-pro-3`. Surface Book
2/3 and Intel-based Surface Laptop 3/4/5: no nixos-hardware module
— rows dropped; generic chassis+cpu+gpu detection still emits
sensible `common-pc-laptop`.
- ASUS ROG Strix G513 → `asus-rog-strix-g513im` (correct attr name).
- ASUS ROG Zephyrus GA403 didn't exist — dropped. Added `ga402x`,
`gu603h`, `g533zw`.
- ASUS Zenbook generic `asus-zenbook-ux` was non-existent — dropped
(too vague; available modules are per-model like `asus-zenbook-ux481`).
- Dell Latitude 5400 / 7480: no modules — replaced with the existing
`dell-latitude-7420`, `7430`, `7490`.
Added:
- ROG Ally / Ally X support (`asus-ally-rc71l` for `RC71L`,
`RC72LA`, and the "ROG Ally" product string). nixos-hardware
currently ships one module for both revisions.
Documented (in a footer comment) the devices nixos-hardware doesn't
cover so they're known-unsupported rather than accidentally missing:
- Valve Steam Deck → Jovian-NixOS as a separate flake input.
- Snapdragon X laptops → aarch64 only; Nomarchy installer is x86_64.
- Raspberry Pi → same as above.
Bug discovered along the way: the DB's pipe-separated row format
collides with bash regex alternation. A row like
`Microsoft|Surface Pro (10|8|7|6)|_|module` parses as 7 fields, with
"7" extracted as the module name. Surface Pro variants are now one
row per version.
CI gate added (`.forgejo/workflows/check.yml`): a new step extracts
every 4th-pipe-field from `HARDWARE_DB` and `comm -23`s it against
`inputs.nixos-hardware.nixosModules`. Any future entry pointing at a
non-existent module fails CI with a clear error. Closes the regression
class entirely.
Verified locally: bash -n + shellcheck --severity=error pass on
hardware-db.sh; the CI step's exact commands pass against the new DB.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
30 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)
- (Empty for now)
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.
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.
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
- Software-profile multi-select (Now).
- Richer disk metadata (Shipped).
- Form-factor → laptop preset (Now, depends on Pillar 5).
disko-golden.nixvariants for software-RAID and BTRFS-pool-as-root (Shipped).- Pre-flight resume polish (Shipped).
- "What's installed?" summary screen on boot of a freshly-installed system, sourced from
state.json+nomarchy-system-scriptsintrospection. - Optional non-LUKS branch in the installer for users who explicitly opt out of FDE.
5. Pillar: Power, hardware, presets
- Laptop preset (Next): TLP, upower, brightness, lid, hypridle tuning.
- Desktop preset (Next): performance governor, no laptop UI (already filtered), ZFS hooks.
- Accessibility preset (Next).
- Gaming preset (Next).
- 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). - Surface support behind
nomarchy.hardware.isSurface(Later). - 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).
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.
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).