diff --git a/README.md b/README.md index 0283684..cbfeeff 100644 --- a/README.md +++ b/README.md @@ -97,12 +97,12 @@ env-update # Reloads your Home Manager environment (Runs: home-manager switch - ## 🚀 Commands & Keybindings +The full list lives in [`docs/KEYBINDINGS.md`](docs/KEYBINDINGS.md) (auto-generated from the Hyprland configs). A few highlights: + | Keybinding | Action | | :--- | :--- | | `Super + Space` | **App Launcher** (Walker) | | `Super + Shift + Space` | **Nomarchy Menu** (Walker) | -| `Super + Ctrl + Space` | **Background Selector** (Walker) | -| `Super + Shift + Ctrl + Space` | **Theme Selector** (Walker) | | `Super + Alt + Space` | **Toggle Top Bar** (Waybar) | | `Super + Return` | Open Terminal | | `Super + Q` | Close Window | diff --git a/bin/utils/nomarchy-docs-keybindings b/bin/utils/nomarchy-docs-keybindings new file mode 100755 index 0000000..f1d8f14 --- /dev/null +++ b/bin/utils/nomarchy-docs-keybindings @@ -0,0 +1,110 @@ +#!/usr/bin/env bash +set -euo pipefail + +# nomarchy-docs-keybindings +# +# Regenerates docs/KEYBINDINGS.md from the Hyprland binding files. Run from the +# repo root or anywhere — paths are resolved relative to this script. +# +# nomarchy-docs-keybindings # write to stdout +# nomarchy-docs-keybindings --out docs/KEYBINDINGS.md +# +# Source files in render order. Each entry is "|". + +repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" + +sources=( + "core/home/config/nomarchy/default/hypr/bindings/utilities.conf|Utilities" + "core/home/config/nomarchy/default/hypr/bindings/tiling.conf|Tiling" + "core/home/config/nomarchy/default/hypr/bindings/tiling-v2.conf|Tiling (v2)" + "core/home/config/nomarchy/default/hypr/bindings/clipboard.conf|Clipboard" + "core/home/config/nomarchy/default/hypr/bindings/media.conf|Media keys" + "features/desktop/hyprland/config/bindings.conf|Apps & web shortcuts" +) + +prettify_key() { + case "$1" in + code:10) echo "1" ;; code:11) echo "2" ;; code:12) echo "3" ;; + code:13) echo "4" ;; code:14) echo "5" ;; code:15) echo "6" ;; + code:16) echo "7" ;; code:17) echo "8" ;; code:18) echo "9" ;; + code:19) echo "0" ;; + XF86AudioRaiseVolume) echo "Volume Up" ;; + XF86AudioLowerVolume) echo "Volume Down" ;; + XF86AudioMute) echo "Mute" ;; + XF86AudioMicMute) echo "Mic Mute" ;; + XF86AudioPlay) echo "Play/Pause" ;; + XF86AudioStop) echo "Stop" ;; + XF86AudioNext) echo "Next Track" ;; + XF86AudioPrev) echo "Previous Track" ;; + XF86MonBrightnessUp) echo "Brightness Up" ;; + XF86MonBrightnessDown) echo "Brightness Down" ;; + XF86KbdBrightnessUp) echo "Kbd Brightness Up" ;; + XF86KbdBrightnessDown) echo "Kbd Brightness Down" ;; + XF86KbdLightOnOff) echo "Kbd Backlight" ;; + *) echo "$1" ;; + esac +} + +trim() { sed -E 's/^[[:space:]]+//; s/[[:space:]]+$//'; } + +render_section() { + local file="$1" title="$2" + [[ ! -f "$repo_root/$file" ]] && return + local rows + rows=$(grep -E '^[[:space:]]*bind[a-z]*[[:space:]]*=' "$repo_root/$file" || true) + [[ -z "$rows" ]] && return + + local body="" + while IFS= read -r line; do + # Strip the "bindXXX =" prefix. + local rhs="${line#*=}" + local mods key desc + IFS=',' read -r mods key desc _ <<<"$rhs" + mods=$(printf '%s' "${mods:-}" | trim) + key=$(printf '%s' "${key:-}" | trim) + desc=$(printf '%s' "${desc:-}" | trim) + [[ -z "$desc" ]] && continue # skip non-descriptive bindings + [[ -z "$mods" ]] && mods="—" + key=$(prettify_key "$key") + body+=$(printf '| %s | %s | %s |\n' "$mods" "$key" "$desc") + body+=$'\n' + done <<<"$rows" + + [[ -z "$body" ]] && return + + printf '\n## %s\n\n' "$title" + printf '_Source: `%s`_\n\n' "$file" + printf '| Modifiers | Key | Action |\n' + printf '| --- | --- | --- |\n' + printf '%s' "$body" +} + +main() { + cat <<'HEADER' +# Nomarchy Keybindings + +Auto-generated from the Hyprland binding files. **Do not edit by hand.** +Re-run the generator after changing any `bindings/*.conf`: + +```bash +./bin/utils/nomarchy-docs-keybindings --out docs/KEYBINDINGS.md +``` + +`SUPER` is the Meta / Win key. `code:NN` keys (X11 digit keycodes) are +shown as the digit they correspond to. Media keys (`XF86Audio*`, +`XF86MonBrightness*`, …) are prettified. +HEADER + for entry in "${sources[@]}"; do + render_section "${entry%|*}" "${entry#*|}" + done +} + +out="" +if [[ "${1:-}" == "--out" ]]; then + out="${2:?--out needs a path}"; shift 2 +fi +if [[ -n "$out" ]]; then + main >"$out" +else + main +fi diff --git a/docs/KEYBINDINGS.md b/docs/KEYBINDINGS.md new file mode 100644 index 0000000..31852ef --- /dev/null +++ b/docs/KEYBINDINGS.md @@ -0,0 +1,275 @@ +# Nomarchy Keybindings + +Auto-generated from the Hyprland binding files. **Do not edit by hand.** +Re-run the generator after changing any `bindings/*.conf`: + +```bash +./bin/utils/nomarchy-docs-keybindings --out docs/KEYBINDINGS.md +``` + +`SUPER` is the Meta / Win key. `code:NN` keys (X11 digit keycodes) are +shown as the digit they correspond to. Media keys (`XF86Audio*`, +`XF86MonBrightness*`, …) are prettified. + +## Utilities + +_Source: `core/home/config/nomarchy/default/hypr/bindings/utilities.conf`_ + +| Modifiers | Key | Action | +| --- | --- | --- | +| SUPER | SPACE | Launch apps | +| SUPER CTRL | E | Emoji picker | +| SUPER CTRL | C | Capture menu | +| SUPER CTRL | O | Toggle menu | +| SUPER ALT | SPACE | Toggle top bar | +| SUPER | ESCAPE | System menu | +| — | XF86PowerOff | Power menu | +| SUPER | K | Show key bindings | +| — | XF86Calculator | Calculator | +| SUPER SHIFT | SPACE | Nomarchy menu | +| SUPER CTRL | SPACE | Theme background menu | +| SUPER SHIFT CTRL | SPACE | Theme menu | +| SUPER | BACKSPACE | Toggle window transparency | +| SUPER SHIFT | BACKSPACE | Toggle window gaps | +| SUPER CTRL | BACKSPACE | Toggle single-window square aspect | +| SUPER | COMMA | Dismiss last notification | +| SUPER SHIFT | COMMA | Dismiss all notifications | +| SUPER CTRL | COMMA | Toggle silencing notifications | +| SUPER ALT | COMMA | Invoke last notification | +| SUPER SHIFT ALT | COMMA | Restore last notification | +| SUPER CTRL | I | Toggle locking on idle | +| SUPER CTRL | N | Toggle nightlight | +| CTRL | F1 | Apple Display brightness down | +| CTRL | F2 | Apple Display brightness up | +| SHIFT CTRL | F2 | Apple Display full brightness | +| — | PRINT | Screenshot | +| ALT | PRINT | Screenrecording | +| SUPER | PRINT | Color picker | +| SUPER CTRL | S | Share | +| SUPER CTRL ALT | T | Show time | +| SUPER CTRL ALT | B | Show battery remaining | +| SUPER CTRL | A | Audio controls | +| SUPER CTRL | B | Bluetooth controls | +| SUPER CTRL | W | Wifi controls | +| SUPER CTRL | T | Activity | +| SUPER CTRL | X | Toggle dictation | +| SUPER CTRL | Z | Zoom in | +| SUPER CTRL ALT | Z | Reset zoom | +| SUPER CTRL | L | Lock system | + +## Tiling + +_Source: `core/home/config/nomarchy/default/hypr/bindings/tiling.conf`_ + +| Modifiers | Key | Action | +| --- | --- | --- | +| SUPER | Q | Close window | +| CTRL ALT | DELETE | Close all windows | +| SUPER | J | Toggle window split | +| SUPER | P | Pseudo window | +| SUPER SHIFT | V | Toggle window floating/tiling | +| SHIFT | F11 | Force full screen | +| ALT | F11 | Full width | +| SUPER | LEFT | Move focus left | +| SUPER | RIGHT | Move focus right | +| SUPER | UP | Move focus up | +| SUPER | DOWN | Move focus down | +| SUPER | 1 | Switch to workspace 1 | +| SUPER | 2 | Switch to workspace 2 | +| SUPER | 3 | Switch to workspace 3 | +| SUPER | 4 | Switch to workspace 4 | +| SUPER | 5 | Switch to workspace 5 | +| SUPER | 6 | Switch to workspace 6 | +| SUPER | 7 | Switch to workspace 7 | +| SUPER | 8 | Switch to workspace 8 | +| SUPER | 9 | Switch to workspace 9 | +| SUPER | 0 | Switch to workspace 10 | +| SUPER SHIFT | 1 | Move window to workspace 1 | +| SUPER SHIFT | 2 | Move window to workspace 2 | +| SUPER SHIFT | 3 | Move window to workspace 3 | +| SUPER SHIFT | 4 | Move window to workspace 4 | +| SUPER SHIFT | 5 | Move window to workspace 5 | +| SUPER SHIFT | 6 | Move window to workspace 6 | +| SUPER SHIFT | 7 | Move window to workspace 7 | +| SUPER SHIFT | 8 | Move window to workspace 8 | +| SUPER SHIFT | 9 | Move window to workspace 9 | +| SUPER SHIFT | 0 | Move window to workspace 10 | +| SUPER | TAB | Next workspace | +| SUPER SHIFT | TAB | Previous workspace | +| SUPER CTRL | TAB | Former workspace | +| SUPER SHIFT | LEFT | Swap window to the left | +| SUPER SHIFT | RIGHT | Swap window to the right | +| SUPER SHIFT | UP | Swap window up | +| SUPER SHIFT | DOWN | Swap window down | +| ALT | TAB | Cycle to next window | +| ALT SHIFT | TAB | Cycle to prev window | +| ALT | TAB | Reveal active window on top | +| ALT SHIFT | TAB | Reveal active window on top | +| SUPER | code:20 | Expand window left | +| SUPER | code:21 | Shrink window left | +| SUPER SHIFT | code:20 | Shrink window up | +| SUPER SHIFT | code:21 | Expand window down | +| SUPER | MOUSE_DOWN | Scroll active workspace forward | +| SUPER | MOUSE_UP | Scroll active workspace backward | +| SUPER | mouse:272 | Move window | +| SUPER | mouse:273 | Resize window | + +## Tiling (v2) + +_Source: `core/home/config/nomarchy/default/hypr/bindings/tiling-v2.conf`_ + +| Modifiers | Key | Action | +| --- | --- | --- | +| SUPER | W | Close window | +| CTRL ALT | DELETE | Close all windows | +| SUPER | J | Toggle window split | +| SUPER | P | Pseudo window | +| SUPER | T | Toggle window floating/tiling | +| SUPER | F | Full screen | +| SUPER CTRL | F | Tiled full screen | +| SUPER ALT | F | Full width | +| SUPER | O | Pop window out (float & pin) | +| SUPER | L | Toggle workspace layout | +| SUPER | LEFT | Move window focus left | +| SUPER | RIGHT | Move window focus right | +| SUPER | UP | Move window focus up | +| SUPER | DOWN | Move window focus down | +| SUPER | 1 | Switch to workspace 1 | +| SUPER | 2 | Switch to workspace 2 | +| SUPER | 3 | Switch to workspace 3 | +| SUPER | 4 | Switch to workspace 4 | +| SUPER | 5 | Switch to workspace 5 | +| SUPER | 6 | Switch to workspace 6 | +| SUPER | 7 | Switch to workspace 7 | +| SUPER | 8 | Switch to workspace 8 | +| SUPER | 9 | Switch to workspace 9 | +| SUPER | 0 | Switch to workspace 10 | +| SUPER SHIFT | 1 | Move window to workspace 1 | +| SUPER SHIFT | 2 | Move window to workspace 2 | +| SUPER SHIFT | 3 | Move window to workspace 3 | +| SUPER SHIFT | 4 | Move window to workspace 4 | +| SUPER SHIFT | 5 | Move window to workspace 5 | +| SUPER SHIFT | 6 | Move window to workspace 6 | +| SUPER SHIFT | 7 | Move window to workspace 7 | +| SUPER SHIFT | 8 | Move window to workspace 8 | +| SUPER SHIFT | 9 | Move window to workspace 9 | +| SUPER SHIFT | 0 | Move window to workspace 10 | +| SUPER SHIFT ALT | 1 | Move window silently to workspace 1 | +| SUPER SHIFT ALT | 2 | Move window silently to workspace 2 | +| SUPER SHIFT ALT | 3 | Move window silently to workspace 3 | +| SUPER SHIFT ALT | 4 | Move window silently to workspace 4 | +| SUPER SHIFT ALT | 5 | Move window silently to workspace 5 | +| SUPER SHIFT ALT | 6 | Move window silently to workspace 6 | +| SUPER SHIFT ALT | 7 | Move window silently to workspace 7 | +| SUPER SHIFT ALT | 8 | Move window silently to workspace 8 | +| SUPER SHIFT ALT | 9 | Move window silently to workspace 9 | +| SUPER SHIFT ALT | 0 | Move window silently to workspace 10 | +| SUPER | S | Toggle scratchpad | +| SUPER ALT | S | Move window to scratchpad | +| SUPER | TAB | Next workspace | +| SUPER SHIFT | TAB | Previous workspace | +| SUPER CTRL | TAB | Former workspace | +| SUPER SHIFT ALT | LEFT | Move workspace to left monitor | +| SUPER SHIFT ALT | RIGHT | Move workspace to right monitor | +| SUPER SHIFT ALT | UP | Move workspace to up monitor | +| SUPER SHIFT ALT | DOWN | Move workspace to down monitor | +| SUPER SHIFT | LEFT | Swap window to the left | +| SUPER SHIFT | RIGHT | Swap window to the right | +| SUPER SHIFT | UP | Swap window up | +| SUPER SHIFT | DOWN | Swap window down | +| ALT | TAB | Cycle to next window | +| ALT SHIFT | TAB | Cycle to prev window | +| ALT | TAB | Reveal active window on top | +| ALT SHIFT | TAB | Reveal active window on top | +| SUPER | code:20 | Expand window left | +| SUPER | code:21 | Shrink window left | +| SUPER SHIFT | code:20 | Shrink window up | +| SUPER SHIFT | code:21 | Expand window down | +| SUPER | mouse_down | Scroll active workspace forward | +| SUPER | mouse_up | Scroll active workspace backward | +| SUPER | mouse:272 | Move window | +| SUPER | mouse:273 | Resize window | +| SUPER | G | Toggle window grouping | +| SUPER ALT | G | Move active window out of group | +| SUPER ALT | LEFT | Move window to group on left | +| SUPER ALT | RIGHT | Move window to group on right | +| SUPER ALT | UP | Move window to group on top | +| SUPER ALT | DOWN | Move window to group on bottom | +| SUPER ALT | TAB | Next window in group | +| SUPER ALT SHIFT | TAB | Previous window in group | +| SUPER CTRL | LEFT | Move grouped window focus left | +| SUPER CTRL | RIGHT | Move grouped window focus right | +| SUPER ALT | mouse_down | Next window in group | +| SUPER ALT | mouse_up | Previous window in group | +| SUPER ALT | 1 | Switch to group window 1 | +| SUPER ALT | 2 | Switch to group window 2 | +| SUPER ALT | 3 | Switch to group window 3 | +| SUPER ALT | 4 | Switch to group window 4 | +| SUPER ALT | 5 | Switch to group window 5 | +| SUPER | Slash | Cycle monitor scaling | + +## Clipboard + +_Source: `core/home/config/nomarchy/default/hypr/bindings/clipboard.conf`_ + +| Modifiers | Key | Action | +| --- | --- | --- | +| SUPER | C | Universal copy | +| SUPER | V | Universal paste | +| SUPER | X | Universal cut | +| SUPER CTRL | V | Clipboard manager | + +## Media keys + +_Source: `core/home/config/nomarchy/default/hypr/bindings/media.conf`_ + +| Modifiers | Key | Action | +| --- | --- | --- | +| — | Volume Up | Volume up | +| — | Volume Down | Volume down | +| — | Mute | Mute | +| — | Mic Mute | Mute microphone | +| — | Brightness Up | Brightness up | +| — | Brightness Down | Brightness down | +| — | Kbd Brightness Up | Keyboard brightness up | +| — | Kbd Brightness Down | Keyboard brightness down | +| — | Kbd Backlight | Keyboard backlight cycle | +| ALT | Volume Up | Volume up precise | +| ALT | Volume Down | Volume down precise | +| ALT | Brightness Up | Brightness up precise | +| ALT | Brightness Down | Brightness down precise | +| — | Next Track | Next track | +| — | XF86AudioPause | Pause | +| — | Play/Pause | Play | +| — | Previous Track | Previous track | +| SUPER | Mute | Switch audio output | + +## Apps & web shortcuts + +_Source: `features/desktop/hyprland/config/bindings.conf`_ + +| Modifiers | Key | Action | +| --- | --- | --- | +| SUPER | RETURN | Terminal | +| SUPER ALT | RETURN | Tmux | +| SUPER SHIFT | RETURN | Browser | +| SUPER SHIFT | F | File manager | +| SUPER ALT SHIFT | F | File manager (cwd) | +| SUPER SHIFT | B | Browser | +| SUPER SHIFT ALT | B | Browser (private) | +| SUPER SHIFT | M | Music | +| SUPER SHIFT | N | Editor | +| SUPER SHIFT | D | Docker | +| SUPER SHIFT | G | Signal | +| SUPER SHIFT | O | Obsidian | +| SUPER SHIFT | SLASH | Passwords | +| SUPER SHIFT | A | ChatGPT | +| SUPER SHIFT ALT | A | Grok | +| SUPER SHIFT | C | Calendar | +| SUPER SHIFT | E | Email | +| SUPER SHIFT | Y | YouTube | +| SUPER SHIFT ALT | G | WhatsApp | +| SUPER SHIFT CTRL | G | Google Messages | +| SUPER SHIFT | P | Google Photos | +| SUPER SHIFT | X | X | +| SUPER SHIFT ALT | X | X Post | diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 4a231c3..9ef4cbe 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -23,7 +23,6 @@ Guardrails (apply when adding anything): - **Richer disk metadata.** Carryover from the old TODO. Replace the bare `lsblk` line in `select_disk` with `lsblk -O -J` parsed via `jq`, surfacing vendor, model, serial, and size in the picker. - **Menu cleanup of orphaned references.** Walk `features/scripts/utils/nomarchy-menu` (379 lines, 23 submenus) and either wire each menu item to a real script or replace the `case` arm with a stubbed `notify-send` until the script is ported. See Pillar 3 below. - **Form-factor → laptop preset auto-enable.** When the installer writes `nomarchy.system.formFactor = "laptop"`, also flip on a yet-to-be-built laptop preset (TLP, brightness keys, lid handling). The option exists; the preset module doesn't. -- **`docs/KEYBINDINGS.md`.** Auto-generate from the `bindd =` lines in `core/home/config/nomarchy/default/hypr/bindings/*.conf` and `features/desktop/hyprland/config/bindings.conf` so the README's keybinding table stops drifting from the source of truth. ### Next (bigger lifts that build on Now) @@ -103,7 +102,7 @@ Each PR description should reference the row(s) in `docs/SCRIPTS.md` it closes, ## 6. Pillar: Onboarding & docs - `nomarchy-welcome` first-run wizard (Next). -- `docs/KEYBINDINGS.md` auto-generator (Now). +- `docs/KEYBINDINGS.md` auto-generator (Shipped). - `docs/TROUBLESHOOTING.md` (Next). - `docs/index.md` (or just enrich `README.md`) so `OPTIONS.md`, `STRUCTURE.md`, `MIGRATION.md`, `ROADMAP.md`, `SCRIPTS.md`, and `creating-themes.md` are all one click from the front page. - `nomarchy-manual` — orphaned reference today; either implement as a curated `xdg-open` to the docs index, or delete. @@ -130,5 +129,6 @@ Each PR description should reference the row(s) in `docs/SCRIPTS.md` it closes, (Move items here when they land — keep them brief, link the commit/PR.) +- _2026-04-25_ — `docs/KEYBINDINGS.md` auto-generator. New repo-tooling script `bin/utils/nomarchy-docs-keybindings` parses every `bindd =` / `bindeld =` line into a Markdown doc; README's keybinding table slimmed to highlights + link. - _2026-04-25_ — Installer prompts for keyboard layout + locale, applies live; new `nomarchy.{system,}.formFactor` option; waybar drops battery widget on desktop; nm-applet visibility fix in default theme; live-ISO baseline keymap/locale (`a7e7fa9`). - _2026-04-25_ — `docs/OPTIONS.md` reference; `docs/MIGRATION.md` linked from `README.md` (`3cb012b`, `6ef28f0`).