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 <noreply@anthropic.com>
This commit is contained in:
Bernardo Magri
2026-06-13 07:38:31 +01:00
parent 6763bef73e
commit 583708d78c

View File

@@ -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 "<question>"` — 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/<slug>/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 "<question>"` — 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/<slug>/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)