From 583708d78c32e6ccc7795dbb05f0d0a8bf857c66 Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Sat, 13 Jun 2026 07:38:31 +0100 Subject: [PATCH] docs: README for the v1 QA batch (menu, swaync, idle, Plymouth, sys-update) Options/keybinds/layout tables, sys-update/home-update workflow, the new module tree, and roadmap updates (menu system + nm-applet shipped; theme parity, branding round 2, swayosd, ask-Claude module remain). Co-Authored-By: Claude Fable 5 --- README.md | 83 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 54 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 712dc5d..fb07e37 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,10 @@ Flat on purpose. Two module trees, one options file each, no hidden layers. │ ├── hyprland.nix # all JSON-driven │ ├── waybar.nix │ ├── ghostty.nix -│ └── btop.nix +│ ├── btop.nix +│ ├── fuzzel.nix # launcher + nomarchy-menu (power, clip) +│ ├── swaync.nix # notifications, same JSON +│ └── idle.nix # hyprlock + hypridle, same JSON ├── hosts/ │ ├── default/ # reference machine (thin: boot, user, hostname) │ └── live.nix # bootable live ISO (try the distro, no install) @@ -144,6 +147,13 @@ sudo nixos-rebuild switch --flake .#default # system: rare home-manager switch --flake .#me # desktop: every theme change, no sudo ``` +Day-to-day you'll use the shipped shortcuts instead: + +```sh +sys-update # nix flake update + system rebuild (BTRFS snapshot first when available) +home-update # home-manager switch (no flake update, no sudo) +``` + Override anything with plain NixOS/HM options (the distro uses `mkDefault` throughout) or the `nomarchy.*` surface: @@ -151,12 +161,18 @@ throughout) or the `nomarchy.*` surface: |---|---|---| | `nomarchy.stateFile` | — (required) | Path to your theme-state.json | | `nomarchy.terminal` | `"ghostty"` | Terminal for keybinds and `$TERMINAL` | +| `nomarchy.keyboard.layout` | `"us"` | XKB layout for the Hyprland session (installer writes it; pairs with xkb + `console.useXkbConfig` in system.nix) | +| `nomarchy.keyboard.variant` | `""` | XKB variant for the session | | `nomarchy.hyprland.enable` | `true` | Nomarchy's Hyprland config | | `nomarchy.waybar.enable` | `true` | Nomarchy's Waybar | +| `nomarchy.fuzzel.enable` | `true` | Themed fuzzel + `nomarchy-menu` (power menu) | +| `nomarchy.swaync.enable` | `true` | swaync notifications, themed | +| `nomarchy.idle.enable` | `true` | hyprlock + hypridle (idle lock 5 min, display off 10, suspend 30) | | `nomarchy.ghostty.enable` | `true` | Nomarchy's Ghostty | | `nomarchy.btop.enable` | `true` | btop with per-theme colors | | `nomarchy.stylix.enable` | `true` | GTK/Qt/cursor theming | | `nomarchy.themesDir` | Nomarchy's `themes/` | Where per-theme app overrides are probed | +| `nomarchy.system.plymouth.enable` | `true` | Branded boot splash, background from the theme JSON (recolors on system rebuilds) | | `nomarchy.system.greeter.enable` | `true` | greetd/tuigreet | | `nomarchy.system.audio.enable` | `true` | Pipewire stack | | `nomarchy.system.bluetooth.enable` | `true` | Bluetooth + blueman | @@ -199,6 +215,7 @@ per theme — a single place to look, unlike the old distro's split: | `btop.theme` | baked into the generation (generated from the palette when absent) | | `waybar.css` | **whole-swap**: replaces the generated bar style entirely (probed at eval time, self-contained) | | `waybar.jsonc` | whole-swap for the bar *layout* (must be plain JSON) | +| `fuzzel.ini` | **whole-swap**: replaces the generated launcher/menu config entirely | Six ported themes ship a `waybar.css` identity (catppuccin, lumon, nord, retro-82, summer-day, summer-night). Custom user themes can live in @@ -214,11 +231,14 @@ nomarchy-theme-sync set ui.gapsOut 16 # tweak one knob (also a switch) nomarchy-theme-sync bg next # cycle wallpapers — instant, no rebuild nomarchy-theme-sync bg auto # back to the theme's default wallpaper nomarchy-theme-sync get colors.accent +sys-update # update inputs + rebuild the system (snapshots first) +home-update # rebuild just the desktop layer ``` Keybinds: `SUPER+Return` terminal · `SUPER+D` launcher · `SUPER+T` theme -picker · `SUPER+SHIFT+T` next wallpaper · `SUPER+Q` close · `SUPER+1..9` -workspaces · `Print` region screenshot. +picker · `SUPER+SHIFT+T` next wallpaper · `SUPER+Escape` power menu · +`SUPER+N` notifications · `SUPER+CTRL+V` clipboard history · `SUPER+Q` +close · `SUPER+1..9` workspaces · `Print` region screenshot. ## 6. Extending @@ -234,40 +254,45 @@ workspaces · `Print` region screenshot. on fuzzel — already shipped for SUPER+D/SUPER+T, dmenu mode does nested menus and per-entry icons, and its INI theme can be baked from theme-state.json like every other app: - - `modules/home/fuzzel.nix`: colors/fonts from the theme JSON (today the - launcher is the one surface that ignores the theme) - - `nomarchy-menu` dispatcher script over `fuzzel --dmenu`, Omarchy-style - nesting: Theme ▸ (apply/wallpaper) · Network ▸ nmtui · Bluetooth ▸ - blueman · Power ▸ lock/suspend/reboot/poweroff · Capture ▸ screenshot; - actions delegate to nomarchy-theme-sync and friends - - script modules (each a small dmenu pipeline, no plugin framework): - calculator (`--prompt-only` → `qalc -t` → result re-shown via `--mesg`, - Enter copies / chains; needs libqalculate) · clipboard history - (cliphist ⇄ fuzzel ⇄ wl-copy; also adds clipboard persistence) · file - open (`fd . ~` → xdg-open) · web search (query → xdg-open) · **ask - Claude**: `--prompt-only` → `$TERMINAL -e claude ""` — the - claude CLI auths via OAuth against a Pro/Max subscription (no API - key); REPL stays open for follow-ups (claude-code in nixpkgs is - unfree — needs a per-package allowUnfree) + - ✓ shipped: `modules/home/fuzzel.nix` (palette/fonts/border from the + theme JSON, `themes//fuzzel.ini` whole-swap) and the + `nomarchy-menu` dispatcher: root picker (no args) · `power` + (lock/logout/suspend/hibernate/reboot/shutdown, SUPER+Escape) · + `theme` (SUPER+T) · `clipboard` (cliphist, SUPER+CTRL+V) · `calc` + (qalc, copy/chain) · `files` (fd → xdg-open) · `web` (DuckDuckGo) + - next modules: Network ▸ nmtui · Bluetooth ▸ blueman · Capture ▸ + screenshot · **ask Claude**: `--prompt-only` → + `$TERMINAL -e claude ""` — the claude CLI auths via OAuth + against a Pro/Max subscription (no API key); REPL stays open for + follow-ups (claude-code in nixpkgs is unfree — allowUnfree is on) - known limits accepted for now: no live-as-you-type results (dmenu input is static per invocation) and no image previews - decision record: this resolves the old Walker/Lua question in favor of simplicity — no GTK4 launcher, no second theming pipeline, no image previews (instant `bg next` covers wallpaper browsing); the dispatcher owns the menu structure, so the renderer stays swappable -- We need to add networkManager applet to waybar so user can easily connect to internet +- **Theme parity with legacy:** summer-day/night now carry their legacy + bar layouts as `waybar.jsonc` whole-swaps (adapted: dead legacy script + modules dropped, Nerd-Fonts-v2 codepoints remapped to FontAwesome/v3, + logo button opens nomarchy-menu); the other four identity themes are + palette recolors and already match. Remaining: a visual pass over all + six on the live ISO +- **Per-theme fuzzel identity:** the `themes//fuzzel.ini` whole-swap + mechanism ships; what remains is authoring the inis for the six identity + themes from their legacy rofi.rasi files (per-element colors like + summer-night's green inputbar aren't expressible in fuzzel's flat + scheme — approximate, note the rest as a renderer limitation) - **Faster switches:** move `backgrounds/` out of the flake source (the 86 MB re-copy on every state write is the main eval tax), then pre-built theme variants if still needed -- Plymouth + SDDM/greeter theming from the same JSON +- Greeter (tuigreet/SDDM) theming from the same JSON (Plymouth ships since + v1: `nomarchy.system.plymouth.*`, background tinted from the state file) - Installer round 2: multi-disk BTRFS RAID, impermanence, BIOS/legacy boot (v1 `nomarchy-install` is single-disk UEFI — see `pkgs/nomarchy-install`) -- `hyprlock`/`hypridle`, swayosd, launch-or-focus UX scripts -- swaync notification center (notify-send currently renders bare) -- **Distro branding:** replace the NixOS brand with Nomarchy everywhere it - surfaces — `system.nixos.distroName`/`distroId` (flows into - `/etc/os-release`, the live ISO's boot-menu label and the installed - system's systemd-boot entries), `isoImage.splashImage`/`grubTheme` for - the ISO boot screen, tuigreet/MOTD text. Caveats: `distroId` also - changes `DEFAULT_HOSTNAME` and some upstream `isNixos` checks, and - nixos-* CLI names stay (renaming tooling is not worth the drift) +- swayosd (volume/brightness OSD), launch-or-focus UX scripts +- **Distro branding, round 2:** `distroName = "Nomarchy"` ships + (os-release `PRETTY_NAME`, systemd-boot entries, ISO menu label). + Remaining: `isoImage.splashImage`/`grubTheme` art for the ISO boot + screen, tuigreet/MOTD text, and the `distroId` question (it changes + `DEFAULT_HOSTNAME` and upstream `isNixos` checks — needs a test pass; + nixos-* CLI names stay regardless)