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:
83
README.md
83
README.md
@@ -54,7 +54,10 @@ Flat on purpose. Two module trees, one options file each, no hidden layers.
|
|||||||
│ ├── hyprland.nix # all JSON-driven
|
│ ├── hyprland.nix # all JSON-driven
|
||||||
│ ├── waybar.nix
|
│ ├── waybar.nix
|
||||||
│ ├── ghostty.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/
|
├── hosts/
|
||||||
│ ├── default/ # reference machine (thin: boot, user, hostname)
|
│ ├── default/ # reference machine (thin: boot, user, hostname)
|
||||||
│ └── live.nix # bootable live ISO (try the distro, no install)
|
│ └── 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
|
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`
|
Override anything with plain NixOS/HM options (the distro uses `mkDefault`
|
||||||
throughout) or the `nomarchy.*` surface:
|
throughout) or the `nomarchy.*` surface:
|
||||||
|
|
||||||
@@ -151,12 +161,18 @@ throughout) or the `nomarchy.*` surface:
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `nomarchy.stateFile` | — (required) | Path to your theme-state.json |
|
| `nomarchy.stateFile` | — (required) | Path to your theme-state.json |
|
||||||
| `nomarchy.terminal` | `"ghostty"` | Terminal for keybinds and `$TERMINAL` |
|
| `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.hyprland.enable` | `true` | Nomarchy's Hyprland config |
|
||||||
| `nomarchy.waybar.enable` | `true` | Nomarchy's Waybar |
|
| `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.ghostty.enable` | `true` | Nomarchy's Ghostty |
|
||||||
| `nomarchy.btop.enable` | `true` | btop with per-theme colors |
|
| `nomarchy.btop.enable` | `true` | btop with per-theme colors |
|
||||||
| `nomarchy.stylix.enable` | `true` | GTK/Qt/cursor theming |
|
| `nomarchy.stylix.enable` | `true` | GTK/Qt/cursor theming |
|
||||||
| `nomarchy.themesDir` | Nomarchy's `themes/` | Where per-theme app overrides are probed |
|
| `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.greeter.enable` | `true` | greetd/tuigreet |
|
||||||
| `nomarchy.system.audio.enable` | `true` | Pipewire stack |
|
| `nomarchy.system.audio.enable` | `true` | Pipewire stack |
|
||||||
| `nomarchy.system.bluetooth.enable` | `true` | Bluetooth + blueman |
|
| `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) |
|
| `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.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) |
|
| `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,
|
Six ported themes ship a `waybar.css` identity (catppuccin, lumon, nord,
|
||||||
retro-82, summer-day, summer-night). Custom user themes can live in
|
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 next # cycle wallpapers — instant, no rebuild
|
||||||
nomarchy-theme-sync bg auto # back to the theme's default wallpaper
|
nomarchy-theme-sync bg auto # back to the theme's default wallpaper
|
||||||
nomarchy-theme-sync get colors.accent
|
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
|
Keybinds: `SUPER+Return` terminal · `SUPER+D` launcher · `SUPER+T` theme
|
||||||
picker · `SUPER+SHIFT+T` next wallpaper · `SUPER+Q` close · `SUPER+1..9`
|
picker · `SUPER+SHIFT+T` next wallpaper · `SUPER+Escape` power menu ·
|
||||||
workspaces · `Print` region screenshot.
|
`SUPER+N` notifications · `SUPER+CTRL+V` clipboard history · `SUPER+Q`
|
||||||
|
close · `SUPER+1..9` workspaces · `Print` region screenshot.
|
||||||
|
|
||||||
## 6. Extending
|
## 6. Extending
|
||||||
|
|
||||||
@@ -234,40 +254,45 @@ workspaces · `Print` region screenshot.
|
|||||||
on fuzzel — already shipped for SUPER+D/SUPER+T, dmenu mode does nested
|
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
|
menus and per-entry icons, and its INI theme can be baked from
|
||||||
theme-state.json like every other app:
|
theme-state.json like every other app:
|
||||||
- `modules/home/fuzzel.nix`: colors/fonts from the theme JSON (today the
|
- ✓ shipped: `modules/home/fuzzel.nix` (palette/fonts/border from the
|
||||||
launcher is the one surface that ignores the theme)
|
theme JSON, `themes/<slug>/fuzzel.ini` whole-swap) and the
|
||||||
- `nomarchy-menu` dispatcher script over `fuzzel --dmenu`, Omarchy-style
|
`nomarchy-menu` dispatcher: root picker (no args) · `power`
|
||||||
nesting: Theme ▸ (apply/wallpaper) · Network ▸ nmtui · Bluetooth ▸
|
(lock/logout/suspend/hibernate/reboot/shutdown, SUPER+Escape) ·
|
||||||
blueman · Power ▸ lock/suspend/reboot/poweroff · Capture ▸ screenshot;
|
`theme` (SUPER+T) · `clipboard` (cliphist, SUPER+CTRL+V) · `calc`
|
||||||
actions delegate to nomarchy-theme-sync and friends
|
(qalc, copy/chain) · `files` (fd → xdg-open) · `web` (DuckDuckGo)
|
||||||
- script modules (each a small dmenu pipeline, no plugin framework):
|
- next modules: Network ▸ nmtui · Bluetooth ▸ blueman · Capture ▸
|
||||||
calculator (`--prompt-only` → `qalc -t` → result re-shown via `--mesg`,
|
screenshot · **ask Claude**: `--prompt-only` →
|
||||||
Enter copies / chains; needs libqalculate) · clipboard history
|
`$TERMINAL -e claude "<question>"` — the claude CLI auths via OAuth
|
||||||
(cliphist ⇄ fuzzel ⇄ wl-copy; also adds clipboard persistence) · file
|
against a Pro/Max subscription (no API key); REPL stays open for
|
||||||
open (`fd . ~` → xdg-open) · web search (query → xdg-open) · **ask
|
follow-ups (claude-code in nixpkgs is unfree — allowUnfree is on)
|
||||||
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)
|
|
||||||
- known limits accepted for now: no live-as-you-type results (dmenu
|
- known limits accepted for now: no live-as-you-type results (dmenu
|
||||||
input is static per invocation) and no image previews
|
input is static per invocation) and no image previews
|
||||||
- decision record: this resolves the old Walker/Lua question in favor of
|
- decision record: this resolves the old Walker/Lua question in favor of
|
||||||
simplicity — no GTK4 launcher, no second theming pipeline, no image
|
simplicity — no GTK4 launcher, no second theming pipeline, no image
|
||||||
previews (instant `bg next` covers wallpaper browsing); the dispatcher
|
previews (instant `bg next` covers wallpaper browsing); the dispatcher
|
||||||
owns the menu structure, so the renderer stays swappable
|
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
|
- **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
|
re-copy on every state write is the main eval tax), then pre-built theme
|
||||||
variants if still needed
|
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
|
- Installer round 2: multi-disk BTRFS RAID, impermanence, BIOS/legacy
|
||||||
boot (v1 `nomarchy-install` is single-disk UEFI — see `pkgs/nomarchy-install`)
|
boot (v1 `nomarchy-install` is single-disk UEFI — see `pkgs/nomarchy-install`)
|
||||||
- `hyprlock`/`hypridle`, swayosd, launch-or-focus UX scripts
|
- swayosd (volume/brightness OSD), launch-or-focus UX scripts
|
||||||
- swaync notification center (notify-send currently renders bare)
|
- **Distro branding, round 2:** `distroName = "Nomarchy"` ships
|
||||||
- **Distro branding:** replace the NixOS brand with Nomarchy everywhere it
|
(os-release `PRETTY_NAME`, systemd-boot entries, ISO menu label).
|
||||||
surfaces — `system.nixos.distroName`/`distroId` (flows into
|
Remaining: `isoImage.splashImage`/`grubTheme` art for the ISO boot
|
||||||
`/etc/os-release`, the live ISO's boot-menu label and the installed
|
screen, tuigreet/MOTD text, and the `distroId` question (it changes
|
||||||
system's systemd-boot entries), `isoImage.splashImage`/`grubTheme` for
|
`DEFAULT_HOSTNAME` and upstream `isNixos` checks — needs a test pass;
|
||||||
the ISO boot screen, tuigreet/MOTD text. Caveats: `distroId` also
|
nixos-* CLI names stay regardless)
|
||||||
changes `DEFAULT_HOSTNAME` and some upstream `isNixos` checks, and
|
|
||||||
nixos-* CLI names stay (renaming tooling is not worth the drift)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user