diff --git a/bin/utils/nomarchy-docs-scripts b/bin/utils/nomarchy-docs-scripts new file mode 100755 index 0000000..196b600 --- /dev/null +++ b/bin/utils/nomarchy-docs-scripts @@ -0,0 +1,228 @@ +#!/usr/bin/env bash +# Generator tolerates "no matches" exit codes from grep | sort. +# pipefail and -e off; -u stays. +set -u + +# nomarchy-docs-scripts +# +# Regenerates docs/SCRIPTS.md from the repo state. Produces: +# 1. Header + status legend + regen instructions. +# 2. Table of every nomarchy-* script (location, callers, status). +# 3. Table of every menu entry in features/scripts/utils/nomarchy-menu +# (submenu, label, target command, status). +# 4. Snapshot list of orphaned references (called somewhere, no script). +# +# Status heuristic in Phase A: +# kept — file exists AND is called from at least one *.nix / *.conf / +# shell file outside its own directory. +# unused? — file exists but no caller found. Phase B decides delete-dead +# vs intentional public API. +# missing — referenced but no file. Phase B decides port-from-omarchy +# vs delete-dead vs stub-with-notify. +# +# nomarchy-docs-scripts # write to stdout +# nomarchy-docs-scripts --out docs/SCRIPTS.md + +repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +cd "$repo_root" + +# --- Inventory ------------------------------------------------------------- + +# Where scripts live, in render order. +declare -A loc_label=( + ["features/scripts/utils"]="features/scripts/utils" + ["core/system/scripts"]="core/system/scripts" + ["themes/engine/scripts"]="themes/engine/scripts" +) +script_dirs=(features/scripts/utils core/system/scripts themes/engine/scripts) + +# Build name → location map (associative array of basename → repo-relative dir). +declare -A script_loc +for dir in "${script_dirs[@]}"; do + [[ -d "$dir" ]] || continue + while IFS= read -r f; do + script_loc["$(basename "$f")"]="$dir" + done < <(find "$dir" -maxdepth 1 -type f -name 'nomarchy-*') +done + +# Find every nomarchy-* token referenced anywhere outside the script dirs. +# (We exclude the script files themselves so they don't list themselves as +# their own caller.) +ref_files_per_cmd() { + local cmd="$1" + grep -rlE "\\b${cmd}\\b" \ + --include='*.nix' --include='*.conf' --include='*.sh' \ + --include='nomarchy-*' --include='*.jsonc' --include='*.toml' \ + core features themes installer hosts bin lib 2>/dev/null \ + | grep -vE "^(features/scripts/utils|core/system/scripts|themes/engine/scripts)/${cmd}$" \ + | sort -u +} + +# All distinct nomarchy-* tokens we see anywhere in the repo. +all_refs=$(grep -rohE 'nomarchy-[a-z0-9][a-z0-9-]+' \ + core features themes installer hosts bin lib 2>/dev/null \ + | sort -u) + +# --- Render: header -------------------------------------------------------- + +main() { + cat <<'HEADER' +# Nomarchy Script & Menu Audit + +Auto-generated table for [Pillar 3 of the roadmap](ROADMAP.md#3-pillar-script--menu-audit). +**Do not edit by hand.** Regenerate after script or menu changes: + +```bash +./bin/utils/nomarchy-docs-scripts --out docs/SCRIPTS.md +``` + +The status column uses a Phase A heuristic — `kept` / `unused?` / `missing`. +Phase B (per-batch PRs) refines those into `port-from-omarchy`, +`delete-dead`, or `stub-with-notify` and updates the rows. + +## Status legend + +- `kept` — script exists and is called from somewhere outside its own directory. +- `unused?` — script exists but no caller was found. Could be dead, could be + intentional public API. Phase B triage decides. +- `missing` — referenced from code but no script file exists. Phase B triage + decides whether to port from Omarchy upstream, delete the caller, or stub + with `notify-send`. +- `port-from-omarchy` — Phase B verdict: lift the upstream Omarchy script, + rewrite for NixOS paths. +- `delete-dead` — Phase B verdict: remove and update callers. +- `stub-with-notify` — Phase B verdict: temporary `notify-send` stub. + +HEADER + + # --- Render: scripts table ---------------------------------------------- + printf '## Scripts (%d)\n\n' "${#script_loc[@]}" + printf '| Script | Location | Callers | Status | Notes |\n' + printf '| --- | --- | --- | --- | --- |\n' + + # Sort scripts by name. + for name in $(printf '%s\n' "${!script_loc[@]}" | sort); do + local dir="${script_loc[$name]}" + local callers status callers_str + callers=$(ref_files_per_cmd "$name") + if [[ -z "$callers" ]]; then + status='`unused?`' + callers_str='—' + else + status='`kept`' + # Trim caller list to 2 entries + count. + local count + count=$(printf '%s\n' "$callers" | wc -l) + if (( count > 2 )); then + callers_str=$(printf '%s\n' "$callers" | head -2 | paste -sd, -) + callers_str="$callers_str, +$((count - 2)) more" + else + callers_str=$(printf '%s\n' "$callers" | paste -sd, -) + fi + fi + printf '| `%s` | `%s` | %s | %s | |\n' \ + "$name" "$dir" "$callers_str" "$status" + done + echo + + # --- Render: missing references ----------------------------------------- + printf '## Missing references\n\n' + printf 'Tokens grepped from `core/`, `features/`, `themes/`, `installer/`, `hosts/`, `bin/`, `lib/` that have no matching script file.\n\n' + printf '| Token | Referenced in | Status |\n' + printf '| --- | --- | --- |\n' + while IFS= read -r token; do + [[ -z "$token" ]] && continue + [[ -n "${script_loc[$token]:-}" ]] && continue + local refs + refs=$(grep -rlE "\\b${token}\\b" \ + --include='*.nix' --include='*.conf' --include='*.sh' \ + --include='nomarchy-*' --include='*.jsonc' --include='*.toml' \ + core features themes installer hosts bin lib 2>/dev/null \ + | sort -u) + [[ -z "$refs" ]] && continue + local count refs_str + count=$(printf '%s\n' "$refs" | wc -l) + if (( count > 2 )); then + refs_str=$(printf '%s\n' "$refs" | head -2 | paste -sd, -) + refs_str="$refs_str, +$((count - 2)) more" + else + refs_str=$(printf '%s\n' "$refs" | paste -sd, -) + fi + printf '| `%s` | %s | `missing` |\n' "$token" "$refs_str" + done <<<"$all_refs" + echo + + # --- Render: menu items ------------------------------------------------- + printf '## Menu items\n\n' + printf 'Walked from `features/scripts/utils/nomarchy-menu`. Each `case` arm in a `show_*_menu` function becomes one row.\n\n' + printf '| Submenu | Entry | Calls | Status |\n' + printf '| --- | --- | --- | --- |\n' + + awk ' + /^show_[a-z_]+_menu\(\) {/ { sub(/\(\) {/, ""); current=$1; in_func=1; next } + /^[a-z_]+\(\) {/ && !/^show_/ { current=""; in_func=0; next } + /^}$/ { current=""; in_func=0; next } + !in_func { next } + /^ case \$\(menu / { + # extract the menu title between the first pair of double quotes + match($0, /menu "[^"]+" "[^"]+"/); + if (RSTART == 0) next; + title=substr($0, RSTART, RLENGTH); + # second quoted string is the option list + n=split(title, parts, "\""); + title=parts[2]; + options=parts[4]; + # split options on \n + split(options, opts, "\\\\n"); + pending_submenu=current; + pending_title=title; + for (i=1;i<=length(opts);i++) pending_opts[i]=opts[i]; + pending_count=length(opts); + next + } + /^ \*[A-Za-z]/ { + # case arm — extract pattern between the first * and the closing ) + match($0, /\*[^)]*\)/); + if (RSTART == 0) next; + arm=substr($0, RSTART, RLENGTH); + gsub(/[*)]/, "", arm); + gsub(/^[[:space:]]+|[[:space:]]+$/, "", arm); + # action follows the ) + rest=substr($0, RSTART+RLENGTH); + sub(/^[[:space:]]+/, "", rest); + sub(/[[:space:]]*;;[[:space:]]*$/, "", rest); + # match the first nomarchy-* token in the action + cmd="" + if (match(rest, /nomarchy-[a-z0-9-]+/)) { + cmd=substr(rest, RSTART, RLENGTH); + } + printf "%s|%s|%s\n", pending_submenu, arm, cmd; + } + ' features/scripts/utils/nomarchy-menu > /tmp/nomarchy-menu-rows.$$ + + while IFS='|' read -r submenu entry cmd; do + [[ -z "$entry" ]] && continue + [[ "$entry" =~ ^\) ]] && continue + status='`kept`' + if [[ -n "$cmd" ]]; then + if [[ -z "${script_loc[$cmd]:-}" ]]; then + status='`missing`' + fi + else + cmd='_(inline)_' + fi + printf '| `%s` | %s | `%s` | %s |\n' "$submenu" "$entry" "$cmd" "$status" + done < /tmp/nomarchy-menu-rows.$$ + rm -f /tmp/nomarchy-menu-rows.$$ + echo +} + +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/AGENT.md b/docs/AGENT.md index 9e226bb..24f5ffd 100644 --- a/docs/AGENT.md +++ b/docs/AGENT.md @@ -102,15 +102,13 @@ If the user asks "what's next?", reply with the Now column items in 2–3 senten This is the **largest single open work item**. Phase A (inventory) hasn't run yet; `docs/SCRIPTS.md` is just scaffolding. The user explicitly flagged this pillar as important. -To pick it up: +Phase A shipped. The inventory lives at [`docs/SCRIPTS.md`](SCRIPTS.md) and is regenerated by: -1. Run the three generator commands at the top of `docs/SCRIPTS.md`. -2. Populate the **Scripts** table with one row per `nomarchy-*` file (location, callers, status `unknown` for now). -3. Populate the **Menu items** table by walking each `show_*_menu` function in `features/scripts/utils/nomarchy-menu`. -4. Tag every row with one of: `kept` / `port-from-omarchy` / `delete-dead` / `stub-with-notify` / `unknown`. Triage live, but leave anything ambiguous as `unknown`. -5. Land it as **one PR** (the inventory PR). Don't start porting in the same change. +```bash +./bin/utils/nomarchy-docs-scripts --out docs/SCRIPTS.md +``` -Then Phase B is per-script: one PR per ~10 scripts, branch named `wave/audit-`. Each PR closes specific rows in `docs/SCRIPTS.md`. +It tags every row with one of `kept` / `unused?` / `missing`. Phase B is the per-batch porting/removal: pick ~10 rows tagged `missing` or `unused?`, decide one of `port-from-omarchy` / `delete-dead` / `stub-with-notify`, and ship as one PR per batch on a `wave/audit-` branch. Each PR description should reference the rows it closes; reviewers spot-check that every caller of a removed/renamed script is updated. --- diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 9acfd4a..a03b848 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -20,7 +20,7 @@ Guardrails (apply when adding anything): ### Now (ready to pick up) - **Software-profile multi-select in the installer.** Carryover from the old TODO. Add a `gum choose --no-limit` step in `installer/install.sh` (between hardware and impermanence) for opt-in profiles (Dev, Gaming, Office, Media, …). Each profile maps to a list of `home.packages` and optional `nomarchy.system.*` toggles emitted into the generated `home.nix`/`system.nix`. -- **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. +- **Audit Phase B (per-batch).** Phase A populated [`docs/SCRIPTS.md`](SCRIPTS.md) with 158 `kept`, 75 `missing`, and 45 `unused?` rows via the new `bin/utils/nomarchy-docs-scripts` generator. Phase B is the per-batch porting/removal: pick ~10 rows tagged `missing` or `unused?`, decide `port-from-omarchy` / `delete-dead` / `stub-with-notify`, and ship as one PR per batch. - **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. ### Next (bigger lifts that build on Now) @@ -130,5 +130,6 @@ Each PR description should reference the row(s) in `docs/SCRIPTS.md` it closes, - _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 disk picker shows NAME / SIZE / TYPE / VENDOR / MODEL / SERIAL columns instead of bare `lsblk`. Type derived from `ROTA` + `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-scripts` generator produces `docs/SCRIPTS.md` with 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,}.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`). diff --git a/docs/SCRIPTS.md b/docs/SCRIPTS.md index 3ff9ee1..28a3796 100644 --- a/docs/SCRIPTS.md +++ b/docs/SCRIPTS.md @@ -1,84 +1,317 @@ # Nomarchy Script & Menu Audit -This is the working table for [Pillar 3 of the roadmap](ROADMAP.md#3-pillar-script--menu-audit). It catalogues every `nomarchy-*` script, its callers, and an action tag. +Auto-generated table for [Pillar 3 of the roadmap](ROADMAP.md#3-pillar-script--menu-audit). +**Do not edit by hand.** Regenerate after script or menu changes: -> **Status as of writing:** scaffolding only. Phase A (the inventory PR) has not yet populated this table — see the roadmap for the methodology. Add rows as you triage. +```bash +./bin/utils/nomarchy-docs-scripts --out docs/SCRIPTS.md +``` + +The status column uses a Phase A heuristic — `kept` / `unused?` / `missing`. +Phase B (per-batch PRs) refines those into `port-from-omarchy`, +`delete-dead`, or `stub-with-notify` and updates the rows. ## Status legend -- `kept` — works on Nomarchy, no change needed. -- `port-from-omarchy` — exists upstream, needs adapting (drop pacman/yay/AUR, repath to NixOS, talk to `nomarchy.system.*` options). -- `delete-dead` — neither used nor needed; remove and update callers. -- `stub-with-notify` — temporarily replaced with a `notify-send "Not yet implemented in Nomarchy"` until real work is scheduled. -- `unknown` — needs a deeper look. +- `kept` — script exists and is called from somewhere outside its own directory. +- `unused?` — script exists but no caller was found. Could be dead, could be + intentional public API. Phase B triage decides. +- `missing` — referenced from code but no script file exists. Phase B triage + decides whether to port from Omarchy upstream, delete the caller, or stub + with `notify-send`. +- `port-from-omarchy` — Phase B verdict: lift the upstream Omarchy script, + rewrite for NixOS paths. +- `delete-dead` — Phase B verdict: remove and update callers. +- `stub-with-notify` — Phase B verdict: temporary `notify-send` stub. -## Generating the inventory +## Scripts (136) -The triage PR should regenerate this table by running these commands in repo root: - -```bash -# 1. all nomarchy-* scripts -find core/system/scripts features/scripts/utils themes/engine/scripts \ - -type f -name 'nomarchy-*' -printf '%f\t%h\n' | sort - -# 2. all nomarchy-* callers -grep -rohE 'nomarchy-[a-z][a-z0-9-]*' core/ features/ themes/ installer/ bin/ \ - | sort -u - -# 3. orphaned callers (in code but no script) -comm -23 <(grep -rohE 'nomarchy-[a-z][a-z0-9-]*' core/ features/ themes/ installer/ bin/ | sort -u) \ - <(find core/system/scripts features/scripts/utils themes/engine/scripts \ - -type f -name 'nomarchy-*' -printf '%f\n' | sort -u) -``` - -## Scripts - -| Script | Location | Used by | Status | Notes | +| Script | Location | Callers | Status | Notes | | --- | --- | --- | --- | --- | -| _(rows go here — Phase A populates this section)_ | | | `unknown` | | +| `nomarchy-battery-capacity` | `core/system/scripts` | core/system/scripts/nomarchy-battery-status | `kept` | | +| `nomarchy-battery-monitor` | `core/system/scripts` | features/scripts/battery-monitor.nix | `kept` | | +| `nomarchy-battery-present` | `core/system/scripts` | — | `unused?` | | +| `nomarchy-battery-remaining` | `core/system/scripts` | core/system/scripts/nomarchy-battery-monitor,core/system/scripts/nomarchy-battery-status | `kept` | | +| `nomarchy-battery-remaining-time` | `core/system/scripts` | core/system/scripts/nomarchy-battery-status | `kept` | | +| `nomarchy-battery-status` | `core/system/scripts` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,core/system/scripts/nomarchy-battery-capacity, +1 more | `kept` | | +| `nomarchy-brightness-display` | `core/system/scripts` | core/home/config/nomarchy/default/hypr/bindings/media.conf,core/home/config/nomarchy/default/hypr/bindings/utilities.conf | `kept` | | +| `nomarchy-brightness-display-apple` | `core/system/scripts` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf | `kept` | | +| `nomarchy-brightness-keyboard` | `core/system/scripts` | core/home/config/nomarchy/default/hypr/bindings/media.conf | `kept` | | +| `nomarchy-build-iso` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-cmd-audio-switch` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/media.conf | `kept` | | +| `nomarchy-cmd-present` | `features/scripts/utils` | features/scripts/utils/nomarchy-launch-editor,features/scripts/utils/nomarchy-voxtype-remove, +3 more | `kept` | | +| `nomarchy-cmd-screenrecord` | `features/scripts/utils` | features/desktop/waybar/config/config.jsonc,features/desktop/waybar/themes/summer-night/config.jsonc, +1 more | `kept` | | +| `nomarchy-cmd-screensaver` | `features/scripts/utils` | features/scripts/utils/nomarchy-launch-screensaver | `kept` | | +| `nomarchy-cmd-screenshot` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-cmd-share` | `features/scripts/utils` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-cmd-terminal-cwd` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/plain-bindings.conf,features/desktop/hyprland/config/bindings.conf | `kept` | | +| `nomarchy-config-direct-boot` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-drive-info` | `features/scripts/utils` | features/scripts/utils/nomarchy-drive-select | `kept` | | +| `nomarchy-drive-select` | `features/scripts/utils` | features/scripts/utils/nomarchy-drive-info,features/scripts/utils/nomarchy-drive-set-password | `kept` | | +| `nomarchy-drive-set-password` | `features/scripts/utils` | features/scripts/utils/nomarchy-drive-select,features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-env-update` | `features/scripts/utils` | core/home/bash.nix,core/system/scripts/nomarchy-pkg-add, +9 more | `kept` | | +| `nomarchy-font-current` | `themes/engine/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-font-list` | `themes/engine/scripts` | features/scripts/utils/nomarchy-menu,features/scripts/utils/nomarchy-welcome | `kept` | | +| `nomarchy-font-set` | `themes/engine/scripts` | features/scripts/utils/nomarchy-menu,features/scripts/utils/nomarchy-welcome, +2 more | `kept` | | +| `nomarchy-haptic-touchpad` | `core/system/scripts` | core/system/hardware.nix | `kept` | | +| `nomarchy-hibernation-available` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-hibernation-remove` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-hibernation-setup` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-hook` | `features/scripts/utils` | core/system/scripts/nomarchy-battery-monitor,themes/engine/scripts/nomarchy-font-set, +1 more | `kept` | | +| `nomarchy-hw-asus-rog` | `core/system/scripts` | features/scripts/utils/nomarchy-on-boot | `kept` | | +| `nomarchy-hw-framework16` | `core/system/scripts` | — | `unused?` | | +| `nomarchy-hw-intel` | `core/system/scripts` | — | `unused?` | | +| `nomarchy-hw-intel-ptl` | `core/system/scripts` | — | `unused?` | | +| `nomarchy-hw-match` | `core/system/scripts` | core/system/scripts/nomarchy-hw-framework16,core/system/scripts/nomarchy-hw-surface, +1 more | `kept` | | +| `nomarchy-hw-surface` | `core/system/scripts` | — | `unused?` | | +| `nomarchy-hw-vulkan` | `core/system/scripts` | features/scripts/utils/nomarchy-voxtype-install | `kept` | | +| `nomarchy-launch-about` | `features/scripts/utils` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-launch-audio` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/desktop/waybar/config/config.jsonc, +2 more | `kept` | | +| `nomarchy-launch-bluetooth` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/desktop/waybar/config/config.jsonc, +1 more | `kept` | | +| `nomarchy-launch-browser` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/plain-bindings.conf,features/desktop/hyprland/config/bindings.conf | `kept` | | +| `nomarchy-launch-editor` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/plain-bindings.conf,features/desktop/hyprland/config/bindings.conf, +2 more | `kept` | | +| `nomarchy-launch-floating-terminal-with-presentation` | `features/scripts/utils` | features/desktop/waybar/config/config.jsonc,features/desktop/waybar/themes/summer-night/config.jsonc, +2 more | `kept` | | +| `nomarchy-launch-or-focus` | `features/scripts/utils` | core/home/config/nomarchy/extensions/menu.sh,features/desktop/hyprland/config/bindings.conf, +7 more | `kept` | | +| `nomarchy-launch-or-focus-tui` | `features/scripts/utils` | core/home/config/nomarchy/extensions/menu.sh,features/desktop/waybar/config/config.jsonc, +4 more | `kept` | | +| `nomarchy-launch-or-focus-webapp` | `features/scripts/utils` | features/desktop/hyprland/config/bindings.conf | `kept` | | +| `nomarchy-launch-screensaver` | `features/scripts/utils` | features/desktop/idle.nix,features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-launch-tui` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/desktop/hyprland/config/bindings.conf, +2 more | `kept` | | +| `nomarchy-launch-walker` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/clipboard.conf,core/home/config/nomarchy/default/hypr/bindings/utilities.conf, +1 more | `kept` | | +| `nomarchy-launch-webapp` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/plain-bindings.conf,features/desktop/hyprland/config/bindings.conf, +7 more | `kept` | | +| `nomarchy-launch-wifi` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/desktop/waybar/config/config.jsonc, +3 more | `kept` | | +| `nomarchy-lock-screen` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,core/home/config/nomarchy/extensions/menu.sh, +2 more | `kept` | | +| `nomarchy-menu` | `features/scripts/utils` | bin/utils/nomarchy-docs-scripts,core/home/config/nomarchy/default/hypr/bindings/utilities.conf, +6 more | `kept` | | +| `nomarchy-menu-keybindings` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-migrate-state` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-notification-dismiss` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-npx-install` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-on-boot` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/autostart.conf | `kept` | | +| `nomarchy-pkg-add` | `core/system/scripts` | features/scripts/utils/nomarchy-voxtype-install,features/scripts/utils/nomarchy-windows-vm | `kept` | | +| `nomarchy-pkg-remove` | `core/system/scripts` | — | `unused?` | | +| `nomarchy-powerprofiles-list` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-preflight-migration` | `core/system/scripts` | features/scripts/utils/nomarchy-env-update,features/scripts/utils/nomarchy-migrate-state | `kept` | | +| `nomarchy-refresh-config` | `features/scripts/utils` | features/scripts/utils/nomarchy-refresh-fastfetch | `kept` | | +| `nomarchy-refresh-fastfetch` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-restart-app` | `features/scripts/utils` | core/system/scripts/nomarchy-restart-xcompose,features/desktop/scripts/nomarchy-restart-hypridle, +3 more | `kept` | | +| `nomarchy-restart-bluetooth` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-restart-btop` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-restart-opencode` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-restart-pipewire` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-restart-terminal` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-restart-tmux` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-restart-trackpad` | `core/system/scripts` | — | `unused?` | | +| `nomarchy-restart-wifi` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-restart-xcompose` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-setup-dns` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-setup-fido2` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-setup-fingerprint` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-show-done` | `themes/engine/scripts` | features/scripts/utils/nomarchy-launch-floating-terminal-with-presentation | `kept` | | +| `nomarchy-show-logo` | `themes/engine/scripts` | features/scripts/utils/nomarchy-launch-floating-terminal-with-presentation | `kept` | | +| `nomarchy-snapshot` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-state` | `features/scripts/utils` | core/system/scripts/nomarchy-system-reboot,core/system/scripts/nomarchy-system-shutdown, +1 more | `kept` | | +| `nomarchy-state-write` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-sudo-keepalive` | `core/system/scripts` | — | `unused?` | | +| `nomarchy-sudo-passwordless-toggle` | `core/system/scripts` | — | `unused?` | | +| `nomarchy-sudo-reset` | `core/system/scripts` | — | `unused?` | | +| `nomarchy-sync` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-system-logout` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-system-reboot` | `core/system/scripts` | core/system/scripts/nomarchy-hibernation-setup,core/system/scripts/nomarchy-toggle-hybrid-gpu, +1 more | `kept` | | +| `nomarchy-system-shutdown` | `core/system/scripts` | core/home/config/nomarchy/extensions/menu.sh,features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-sys-update` | `features/scripts/utils` | core/home/bash.nix,core/system/scripts/nomarchy-setup-dns, +5 more | `kept` | | +| `nomarchy-test-installer` | `features/scripts/utils` | features/scripts/utils/nomarchy-test-vm | `kept` | | +| `nomarchy-test-live-iso` | `features/scripts/utils` | hosts/live-iso.nix | `kept` | | +| `nomarchy-test-vm` | `features/scripts/utils` | features/scripts/utils/nomarchy-test-live-iso | `kept` | | +| `nomarchy-theme-bg-install` | `themes/engine/scripts` | — | `unused?` | | +| `nomarchy-theme-bg-next` | `themes/engine/scripts` | — | `unused?` | | +| `nomarchy-theme-bg-set` | `themes/engine/scripts` | — | `unused?` | | +| `nomarchy-theme-current` | `themes/engine/scripts` | — | `unused?` | | +| `nomarchy-theme-install` | `themes/engine/scripts` | — | `unused?` | | +| `nomarchy-theme-list` | `themes/engine/scripts` | features/scripts/utils/nomarchy-welcome | `kept` | | +| `nomarchy-theme-refresh` | `themes/engine/scripts` | — | `unused?` | | +| `nomarchy-theme-remove` | `themes/engine/scripts` | — | `unused?` | | +| `nomarchy-theme-set` | `themes/engine/scripts` | features/scripts/utils/nomarchy-on-boot,features/scripts/utils/nomarchy-welcome, +7 more | `kept` | | +| `nomarchy-theme-set-keyboard` | `themes/engine/scripts` | features/scripts/utils/nomarchy-on-boot | `kept` | | +| `nomarchy-theme-set-keyboard-asus-rog` | `themes/engine/scripts` | features/scripts/utils/nomarchy-on-boot,themes/engine/scripts/nomarchy-theme-set-keyboard | `kept` | | +| `nomarchy-theme-set-keyboard-f16` | `themes/engine/scripts` | features/scripts/utils/nomarchy-on-boot,themes/engine/scripts/nomarchy-theme-set-keyboard | `kept` | | +| `nomarchy-theme-set-obsidian` | `themes/engine/scripts` | — | `unused?` | | +| `nomarchy-theme-set-templates` | `themes/engine/scripts` | themes/engine/scripts/nomarchy-theme-set | `kept` | | +| `nomarchy-theme-set-vscode` | `themes/engine/scripts` | — | `unused?` | | +| `nomarchy-themes-prebuild` | `themes/engine/scripts` | installer/install.sh | `kept` | | +| `nomarchy-theme-update` | `themes/engine/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-toggle-hybrid-gpu` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-toggle-idle` | `core/system/scripts` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/desktop/waybar/config/config.jsonc, +2 more | `kept` | | +| `nomarchy-toggle-nightlight` | `themes/engine/scripts` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-toggle-notification-silencing` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/desktop/waybar/config/config.jsonc, +1 more | `kept` | | +| `nomarchy-toggle-suspend` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-toggle-waybar` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-tui-install` | `features/scripts/utils` | features/scripts/utils/nomarchy-tui-remove-all | `kept` | | +| `nomarchy-tui-remove` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-tui-remove-all` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-tz-select` | `core/system/scripts` | features/desktop/waybar/config/config.jsonc,features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-update` | `core/system/scripts` | features/desktop/waybar/config/config.jsonc,features/desktop/waybar/themes/summer-night/config.jsonc, +2 more | `kept` | | +| `nomarchy-update-available` | `features/scripts/utils` | features/desktop/waybar/config/config.jsonc,features/desktop/waybar/themes/summer-night/config.jsonc | `kept` | | +| `nomarchy-update-time` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | | +| `nomarchy-voxtype-config` | `features/scripts/utils` | features/desktop/waybar/config/config.jsonc,features/desktop/waybar/themes/summer-night/config.jsonc | `kept` | | +| `nomarchy-voxtype-install` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-voxtype-model` | `features/scripts/utils` | features/desktop/waybar/config/config.jsonc,features/desktop/waybar/themes/summer-night/config.jsonc | `kept` | | +| `nomarchy-voxtype-remove` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-voxtype-status` | `features/scripts/utils` | features/desktop/waybar/config/config.jsonc,features/desktop/waybar/themes/summer-night/config.jsonc | `kept` | | +| `nomarchy-webapp-handler-hey` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-webapp-handler-zoom` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-webapp-install` | `features/scripts/utils` | features/scripts/utils/nomarchy-webapp-remove-all | `kept` | | +| `nomarchy-webapp-remove` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-webapp-remove-all` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-welcome` | `features/scripts/utils` | — | `unused?` | | +| `nomarchy-wifi-powersave` | `core/system/scripts` | — | `unused?` | | +| `nomarchy-windows-vm` | `features/scripts/utils` | — | `unused?` | | -## Menu items (`features/scripts/utils/nomarchy-menu`) +## Missing references -The menu has 23 `show_*_menu` functions. List each entry with its target script and tag whether it's wired, broken, or an Omarchy leftover. +Tokens grepped from `core/`, `features/`, `themes/`, `installer/`, `hosts/`, `bin/`, `lib/` that have no matching script file. -| Submenu | Entry | Calls | Status | Notes | -| --- | --- | --- | --- | --- | -| _(rows go here — Phase A populates this section)_ | | | `unknown` | | +| Token | Referenced in | Status | +| --- | --- | --- | +| `nomarchy-backup` | features/scripts/utils/nomarchy-sync | `missing` | +| `nomarchy-cmd-` | core/home/config/nomarchy/default/hypr/bindings/media.conf,core/home/config/nomarchy/default/hypr/bindings/utilities.conf, +12 more | `missing` | +| `nomarchy-docs-keybindings` | bin/utils/nomarchy-docs-keybindings | `missing` | +| `nomarchy-docs-scripts` | bin/utils/nomarchy-docs-scripts | `missing` | +| `nomarchy-dryrun` | installer/install.sh | `missing` | +| `nomarchy-font` | core/system/fonts.nix,features/scripts/utils/nomarchy-menu, +5 more | `missing` | +| `nomarchy-font-selector` | themes/engine/switcher.nix | `missing` | +| `nomarchy-hyprland-active-window-transparency-toggle` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf | `missing` | +| `nomarchy-hyprland-monitor-scaling-cycle` | core/home/config/nomarchy/default/hypr/bindings/tiling-v2.conf,features/scripts/utils/nomarchy-menu, +1 more | `missing` | +| `nomarchy-hyprland-window-close-all` | core/home/config/nomarchy/default/hypr/bindings/tiling.conf,core/home/config/nomarchy/default/hypr/bindings/tiling-v2.conf, +3 more | `missing` | +| `nomarchy-hyprland-window-gaps-toggle` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/scripts/utils/nomarchy-menu | `missing` | +| `nomarchy-hyprland-window-pop` | core/home/config/nomarchy/default/hypr/bindings/tiling-v2.conf,features/desktop/scripts/nomarchy-hyprland-window-pop | `missing` | +| `nomarchy-hyprland-window-single-square-aspect-toggle` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/scripts/utils/nomarchy-menu | `missing` | +| `nomarchy-hyprland-workspace-layout-toggle` | core/home/config/nomarchy/default/hypr/bindings/tiling-v2.conf,features/scripts/utils/nomarchy-menu | `missing` | +| `nomarchy-install` | hosts/installer-iso.nix,installer/install.sh | `missing` | +| `nomarchy-installer-vm` | features/scripts/utils/nomarchy-test-installer | `missing` | +| `nomarchy-launch-` | core/home/config/nomarchy/default/hypr/bindings/clipboard.conf,core/home/config/nomarchy/default/hypr/bindings/utilities.conf, +22 more | `missing` | +| `nomarchy-luks` | installer/disko-golden.nix,installer/install.sh | `missing` | +| `nomarchy-manual` | features/scripts/utils/nomarchy-menu,themes/engine/scripts/nomarchy-theme-install | `missing` | +| `nomarchy-menu-rows` | bin/utils/nomarchy-docs-scripts | `missing` | +| `nomarchy-nopasswd-` | core/system/scripts/nomarchy-sudo-passwordless-toggle | `missing` | +| `nomarchy-pkg` | core/system/scripts/nomarchy-pkg-add,core/system/scripts/nomarchy-pkg-remove, +3 more | `missing` | +| `nomarchy-pkg-` | core/system/scripts/nomarchy-pkg-add,core/system/scripts/nomarchy-pkg-remove, +3 more | `missing` | +| `nomarchy-pkg-drop` | features/scripts/utils/nomarchy-voxtype-remove | `missing` | +| `nomarchy-plymouth` | themes/engine/plymouth.nix | `missing` | +| `nomarchy-refresh-` | features/scripts/utils/nomarchy-refresh-config,features/scripts/utils/nomarchy-refresh-fastfetch | `missing` | +| `nomarchy-restart` | core/system/scripts/nomarchy-restart-xcompose,features/desktop/scripts/nomarchy-restart-hypridle, +8 more | `missing` | +| `nomarchy-restart-` | core/system/scripts/nomarchy-restart-xcompose,features/desktop/scripts/nomarchy-restart-hypridle, +8 more | `missing` | +| `nomarchy-restart-hypridle` | features/scripts/utils/nomarchy-menu | `missing` | +| `nomarchy-restart-hyprsunset` | features/scripts/utils/nomarchy-menu | `missing` | +| `nomarchy-restart-swayosd` | features/scripts/utils/nomarchy-menu | `missing` | +| `nomarchy-restart-walker` | features/scripts/utils/nomarchy-menu,themes/engine/scripts/nomarchy-theme-set | `missing` | +| `nomarchy-restart-waybar` | features/scripts/utils/nomarchy-menu,features/scripts/utils/nomarchy-voxtype-install, +2 more | `missing` | +| `nomarchy-rollback` | installer/disko-golden.nix | `missing` | +| `nomarchy-screenrecord-filename` | features/scripts/utils/nomarchy-cmd-screenrecord | `missing` | +| `nomarchy-scripts` | core/system/scripts/nomarchy-preflight-migration,features/scripts/battery-monitor.nix, +1 more | `missing` | +| `nomarchy-sddm-theme` | themes/engine/sddm.nix | `missing` | +| `nomarchy-setup-` | features/scripts/utils/nomarchy-menu | `missing` | +| `nomarchy-skill` | core/home/configs.nix | `missing` | +| `nomarchy-swayosd-brightness` | core/system/scripts/nomarchy-brightness-display,core/system/scripts/nomarchy-brightness-display-apple, +1 more | `missing` | +| `nomarchy-swayosd-kbd-brightness` | core/system/scripts/nomarchy-brightness-keyboard,features/desktop/scripts/nomarchy-swayosd-kbd-brightness | `missing` | +| `nomarchy-system-scripts` | core/system/hardware.nix,core/system/scripts-derivation.nix, +1 more | `missing` | +| `nomarchy-theme` | features/scripts/utils/nomarchy-menu,features/scripts/utils/nomarchy-on-boot, +12 more | `missing` | +| `nomarchy-theme-` | features/scripts/utils/nomarchy-menu,features/scripts/utils/nomarchy-on-boot, +12 more | `missing` | +| `nomarchy-theme-engine-scripts` | themes/engine/scripts.nix | `missing` | +| `nomarchy-theme-selector` | themes/engine/switcher.nix | `missing` | +| `nomarchy-themes-no-images` | themes/engine/files.nix | `missing` | +| `nomarchy-toggle-` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/desktop/waybar/config/config.jsonc, +3 more | `missing` | +| `nomarchy-toggle-screensaver` | features/scripts/utils/nomarchy-menu | `missing` | +| `nomarchy-update-` | features/desktop/waybar/config/config.jsonc,features/desktop/waybar/themes/summer-night/config.jsonc, +1 more | `missing` | +| `nomarchy-update-firmware` | features/scripts/utils/nomarchy-menu | `missing` | +| `nomarchy-version` | features/scripts/utils/nomarchy-snapshot | `missing` | +| `nomarchy-vm` | features/scripts/utils/nomarchy-test-vm | `missing` | +| `nomarchy-wallpaper` | core/home/config/nomarchy/default/hypr/autostart.conf,features/desktop/hyprland/default.nix, +2 more | `missing` | +| `nomarchy-wallpaper-selector` | themes/engine/switcher.nix | `missing` | +| `nomarchy-webapp-handler` | features/scripts/utils/nomarchy-webapp-remove,features/scripts/utils/nomarchy-webapp-remove-all | `missing` | +| `nomarchy-windows` | features/scripts/utils/nomarchy-windows-vm | `missing` | -## Known orphans (snapshot at audit kickoff) +## Menu items -These appear as callers in code but have no matching script today. Each needs triage: +Walked from `features/scripts/utils/nomarchy-menu`. Each `case` arm in a `show_*_menu` function becomes one row. -- `nomarchy-backup` -- `nomarchy-debug` -- `nomarchy-dryrun` -- `nomarchy-font` -- `nomarchy-font-selector` -- `nomarchy-install` -- `nomarchy-install-docker-dbs` -- `nomarchy-installer-vm` -- `nomarchy-luks` -- `nomarchy-manual` -- `nomarchy-pkg` -- `nomarchy-pkg-aur-add` -- `nomarchy-pkg-drop` -- `nomarchy-pkg-install` -- `nomarchy-plymouth` -- `nomarchy-refresh-hyprland` -- `nomarchy-refresh-waybar` -- `nomarchy-reinstall` -- `nomarchy-rollback` -- `nomarchy-screenrecord-filename` -- `nomarchy-sddm-theme` -- `nomarchy-skill` -- `nomarchy-theme` -- `nomarchy-theme-next` -- `nomarchy-theme-selector` -- `nomarchy-themes-no-images` -- `nomarchy-update-firmware` -- `nomarchy-upload-log` -- `nomarchy-version` -- `nomarchy-vm` -- `nomarchy-wallpaper` +| Submenu | Entry | Calls | Status | +| --- | --- | --- | --- | +| `show_learn_menu` | Keybindings | `nomarchy-menu-keybindings` | `kept` | +| `show_learn_menu` | Nomarchy | `nomarchy-launch-webapp` | `kept` | +| `show_learn_menu` | Hyprland | `nomarchy-launch-webapp` | `kept` | +| `show_learn_menu` | Arch | `nomarchy-launch-webapp` | `kept` | +| `show_learn_menu` | Bash | `nomarchy-launch-webapp` | `kept` | +| `show_learn_menu` | Neovim | `nomarchy-launch-webapp` | `kept` | +| `show_trigger_menu` | Capture | `_(inline)_` | `kept` | +| `show_trigger_menu` | Share | `_(inline)_` | `kept` | +| `show_trigger_menu` | Toggle | `_(inline)_` | `kept` | +| `show_trigger_menu` | Hardware | `_(inline)_` | `kept` | +| `show_capture_menu` | Screenshot | `nomarchy-cmd-screenshot` | `kept` | +| `show_capture_menu` | Screenrecord | `_(inline)_` | `kept` | +| `show_capture_menu` | Color | `_(inline)_` | `kept` | +| `show_share_menu` | Clipboard | `nomarchy-cmd-share` | `kept` | +| `show_share_menu` | File | `nomarchy-cmd-share` | `kept` | +| `show_share_menu` | Folder | `nomarchy-cmd-share` | `kept` | +| `show_toggle_menu` | Screensaver | `nomarchy-toggle-screensaver` | `missing` | +| `show_toggle_menu` | Nightlight | `nomarchy-toggle-nightlight` | `kept` | +| `show_toggle_menu` | Idle | `nomarchy-toggle-idle` | `kept` | +| `show_toggle_menu` | Bar | `nomarchy-toggle-waybar` | `kept` | +| `show_toggle_menu` | Layout | `nomarchy-hyprland-workspace-layout-toggle` | `missing` | +| `show_toggle_menu` | Ratio | `nomarchy-hyprland-window-single-square-aspect-toggle` | `missing` | +| `show_toggle_menu` | Gaps | `nomarchy-hyprland-window-gaps-toggle` | `missing` | +| `show_toggle_menu` | Scaling | `nomarchy-hyprland-monitor-scaling-cycle` | `missing` | +| `show_style_menu` | Theme | `_(inline)_` | `kept` | +| `show_style_menu` | Font | `_(inline)_` | `kept` | +| `show_style_menu` | Background | `_(inline)_` | `kept` | +| `show_style_menu` | Hyprland | `_(inline)_` | `kept` | +| `show_style_menu` | Screensaver | `_(inline)_` | `kept` | +| `show_style_menu` | About | `_(inline)_` | `kept` | +| `show_setup_menu` | Audio | `nomarchy-launch-audio` | `kept` | +| `show_setup_menu` | Wifi | `nomarchy-launch-wifi` | `kept` | +| `show_setup_menu` | Bluetooth | `nomarchy-launch-bluetooth` | `kept` | +| `show_setup_menu` | Power | `_(inline)_` | `kept` | +| `show_setup_menu` | System | `_(inline)_` | `kept` | +| `show_setup_menu` | Monitors | `_(inline)_` | `kept` | +| `show_setup_menu` | Keybindings | `_(inline)_` | `kept` | +| `show_setup_menu` | Input | `_(inline)_` | `kept` | +| `show_setup_menu` | DNS | `nomarchy-setup-dns` | `kept` | +| `show_setup_menu` | Security | `_(inline)_` | `kept` | +| `show_setup_menu` | Config | `_(inline)_` | `kept` | +| `show_setup_security_menu` | Fingerprint | `nomarchy-setup-fingerprint` | `kept` | +| `show_setup_security_menu` | Fido2 | `nomarchy-setup-fido2` | `kept` | +| `show_setup_config_menu` | Defaults | `_(inline)_` | `kept` | +| `show_setup_config_menu` | Hyprland | `_(inline)_` | `kept` | +| `show_setup_config_menu` | Hypridle | `nomarchy-restart-hypridle` | `missing` | +| `show_setup_config_menu` | Hyprlock | `_(inline)_` | `kept` | +| `show_setup_config_menu` | Hyprsunset | `nomarchy-restart-hyprsunset` | `missing` | +| `show_setup_config_menu` | Swayosd | `nomarchy-restart-swayosd` | `missing` | +| `show_setup_config_menu` | Walker | `nomarchy-restart-walker` | `missing` | +| `show_setup_config_menu` | Waybar | `nomarchy-restart-waybar` | `missing` | +| `show_setup_config_menu` | XCompose | `nomarchy-restart-xcompose` | `kept` | +| `show_setup_config_menu` | Overrides | `_(inline)_` | `kept` | +| `show_setup_system_menu` | Suspend | `nomarchy-toggle-suspend` | `kept` | +| `show_update_menu` | Nomarchy | `nomarchy-update` | `kept` | +| `show_update_menu` | Themes | `nomarchy-theme-update` | `kept` | +| `show_update_menu` | Process | `_(inline)_` | `kept` | +| `show_update_menu` | Hardware | `_(inline)_` | `kept` | +| `show_update_menu` | Firmware | `nomarchy-update-firmware` | `missing` | +| `show_update_menu` | Timezone | `nomarchy-tz-select` | `kept` | +| `show_update_menu` | Time | `nomarchy-update-time` | `kept` | +| `show_update_menu` | Password | `_(inline)_` | `kept` | +| `show_update_process_menu` | Hypridle | `nomarchy-restart-hypridle` | `missing` | +| `show_update_process_menu` | Hyprsunset | `nomarchy-restart-hyprsunset` | `missing` | +| `show_update_process_menu` | Swayosd | `nomarchy-restart-swayosd` | `missing` | +| `show_update_process_menu` | Walker | `nomarchy-restart-walker` | `missing` | +| `show_update_process_menu` | Waybar | `nomarchy-restart-waybar` | `missing` | +| `show_update_hardware_menu` | Audio | `nomarchy-restart-pipewire` | `kept` | +| `show_update_hardware_menu` | Wi-Fi | `nomarchy-restart-wifi` | `kept` | +| `show_update_hardware_menu` | Bluetooth | `nomarchy-restart-bluetooth` | `kept` | +| `show_update_password_menu` | Drive | `nomarchy-drive-set-password` | `kept` | +| `show_update_password_menu` | User | `_(inline)_` | `kept` | +| `show_system_menu` | Screensaver | `nomarchy-launch-screensaver` | `kept` | +| `show_system_menu` | Lock | `nomarchy-lock-screen` | `kept` | +| `show_system_menu` | Suspend | `_(inline)_` | `kept` | +| `show_system_menu` | Hibernate | `_(inline)_` | `kept` | +| `show_system_menu` | Logout | `nomarchy-system-logout` | `kept` | +| `show_system_menu` | Restart | `nomarchy-system-reboot` | `kept` | +| `show_system_menu` | Shutdown | `nomarchy-system-shutdown` | `kept` | -(Re-run the generator to refresh this list before each audit batch — the snapshot above is from `2026-04-25`.)