diff --git a/docs/build-manual.py b/docs/build-manual.py index a9ec0e7..06d33ee 100644 --- a/docs/build-manual.py +++ b/docs/build-manual.py @@ -79,6 +79,7 @@ def build_concat(root: Path) -> str: body = _with_entries(body, path, entries) if body: body = re.sub(r"\n*", "", body, flags=re.DOTALL) + body = re.sub(r"\[([^\]]+)\]\(/[^)]+\)", r"\1", body) chunks.append(mt.shift_headings(body, depth)) return "\n\n".join(chunks) + "\n" diff --git a/docs/fish-config.1 b/docs/fish-config.1 index 8eb547e..566d4cc 100644 --- a/docs/fish-config.1 +++ b/docs/fish-config.1 @@ -1,56 +1,36 @@ '\" t -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.6.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} -.TH "FISH-CONFIG" "7" "June 2026" "" "Fish Shell Configuration User Manual" -.hy +.TH "FISH\-CONFIG" "7" "June 2026" "" "Fish Shell Configuration User Manual" .SH NAME -.PP -fish-config - personal fish shell configuration for Fish 4.x with modern -CLI tool integration +fish\-config \- personal fish shell configuration for Fish 4.x with +modern CLI tool integration .SH SYNOPSIS .IP -.nf -\f[C] +.EX help config [SECTION] -\f[R] -.fi +.EE .PP Open this manual in the best available pager. Optionally jump to a section by keyword: .IP -.nf -\f[C] +.EX help config keybindings help config pkg help config abbreviations help config logs -\f[R] -.fi +.EE .PP -The \f[V]help config\f[R] syntax integrates with fish\[cq]s built-in +The \f[CR]help config\f[R] syntax integrates with fish\[cq]s built\-in help command. -The underlying \f[V]config-help\f[R] function is also available +The underlying \f[CR]config\-help\f[R] function is also available directly. .SH DESCRIPTION -.PP -A production-grade Fish shell configuration targeting Fish 4.x. +A production\-grade Fish shell configuration targeting Fish 4.x. It provides: .IP \[bu] 2 -Drop-in replacements for common Unix tools (ls, cat, rm, du, ping, less) +Drop\-in replacements for common Unix tools (ls, cat, rm, du, ping, +less) .IP \[bu] 2 Deep Kitty and WezTerm terminal integration: tab/window/pane management from the command line @@ -61,50 +41,49 @@ below) .IP \[bu] 2 Automatic Python virtualenv activation on directory change .IP \[bu] 2 -Cross-platform package management via pkg and fish-deps +Cross\-platform package management via pkg and fish\-deps .IP \[bu] 2 AI session helpers for Claude Code and Antigravity .IP \[bu] 2 Catppuccin Mocha color theme throughout .PP CAUTION: \f[B]SESSION LOGGING IS ON BY DEFAULT\f[R] This configuration -silently records terminal output to \f[V]\[ti]/.terminal_history\f[R]: +silently records terminal output to \f[CR]\[ti]/.terminal_history\f[R]: Kitty scrollback on window close, live tmux pane streams, zellij pane snapshots on exit, and full paru/yay output. These logs can contain command output, file contents, and secrets printed to the terminal. Nothing leaves your machine, but the files persist locally. -- Disable all logging with: -\f[V]set -U __fish_config_op_logging off\f[R] - Prefer a menu? -Run the interactive picker: \f[V]config-settings\f[R] - See Section 7 -(C5 - Logging and Capture) for the full breakdown. +\- Disable all logging with: +\f[CR]set \-U __fish_config_op_logging off\f[R] \- Prefer a menu? +Run the interactive picker: \f[CR]config\-settings\f[R] \- See C5 \[em] +Logging and Capture for the full breakdown. .PP The configuration uses a structured file tree: .IP -.nf -\f[C] +.EX \[ti]/.config/fish/ ├── config.fish Main entry point; sets env vars and PATH ├── conf.d/ │ ├── abbr.fish All abbreviations -│ ├── autopair.fish Auto-pair brackets and quotes +│ ├── autopair.fish Auto\-pair brackets and quotes │ ├── cheat.fish cheat.sh tab completions │ ├── done.fish Desktop notifications for long commands -│ ├── first_run.fish One-time init: Fisher bootstrap, theme +│ ├── first_run.fish One\-time init: Fisher bootstrap, theme │ ├── key_bindings.fish Custom key bindings and Vi mode -│ ├── logging-events.fish C5 event handlers; syncs logging state -│ ├── kitty-watcher-reminder.fish C5 per-session Kitty watcher reminder -│ ├── paru-wrapper.fish Auto-generates paru logging wrapper +│ ├── logging\-events.fish C5 event handlers; syncs logging state +│ ├── kitty\-watcher\-reminder.fish C5 per\-session Kitty watcher reminder +│ ├── paru\-wrapper.fish Auto\-generates paru logging wrapper │ ├── puffer.fish !! / !$ / ./ expansion -│ ├── tmux-logging.fish C5 starts tmux pipe-pane capture -│ ├── zellij-logging.fish C5 fish_exit handler for zellij +│ ├── tmux\-logging.fish C5 starts tmux pipe\-pane capture +│ ├── zellij\-logging.fish C5 fish_exit handler for zellij │ ├── sponge_privacy.fish Sponge privacy patterns -│ ├── starship.fish fish_prompt shell-integration markers +│ ├── starship.fish fish_prompt shell\-integration markers │ ├── tailscale.fish Tailscale CLI tab completions │ ├── theme.fish Catppuccin syntax highlight colors -│ ├── tricks.fish PATH, bang-bang helpers, bat man pages +│ ├── tricks.fish PATH, bang\-bang helpers, bat man pages │ ├── wakatime.fish WakaTime shell hook -│ ├── yay-wrapper.fish Auto-generates yay logging wrapper +│ ├── yay\-wrapper.fish Auto\-generates yay logging wrapper │ └── zoxide.fish Zoxide z/zi integration; overrides cd ├── functions/ Custom functions, one per file ├── completions/ Tab completion scripts @@ -112,21 +91,19 @@ The configuration uses a structured file tree: │ └── fzf.fish FZF Catppuccin theme and key bindings ├── scripts/ │ ├── clean_progress_log.py Strips typescript animations for clean logs -│ └── agents-tools/ AGENTS.md scripts and git hooks +│ └── agents\-tools/ AGENTS.md scripts and git hooks └── docs/ Offline documentation and man page - ├── fish-config.md Primary source manual - ├── fish-config.1 Compiled man page (auto-generated) - ├── fish-config.index Section index for help config - ├── html/ Chunked HTML docs (auto-generated) - └── wiki/ Markdown wiki (auto-generated) -\f[R] -.fi + ├── fish\-config.md Primary source manual + ├── fish\-config.1 Compiled man page (auto\-generated) + ├── fish\-config.index Section index for help config + ├── html/ Chunked HTML docs (auto\-generated) + └── wiki/ Markdown wiki (auto\-generated) +.EE .PP * * * * * .SH TABLE OF CONTENTS .IP -.nf -\f[C] +.EX 1. Configuration Variables 2. PATH Setup 3. Key Bindings @@ -167,18 +144,16 @@ The configuration uses a structured file tree: 11.2 Fish Version Requirement 11.3 Disable Session Logging 11.4 Change or Disable the Greeting - 11.5 Secrets and Machine-Local Configuration + 11.5 Secrets and Machine\-Local Configuration 11.6 Tool Init Does Nothing (Return Sentinel) 11.7 Missing Dependencies 11.8 Vi Mode Keybindings 11.9 Minimal Mode / Disabling Opinionated Features 12. Viewing This Manual -\f[R] -.fi +.EE .PP * * * * * .SH 1. CONFIGURATION VARIABLES -.PP These variables are exported from config.fish on every interactive session. Override them in local.fish (see Section 10, Personalization). @@ -194,30 +169,30 @@ Value T} _ T{ -\f[V]XDG_CONFIG_HOME\f[R] +\f[CR]XDG_CONFIG_HOME\f[R] T}@T{ -\f[V]\[ti]/.config\f[R] +\f[CR]\[ti]/.config\f[R] T} T{ -\f[V]XDG_CACHE_HOME\f[R] +\f[CR]XDG_CACHE_HOME\f[R] T}@T{ -\f[V]\[ti]/.cache\f[R] +\f[CR]\[ti]/.cache\f[R] T} T{ -\f[V]XDG_DATA_HOME\f[R] +\f[CR]XDG_DATA_HOME\f[R] T}@T{ -\f[V]\[ti]/.local/share\f[R] +\f[CR]\[ti]/.local/share\f[R] T} T{ -\f[V]XDG_STATE_HOME\f[R] +\f[CR]XDG_STATE_HOME\f[R] T}@T{ -\f[V]\[ti]/.local/state\f[R] +\f[CR]\[ti]/.local/state\f[R] T} .TE .PP Tools that respect XDG are directed to these paths rather than polluting $HOME. -.SS Tool Homes (XDG-compliant) +.SS Tool Homes (XDG\-compliant) .PP .TS tab(@); @@ -229,39 +204,39 @@ Value T} _ T{ -\f[V]CARGO_HOME\f[R] +\f[CR]CARGO_HOME\f[R] T}@T{ -\f[V]$XDG_DATA_HOME/cargo\f[R] +\f[CR]$XDG_DATA_HOME/cargo\f[R] T} T{ -\f[V]RUSTUP_HOME\f[R] +\f[CR]RUSTUP_HOME\f[R] T}@T{ -\f[V]$XDG_DATA_HOME/rustup\f[R] +\f[CR]$XDG_DATA_HOME/rustup\f[R] T} T{ -\f[V]GOPATH\f[R] +\f[CR]GOPATH\f[R] T}@T{ -\f[V]$XDG_DATA_HOME/go\f[R] +\f[CR]$XDG_DATA_HOME/go\f[R] T} T{ -\f[V]BUN_INSTALL\f[R] +\f[CR]BUN_INSTALL\f[R] T}@T{ -\f[V]$XDG_DATA_HOME/bun\f[R] +\f[CR]$XDG_DATA_HOME/bun\f[R] T} T{ -\f[V]NPM_CONFIG_PREFIX\f[R] +\f[CR]NPM_CONFIG_PREFIX\f[R] T}@T{ -\f[V]$XDG_DATA_HOME/npm-global\f[R] +\f[CR]$XDG_DATA_HOME/npm\-global\f[R] T} T{ -\f[V]GNUPGHOME\f[R] +\f[CR]GNUPGHOME\f[R] T}@T{ -\f[V]$XDG_CONFIG_HOME/gnupg\f[R] +\f[CR]$XDG_CONFIG_HOME/gnupg\f[R] T} T{ -\f[V]WAKATIME_HOME\f[R] +\f[CR]WAKATIME_HOME\f[R] T}@T{ -\f[V]$XDG_CONFIG_HOME/wakatime\f[R] +\f[CR]$XDG_CONFIG_HOME/wakatime\f[R] T} .TE .SS Editor and Pager @@ -276,26 +251,27 @@ Value / Notes T} _ T{ -\f[V]EDITOR\f[R] +\f[CR]EDITOR\f[R] T}@T{ -\f[V]nvim\f[R] (falls back to \f[V]vi\f[R] if \f[V]nvim\f[R] is absent) +\f[CR]nvim\f[R] (falls back to \f[CR]vi\f[R] if \f[CR]nvim\f[R] is +absent) T} T{ -\f[V]VISUAL\f[R] +\f[CR]VISUAL\f[R] T}@T{ -unset by default; set a GUI editor via \f[V]local.fish\f[R] (the -\f[V]edit\f[R] function falls back to a GUI chain when \f[V]VISUAL\f[R] -is empty) +unset by default; set a GUI editor via \f[CR]local.fish\f[R] (the +\f[CR]edit\f[R] function falls back to a GUI chain when +\f[CR]VISUAL\f[R] is empty) T} T{ -\f[V]SUDO_EDITOR\f[R] +\f[CR]SUDO_EDITOR\f[R] T}@T{ -same as \f[V]EDITOR\f[R] +same as \f[CR]EDITOR\f[R] T} T{ -\f[V]PAGER\f[R] +\f[CR]PAGER\f[R] T}@T{ -\f[V]ov\f[R] (falls back to \f[V]less\f[R]) +\f[CR]ov\f[R] (falls back to \f[CR]less\f[R]) T} .TE .SS Scrollback History @@ -310,45 +286,45 @@ Value / Notes T} _ T{ -\f[V]__fish_scrollback_history_dir\f[R] +\f[CR]__fish_scrollback_history_dir\f[R] T}@T{ -(unset → \f[V]\[ti]/.terminal_history\f[R]) +(unset → \f[CR]\[ti]/.terminal_history\f[R]) T} T{ -\f[V]__fish_scrollback_history_max_files\f[R] +\f[CR]__fish_scrollback_history_max_files\f[R] T}@T{ -(unset → \f[V]100\f[R]) +(unset → \f[CR]100\f[R]) T} T{ -\f[V]SCROLLBACK_HISTORY_DIR\f[R] +\f[CR]SCROLLBACK_HISTORY_DIR\f[R] T}@T{ -\f[V]\[ti]/.terminal_history\f[R] (exported mirror) +\f[CR]\[ti]/.terminal_history\f[R] (exported mirror) T} T{ -\f[V]SCROLLBACK_HISTORY_MAX_FILES\f[R] +\f[CR]SCROLLBACK_HISTORY_MAX_FILES\f[R] T}@T{ -\f[V]100\f[R] (exported mirror) +\f[CR]100\f[R] (exported mirror) T} .TE .PP -The \f[V]__fish_scrollback_history_*\f[R] universal variables are the -fish-style source of truth \[em] set them via \f[V]config-settings\f[R] -→ Paths, or \f[V]set -U\f[R] directly. -\f[V]config.fish\f[R] exports the \f[V]SCROLLBACK_HISTORY_*\f[R] mirrors -from them, because the POSIX wrapper scripts -(\f[V]paru\f[R]/\f[V]yay\f[R]/\f[V]tmux\f[R]/\f[V]zellij\f[R] logging -and \f[V]_prune_terminal_logs\f[R]) read the exported names from the -environment. -When the \f[V]__fish_\f[R] vars are unset, the documented defaults are +The \f[CR]__fish_scrollback_history_*\f[R] universal variables are the +fish\-style source of truth \[em] set them via +\f[CR]config\-settings\f[R] → Paths, or \f[CR]set \-U\f[R] directly. +\f[CR]config.fish\f[R] exports the \f[CR]SCROLLBACK_HISTORY_*\f[R] +mirrors from them, because the POSIX wrapper scripts +(\f[CR]paru\f[R]/\f[CR]yay\f[R]/\f[CR]tmux\f[R]/\f[CR]zellij\f[R] +logging and \f[CR]_prune_terminal_logs\f[R]) read the exported names +from the environment. +When the \f[CR]__fish_\f[R] vars are unset, the documented defaults are exported. -\f[V]config.fish\f[R] deliberately does not create a global source var, +\f[CR]config.fish\f[R] deliberately does not create a global source var, which would shadow the universal and stop live edits from taking effect. .PP -Scrollback logs accumulate in \f[V]SCROLLBACK_HISTORY_DIR\f[R] as +Scrollback logs accumulate in \f[CR]SCROLLBACK_HISTORY_DIR\f[R] as timestamped files. -When the count exceeds \f[V]SCROLLBACK_HISTORY_MAX_FILES\f[R] the oldest -are pruned automatically on exit. -Use \f[V]logs\f[R] to browse them interactively. +When the count exceeds \f[CR]SCROLLBACK_HISTORY_MAX_FILES\f[R] the +oldest are pruned automatically on exit. +Use \f[CR]logs\f[R] to browse them interactively. .SS Other .PP .TS @@ -363,42 +339,41 @@ Notes T} _ T{ -\f[V]GPG_TTY\f[R] +\f[CR]GPG_TTY\f[R] T}@T{ -\f[V]$(tty)\f[R] +\f[CR]$(tty)\f[R] T}@T{ ensures GPG passphrase prompts work T} T{ -\f[V]CLAUDE_CODE_NO_FLICKER\f[R] +\f[CR]CLAUDE_CODE_NO_FLICKER\f[R] T}@T{ -\f[V]1\f[R] +\f[CR]1\f[R] T}@T{ suppress terminal flicker in Claude Code T} T{ -\f[V]CDPATH\f[R] +\f[CR]CDPATH\f[R] T}@T{ -\f[V]. \[ti]/projects \[ti]\f[R] +\f[CR]. \[ti]/projects \[ti]\f[R] T}@T{ T} .TE .PP -Opinionated defaults (\f[V]CDPATH\f[R], -\f[V]PAGER\f[R]/\f[V]MANPAGER\f[R], Vi mode, command shadows, terminal +Opinionated defaults (\f[CR]CDPATH\f[R], +\f[CR]PAGER\f[R]/\f[CR]MANPAGER\f[R], Vi mode, command shadows, terminal integrations) can be switched off per category with universal variables \[em] see Section 7, \[lq]Opinionated Components (Minimal Mode)\[rq]. .SS Pager Hierarchy +\f[CR]$PAGER\f[R] is set to \f[CR]ov\f[R] when available, falling back +to \f[CR]less\f[R]. +The \f[CR]less\f[R] wrapper function extends this into a full chain so +anything that calls \f[CR]less\f[R] directly also benefits: .PP -\f[V]$PAGER\f[R] is set to \f[V]ov\f[R] when available, falling back to -\f[V]less\f[R]. -The \f[V]less\f[R] wrapper function extends this into a full chain so -anything that calls \f[V]less\f[R] directly also benefits: +\f[CR]$PAGER\f[R] → \f[CR]ov\f[R] → \f[CR]less\f[R] → \f[CR]more\f[R] → +\f[CR]cat\f[R] .PP -\f[V]$PAGER\f[R] → \f[V]ov\f[R] → \f[V]less\f[R] → \f[V]more\f[R] → -\f[V]cat\f[R] -.PP -When \f[V]bat\f[R] is installed, man pages are rendered with syntax +When \f[CR]bat\f[R] is installed, man pages are rendered with syntax highlighting: .PP .TS @@ -411,45 +386,39 @@ Value T} _ T{ -\f[V]MANROFFOPT\f[R] +\f[CR]MANROFFOPT\f[R] T}@T{ -\f[V]-c\f[R] +\f[CR]\-c\f[R] T} T{ -\f[V]MANPAGER\f[R] +\f[CR]MANPAGER\f[R] T}@T{ -\f[V]sh -c \[aq]col -bx \[rs]| bat -l man -p\[aq]\f[R] +\f[CR]sh \-c \[aq]col \-bx \[rs]| bat \-l man \-p\[aq]\f[R] T} .TE .SS Integrations .SS Zoxide -.PP -\f[V]cd\f[R], \f[V]z\f[R], and \f[V]cdi\f[R]/\f[V]zi\f[R] are all mapped -to \f[V]zoxide\f[R]-backed navigation. -Tab completions for \f[V]cd\f[R] and \f[V]z\f[R] blend standard -directory entries (CWD and \f[V]CDPATH\f[R]) with frecency results so -both familiar and frequently-visited paths appear in one list. +\f[CR]cd\f[R], \f[CR]z\f[R], and \f[CR]cdi\f[R]/\f[CR]zi\f[R] are all +mapped to \f[CR]zoxide\f[R]\-backed navigation. +Tab completions for \f[CR]cd\f[R] and \f[CR]z\f[R] blend standard +directory entries (CWD and \f[CR]CDPATH\f[R]) with frecency results so +both familiar and frequently\-visited paths appear in one list. .SS DirEnv -.PP -Automatically loads \f[V].envrc\f[R] files on directory change. -Takes priority over the auto-venv logic \[em] if a directory is managed -by \f[V]direnv\f[R], the auto-venv activation is skipped entirely. +Automatically loads \f[CR].envrc\f[R] files on directory change. +Takes priority over the auto\-venv logic \[em] if a directory is managed +by \f[CR]direnv\f[R], the auto\-venv activation is skipped entirely. .SS Auto Python Venv -.PP -When entering a directory that contains a \f[V].venv/\f[R], the +When entering a directory that contains a \f[CR].venv/\f[R], the virtualenv is activated automatically and deactivated when you leave the project tree. .SS WakaTime -.PP -Every shell command is reported to WakaTime for time-tracking. -Set \f[V]FISH_WAKATIME_DISABLED=1\f[R] to disable without removing the +Every shell command is reported to WakaTime for time\-tracking. +Set \f[CR]FISH_WAKATIME_DISABLED=1\f[R] to disable without removing the plugin. .SS Tailscale -.PP -Full tab completion for the \f[V]tailscale\f[R] CLI is provided via -\f[V]conf.d/tailscale.fish\f[R]. +Full tab completion for the \f[CR]tailscale\f[R] CLI is provided via +\f[CR]conf.d/tailscale.fish\f[R]. .SS Done Notifications -.PP Desktop notifications fire when a command takes longer than 10 seconds and the terminal window is not focused. Configured via fish universal variables: @@ -464,48 +433,47 @@ Value T} _ T{ -\f[V]__done_min_cmd_duration\f[R] +\f[CR]__done_min_cmd_duration\f[R] T}@T{ -\f[V]10000\f[R] ms +\f[CR]10000\f[R] ms T} T{ -\f[V]__done_notification_urgency_level\f[R] +\f[CR]__done_notification_urgency_level\f[R] T}@T{ -\f[V]low\f[R] +\f[CR]low\f[R] T} .TE .SS Scrollback History -.PP -When running inside Kitty, closing a shell session via \f[V]exit\f[R] +When running inside Kitty, closing a shell session via \f[CR]exit\f[R] saves a timestamped scrollback snapshot to -\f[V]SCROLLBACK_HISTORY_DIR\f[R]. +\f[CR]SCROLLBACK_HISTORY_DIR\f[R]. Files are named: .PP -\f[V]scrollback_YYYY-MM-DD_HH-MM-SS.log\f[R] +\f[CR]scrollback_YYYY\-MM\-DD_HH\-MM\-SS.log\f[R] .PP -The \f[V]paru\f[R] and \f[V]yay\f[R] wrappers (auto-generated in -\f[V]\[ti]/.local/bin/\f[R]) run the command inside a PTY via -\f[V]script(1)\f[R] so download progress bars are preserved on screen, +The \f[CR]paru\f[R] and \f[CR]yay\f[R] wrappers (auto\-generated in +\f[CR]\[ti]/.local/bin/\f[R]) run the command inside a PTY via +\f[CR]script(1)\f[R] so download progress bars are preserved on screen, then render the captured terminal animation down to a clean static log -via \f[V]scripts/clean_progress_log.py\f[R] (a small terminal-screen +via \f[CR]scripts/clean_progress_log.py\f[R] (a small terminal\-screen emulator that replays cursor movements, collapses repainted progress frames to their final state, and preserves ANSI color). -If \f[V]python3\f[R] is unavailable the wrapper falls back to dropping -only the \f[V]script(1)\f[R] header/footer. +If \f[CR]python3\f[R] is unavailable the wrapper falls back to dropping +only the \f[CR]script(1)\f[R] header/footer. Output is saved to: .IP \[bu] 2 -\f[V]paru_YYYY-MM-DD_HH-MM-SS.log\f[R] +\f[CR]paru_YYYY\-MM\-DD_HH\-MM\-SS.log\f[R] .IP \[bu] 2 -\f[V]yay_YYYY-MM-DD_HH-MM-SS.log\f[R] +\f[CR]yay_YYYY\-MM\-DD_HH\-MM\-SS.log\f[R] .PP -Before pruning, \f[V]_scrollback_prune_junk\f[R] silently removes empty +Before pruning, \f[CR]_scrollback_prune_junk\f[R] silently removes empty files, files with only a single meaningful line (e.g.\ bare -\f[V][exited]\f[R] captures), and Kitty tab-rename prompt captures. -Use \f[V]exit --no-log\f[R] (or \f[V]exit -n\f[R]) to skip capture. +\f[CR][exited]\f[R] captures), and Kitty tab\-rename prompt captures. +Use \f[CR]exit \-\-no\-log\f[R] (or \f[CR]exit \-n\f[R]) to skip +capture. .PP * * * * * .SH 2. PATH SETUP -.PP Directories prepended to PATH in this order (first wins): .PP .TS @@ -518,74 +486,72 @@ Purpose T} _ T{ -\f[V]\[ti]/.local/bin\f[R] +\f[CR]\[ti]/.local/bin\f[R] T}@T{ -Standard user-local executables +Standard user\-local executables T} T{ -\f[V]\[ti]/Applications\f[R] +\f[CR]\[ti]/Applications\f[R] T}@T{ -User-installed standalone apps +User\-installed standalone apps T} T{ -\f[V]\[ti]/scripts\f[R] +\f[CR]\[ti]/scripts\f[R] T}@T{ Personal shell scripts T} T{ -\f[V]\[ti]/bin\f[R] +\f[CR]\[ti]/bin\f[R] T}@T{ Cargo binaries (appended \[em] lowest priority) T} T{ -\f[V]$BUN_INSTALL/bin\f[R] +\f[CR]$BUN_INSTALL/bin\f[R] T}@T{ Bun runtime and global packages T} T{ -\f[V]$NPM_CONFIG_PREFIX/bin\f[R] +\f[CR]$NPM_CONFIG_PREFIX/bin\f[R] T}@T{ Global npm packages T} T{ -\f[V]\[ti]/.lmstudio/bin\f[R] +\f[CR]\[ti]/.lmstudio/bin\f[R] T}@T{ LM Studio CLI T} T{ -\f[V]\[ti]/.resend/bin\f[R] +\f[CR]\[ti]/.resend/bin\f[R] T}@T{ Resend CLI T} T{ -\f[V]\[ti]/.fzf/bin\f[R] +\f[CR]\[ti]/.fzf/bin\f[R] T}@T{ -\f[V]fzf\f[R] binary (git-installed) +\f[CR]fzf\f[R] binary (git\-installed) T} .TE .PP Cargo binaries are intentionally appended (lowest priority) to avoid -shadowing system-installed Rust tools. +shadowing system\-installed Rust tools. .PP NOTE: While these directories are merged with your system\[cq]s existing -\f[V]$PATH\f[R] values, any executables in the prepended directories +\f[CR]$PATH\f[R] values, any executables in the prepended directories above will override (shadow) system binaries of the same name. .PP TIP: This standard PATH setup is gated behind the opinionated component overrides toggle. If you prefer to manage your PATH completely manually, you can disable -it by setting \f[V]__fish_config_op_overrides\f[R] to \f[V]0\f[R] (or -toggle it off in the \f[V]config-settings\f[R] menu). +it by setting \f[CR]__fish_config_op_overrides\f[R] to \f[CR]0\f[R] (or +toggle it off in the \f[CR]config\-settings\f[R] menu). .PP * * * * * .SH 3. KEY BINDINGS -.PP The shell uses Vi key bindings (fish_vi_key_bindings). All custom bindings are active in Insert, Normal, and Visual modes unless noted. .IP -.nf -\f[C] +.EX Binding Action ───────────────────────────────────────────────────────────────────── Ctrl+G Insert the head of the previous command\[aq]s last path @@ -603,7 +569,7 @@ Ctrl+F Interactive history substitution. Type old/new then Ctrl+Alt+U Strip the first token of the current command line, leaving arguments in place with the cursor at the start. Useful for quickly retyping the command. - Example: \[dq]mkdir new_folder\[dq] -> \[dq] new_folder\[dq] + Example: \[dq]mkdir new_folder\[dq] \-> \[dq] new_folder\[dq] Ctrl+Alt+= Evaluate the current command line buffer with Qalculate! (qalc) and print the result inline. @@ -612,50 +578,43 @@ Ctrl+Alt+= Evaluate the current command line buffer with prints 162 Ctrl+Enter Smart execute: runs commands instantly without - pressing Enter a second time for certain fast-path - commands (speedtest-fast, etc.). + pressing Enter a second time for certain fast\-path + commands (speedtest\-fast, etc.). \[at]\[at] FZF inline picker. Type \[at]\[at] anywhere on the command line to open an fzf picker and insert a selection at the cursor position. -\f[R] -.fi +.EE .SS FZF Bindings (bundled from PatrickF1/fzf.fish) .IP -.nf -\f[C] +.EX Ctrl+R Search command history -Ctrl+Alt+F Search git-tracked files +Ctrl+Alt+F Search git\-tracked files Ctrl+Alt+L Search git log Ctrl+Alt+S Search git status Ctrl+V Search shell variables Ctrl+Alt+P Search running processes -\f[R] -.fi +.EE .PP * * * * * .SH 4. ABBREVIATIONS -.PP Abbreviations expand when you press Space or Enter. -They are terminal-aware: some expand differently in Kitty vs WezTerm vs +They are terminal\-aware: some expand differently in Kitty vs WezTerm vs other terminals. .SS 4.1 Editors .IP -.nf -\f[C] +.EX n / nv / neovim nvim e edit se sudoedit k kate -editt Open new tab with nvim (terminal-aware) +editt Open new tab with nvim (terminal\-aware) cdnv cd \[ti]/.config/nvim cdnvn cd \[ti]/.config/nvim; nvim -\f[R] -.fi +.EE .SS 4.2 Navigation and Listing .IP -.nf -\f[C] +.EX l ls lS lss (sort by size) lsR lsr (sort by time, oldest first) @@ -664,25 +623,20 @@ lT lt (tree, depth 2) lsT lstree (full recursive tree) lzd ld (lazydocker) cdi zi (interactive zoxide picker) -\f[R] -.fi +.EE .SS 4.3 Git .IP -.nf -\f[C] +.EX g git lg lazygit -gitig / git-ignore gi (generate .gitignore) -\f[R] -.fi +gitig / git\-ignore gi (generate .gitignore) +.EE .SS 4.4 Terminal Windows, Tabs, and Panes -.PP These abbreviations control the terminal emulator. Each has a Kitty variant and a WezTerm variant; the correct one is inserted based on $TERM or $TERM_PROGRAM. .IP -.nf -\f[C] +.EX :w New OS window :wv Split pane horizontally (new pane below) :wh Split pane vertically (new pane to the right) @@ -697,14 +651,12 @@ inserted based on $TERM or $TERM_PROGRAM. :q Close current pane/window :Q Close current tab :sw spwin (spawn new OS window) -\f[R] -.fi +.EE .PP -Quick-navigate shortcuts open windows/tabs/panes with preset working +Quick\-navigate shortcuts open windows/tabs/panes with preset working dirs: .IP -.nf -\f[C] +.EX :tgk New tab at \[ti]/.config/kitty :tgn New tab at \[ti]/.config/nvim :tgf New tab at \[ti]/.config/fish @@ -713,29 +665,25 @@ dirs: :tgcm New tab at chezmoi source dir :tgp New tab at \[ti]/projects :tgr New tab at / (root) -\f[R] -.fi +.EE .PP Prefixes :wg* and :wvg* / :whg* open OS windows or splits to the same set of dirs, respectively. .PP Prefixes :cd* open tabs with a quick cd shortcut: .IP -.nf -\f[C] +.EX :cdn cd \[ti]/.config/nvim :cdf cd \[ti]/.config/fish :cdh cd \[ti] :cdcz cd to chezmoi source :cdp cd \[ti]/projects -\f[R] -.fi +.EE .PP Appending n to any :cd* abbreviation also runs nvim after changing dir. .SS 4.5 Chezmoi .IP -.nf -\f[C] +.EX cm / cme / cmi / cmap / cmad / cmrm / cmcd / cz / cze / czi / czap / czad / czrm / czcd @@ -746,144 +694,118 @@ cmad / czad chezmoi add cmap / czap chezmoi apply cmrm / cmf / czrm / czf chezmoi forget cmi / czi chezmoi init -\f[R] -.fi +.EE .SS 4.6 Docker .IP -.nf -\f[C] +.EX dcl docker context use default dcls docker context ls lzd ld (lazydocker) -\f[R] -.fi +.EE .SS 4.7 Systemctl .IP -.nf -\f[C] +.EX sc systemctl ssc sudo systemctl -scu systemctl --user +scu systemctl \-\-user st systemctl status scs sudo systemctl start scr sudo systemctl restart ssct sudo systemctl start sscs sudo systemctl stop sscr sudo systemctl restart -\f[R] -.fi +.EE .SS 4.8 AI Assistants .IP -.nf -\f[C] +.EX ag agy ag. agy . -v antigravity-ide +v antigravity\-ide s wezterm ssh (WezTerm only) -\f[R] -.fi +.EE .SS 4.9 History Expansion -.PP These are implemented as keybinding helpers, but can also be typed: .IP -.nf -\f[C] +.EX !\[ha] Expand to first argument of previous command !* Expand to all arguments of previous command typo_sub Interactive typo substitution (Ctrl+F) bang_string !string expansion bang_search !?string search -bang_minus_n !-n (nth-previous command) -\f[R] -.fi +bang_minus_n !\-n (nth\-previous command) +.EE .SS 4.10 Miscellaneous .IP -.nf -\f[C] +.EX /exit exit :q Close pane (alias for terminal close) :Q Close tab -sudu sudo -s +sudu sudo \-s kt kitty (Kitty only) c cat -speedtest-fast fast-cli +speedtest\-fast fast\-cli bl bd list bs bd sync -bC bd create --title +bC bd create \-\-title bsh bd show lb lazybeads -\f[R] -.fi +.EE .SS 4.11 Shell Aliases -.PP These aliases are defined in conf.d/tricks.fish via alias (which creates Fish functions). They are active in all interactive sessions. .SS Navigation .IP -.nf -\f[C] +.EX \&.. cd .. \&... cd ../.. \&.... cd ../../.. \&..... cd ../../../.. \&...... cd ../../../../.. -\f[R] -.fi +.EE .SS Color Overrides -.PP Force color output for common tools: .IP -.nf -\f[C] -grep grep --color=auto -fgrep fgrep --color=auto -egrep egrep --color=auto -dir dir --color=auto -vdir vdir --color=auto -\f[R] -.fi +.EX +grep grep \-\-color=auto +fgrep fgrep \-\-color=auto +egrep egrep \-\-color=auto +dir dir \-\-color=auto +vdir vdir \-\-color=auto +.EE .SS Safety Wrappers -.PP -Add -i (interactive confirmation) to destructive commands: +Add \-i (interactive confirmation) to destructive commands: .IP -.nf -\f[C] -cp cp -i -mv mv -i -\f[R] -.fi +.EX +cp cp \-i +mv mv \-i +.EE .SS Archives and Networking .IP -.nf -\f[C] -tarnow tar -acf Create compressed archive (auto-detects format) -untar tar -zxvf Extract a gzip-compressed archive -wget wget -c Resume interrupted downloads by default +.EX +tarnow tar \-acf Create compressed archive (auto\-detects format) +untar tar \-zxvf Extract a gzip\-compressed archive +wget wget \-c Resume interrupted downloads by default tb nc termbin.com 9999 Pipe content to termbin.com for quick sharing -\f[R] -.fi +.EE .SS System Logs .IP -.nf -\f[C] -jctl journalctl -p 3 -xb Show priority-3 (error) journal entries +.EX +jctl journalctl \-p 3 \-xb Show priority\-3 (error) journal entries from the current boot -\f[R] -.fi +.EE .PP * * * * * .SH 5. FUNCTIONS REFERENCE .SS 5.1 File and Directory .SS cat .IP -.nf -\f[C] +.EX Synopsis: cat [args...] Enhanced cat replacement. Wraps bat for files, giving syntax highlighting and line numbers; passes directories to ls; falls back to raw cat for -ANSI-colored log files, and finally to /usr/bin/cat if bat is not +ANSI\-colored log files, and finally to /usr/bin/cat if bat is not installed. Arguments: @@ -892,12 +814,10 @@ Arguments: Example: cat README.md cat \[ti]/projects/myapp -\f[R] -.fi +.EE .SS copy .IP -.nf -\f[C] +.EX Synopsis: copy Wrapper for cp that strips trailing slashes from source directories, @@ -910,36 +830,32 @@ Arguments: Example: copy ./mydir/ \[ti]/backup copy ./mydir/ \[ti]/backup # copies mydir INTO backup, not backup/mydir/ -\f[R] -.fi +.EE .SS du .IP -.nf -\f[C] -Synopsis: du [--disk|--dir|--dua] [args...] +.EX +Synopsis: du [\-\-disk|\-\-dir|\-\-dua] [args...] -Smart disk-usage dispatcher. Without flags, routes to the most appropriate +Smart disk\-usage dispatcher. Without flags, routes to the most appropriate tool by context; explicit flags force one. Falls back to system du when the preferred tool is not installed. Arguments: - --disk Force duf (disk-level free/used overview) - --dir Force dust (per-directory tree breakdown) - --dua Force dua (fast interactive space analyzer) + \-\-disk Force duf (disk\-level free/used overview) + \-\-dir Force dust (per\-directory tree breakdown) + \-\-dua Force dua (fast interactive space analyzer) args... Files/directories or flags forwarded to the selected tool Example: du \[ti]/Downloads -du --disk -\f[R] -.fi +du \-\-disk +.EE .SS dusize .IP -.nf -\f[C] +.EX Synopsis: dusize [dir] -Shows a human-readable disk usage summary using du -sh. Defaults to the +Shows a human\-readable disk usage summary using du \-sh. Defaults to the current directory if no argument is given. Arguments: @@ -948,12 +864,10 @@ Arguments: Example: dusize \[ti]/Downloads dusize \[ti]/Videos -\f[R] -.fi +.EE .SS lD .IP -.nf -\f[C] +.EX Synopsis: lD [args...] Lists only directories in long format with icons and hyperlinks. Uses eza, @@ -964,12 +878,10 @@ Arguments: Example: lD \[ti]/projects -\f[R] -.fi +.EE .SS ls .IP -.nf -\f[C] +.EX Synopsis: ls [args...] Lists all files in long format with icons and hyperlinks. Uses eza, @@ -981,13 +893,11 @@ Arguments: Example: ls \[ti]/projects ls -ls -a \[ti]/projects -\f[R] -.fi +ls \-a \[ti]/projects +.EE .SS lsr .IP -.nf -\f[C] +.EX Synopsis: lsr [args...] Lists files sorted by modification time in reverse (oldest first), one @@ -998,12 +908,10 @@ Arguments: Example: lsr \[ti]/projects -\f[R] -.fi +.EE .SS lss .IP -.nf -\f[C] +.EX Synopsis: lss [args...] Lists all files sorted by size in long format with gradient color scaling. @@ -1014,48 +922,42 @@ Arguments: Example: lss \[ti]/downloads -\f[R] -.fi +.EE .SS lstree .IP -.nf -\f[C] +.EX Synopsis: lstree [args...] Displays a full recursive tree of the current directory with icons. -Uses eza, falls back to lsd, then to system ls -R. +Uses eza, falls back to lsd, then to system ls \-R. Arguments: args... Arguments forwarded to the listing command Example: lstree \[ti]/projects/myapp -\f[R] -.fi +.EE .SS lt .IP -.nf -\f[C] +.EX Synopsis: lt [args...] Displays a directory tree limited to depth 2 with icons. Uses eza, -falls back to lsd, then to system ls -R. +falls back to lsd, then to system ls \-R. Arguments: args... Arguments forwarded to the listing command Example: lt \[ti]/projects -\f[R] -.fi +.EE .SS ltr .IP -.nf -\f[C] +.EX Synopsis: ltr [args...] Lists all files sorted by modification time in reverse (oldest first) in -long format with age-based gradient color scaling. Uses eza, falls back +long format with age\-based gradient color scaling. Uses eza, falls back to lsd, then to system ls. Arguments: @@ -1063,38 +965,34 @@ Arguments: Example: ltr \[ti]/projects -\f[R] -.fi +.EE .SS lx .IP -.nf -\f[C] +.EX Synopsis: lx [args...] Lists all files sorted by file extension in long format with icons. Uses -eza, falls back to lsd, then to system ls -lX. +eza, falls back to lsd, then to system ls \-lX. Arguments: args... Arguments forwarded to the listing command Example: lx \[ti]/projects -\f[R] -.fi +.EE .SS mkcd .IP -.nf -\f[C] -Synopsis: mkcd [-s | --silent] +.EX +Synopsis: mkcd [\-s | \-\-silent] Creates a directory (including any missing parent directories) and immediately changes into it. Prints a tree of created directories by -default, or suppresses output with -s. Delegates creation to +default, or suppresses output with \-s. Delegates creation to _fish_mkdir_p. Arguments: - -h, --help Show usage help - -s, --silent Suppress directory creation output + \-h, \-\-help Show usage help + \-s, \-\-silent Suppress directory creation output Directory to create and enter Exit Status: @@ -1104,30 +1002,26 @@ Exit Status: Example: mkcd \[ti]/projects/myapp mkcd \[ti]/projects/newapp/src -\f[R] -.fi +.EE .SS mkdir .IP -.nf -\f[C] +.EX Synopsis: mkdir [args...] Interactive wrapper around mkdir that calls _fish_mkdir_p for each directory argument to display created path components. Falls back to -command mkdir -p when flags (e.g. -m 755) are present, and to plain -command mkdir in non-interactive contexts. +command mkdir \-p when flags (e.g. \-m 755) are present, and to plain +command mkdir in non\-interactive contexts. Arguments: args... Directories to create, or flags passed through to command mkdir Example: mkdir \[ti]/projects/myapp/src -\f[R] -.fi +.EE .SS poke .IP -.nf -\f[C] +.EX Synopsis: poke [file...] Creates files using touch, automatically creating any missing parent @@ -1142,15 +1036,13 @@ Exit Status: Example: poke \[ti]/projects/new/src/main.fish -\f[R] -.fi +.EE .SS rg .IP -.nf -\f[C] +.EX Synopsis: rg [args...] -Wraps ripgrep with --hyperlink-format=kitty when running inside Kitty +Wraps ripgrep with \-\-hyperlink\-format=kitty when running inside Kitty terminal, enabling clickable file links in search results. Falls back to plain rg on other terminals. @@ -1160,19 +1052,17 @@ Arguments: Example: rg \[dq]TODO\[dq] src/ rg \[dq]fish_greeting\[dq] \[ti]/.config/fish/ -rg -l \[dq]TODO\[dq] \[ti]/projects/myapp -\f[R] -.fi +rg \-l \[dq]TODO\[dq] \[ti]/projects/myapp +.EE .SS rm .IP -.nf -\f[C] -Synopsis: rm [-e [options] | -S | args...] +.EX +Synopsis: rm [\-e [options] | \-S | args...] Enhanced rm that routes deletions through trash when safe. With no -arguments, lists current trash contents. -e/--empty empties the trash -(with optional trash-empty sub-arguments). -S/--secure permanently -deletes via rm -rf and triggers fstrim. Plain paths and -r/-R are sent +arguments, lists current trash contents. \-e/\-\-empty empties the trash +(with optional trash\-empty sub\-arguments). \-S/\-\-secure permanently +deletes via rm \-rf and triggers fstrim. Plain paths and \-r/\-R are sent to trash put; any other flags fall back to system rm. Opinionated component (C1): when disabled via __fish_config_op_aliases @@ -1181,9 +1071,9 @@ command rm \[em] no wrapper, no trash, no trapping. Arguments: (none) List current trash contents - -e, --empty [opts] Empty the trash; opts forwarded to trash empty - -S, --secure Permanently delete targets and run fstrim (irreversible) - -r, -R, --recursive Forwarded to trash put alongside path arguments + \-e, \-\-empty [opts] Empty the trash; opts forwarded to trash empty + \-S, \-\-secure Permanently delete targets and run fstrim (irreversible) + \-r, \-R, \-\-recursive Forwarded to trash put alongside path arguments args... Files or paths to trash or remove Exit Status: @@ -1195,26 +1085,24 @@ Notes: Example: rm file.txt -rm -e -rm -S sensitive_key.pem -\f[R] -.fi +rm \-e +rm \-S sensitive_key.pem +.EE .SS scrub .IP -.nf -\f[C] -Synopsis: scrub [-a] [-d] [-h] +.EX +Synopsis: scrub [\-a] [\-d] [\-h] Recursively finds and removes OS metadata, editor artifacts, compiler garbage, and dev caches from the current directory using fd. Routes -deletions through the custom rm function, trashy, trash-cli, or system -rm -rf in that priority order. Aggressive mode adds node_modules, logs, +deletions through the custom rm function, trashy, trash\-cli, or system +rm \-rf in that priority order. Aggressive mode adds node_modules, logs, IDE directories, and AI tool artifacts. Arguments: - -a, --aggressive Also purge node_modules, *.log, .cache, .idea, AI artifacts - -d, --dry-run Show targets without deleting - -h, --help Show usage help + \-a, \-\-aggressive Also purge node_modules, *.log, .cache, .idea, AI artifacts + \-d, \-\-dry\-run Show targets without deleting + \-h, \-\-help Show usage help Exit Status: 0 Sweep completed (or dry run shown) @@ -1222,38 +1110,34 @@ Exit Status: Example: scrub -scrub -a -scrub -d -\f[R] -.fi +scrub \-a +scrub \-d +.EE .SS 5.2 Navigation .SS cdi .IP -.nf -\f[C] +.EX Synopsis: cdi [query] Alias for zi \[em] opens zoxide\[aq]s interactive directory picker for jumping to -frequently-visited directories using fzf. +frequently\-visited directories using fzf. Arguments: - query Optional search term to pre-filter the directory list + query Optional search term to pre\-filter the directory list Example: cdi myproject -\f[R] -.fi +.EE .SS clone .IP -.nf -\f[C] +.EX Synopsis: clone [args...] -Alias for clone-in-kitty that clones a repository into a new Kitty terminal +Alias for clone\-in\-kitty that clones a repository into a new Kitty terminal window. Only works inside the Kitty terminal. Arguments: - args... Arguments forwarded to clone-in-kitty (typically a repo URL) + args... Arguments forwarded to clone\-in\-kitty (typically a repo URL) Exit Status: 0 Repository cloned @@ -1261,19 +1145,17 @@ Exit Status: Example: clone https://github.com/user/repo.git -\f[R] -.fi +.EE .SS clonet .IP -.nf -\f[C] +.EX Synopsis: clonet [args...] -Alias for clone-in-kitty --type=tab that clones a repository into a new +Alias for clone\-in\-kitty \-\-type=tab that clones a repository into a new Kitty terminal tab. Only works inside the Kitty terminal. Arguments: - args... Arguments forwarded to clone-in-kitty (typically a repo URL) + args... Arguments forwarded to clone\-in\-kitty (typically a repo URL) Exit Status: 0 Repository cloned @@ -1281,37 +1163,35 @@ Exit Status: Example: clonet https://github.com/user/repo.git -\f[R] -.fi +.EE .SS 5.3 Editors and Viewers .SS edit .IP -.nf -\f[C] -Synopsis: edit [-V|-t] [-e EDITOR] [-c] [-x TEXT] [-n] [-v|-s] [FILE...] +.EX +Synopsis: edit [\-V|\-t] [\-e EDITOR] [\-c] [\-x TEXT] [\-n] [\-v|\-s] [FILE...] Opens files in a text editor, choosing a terminal or GUI editor and -resolving a rich chain of fallbacks. With no --visual/--terminal flag the -mode is auto-detected: interactive terminals get the terminal editor +resolving a rich chain of fallbacks. With no \-\-visual/\-\-terminal flag the +mode is auto\-detected: interactive terminals get the terminal editor ($EDITOR), while detached invocations (desktop shortcuts) get the GUI editor ($VISUAL). Clipboard contents and literal strings can be opened as -throwaway temp files. Editor output is suppressed unless --verbose. +throwaway temp files. Editor output is suppressed unless \-\-verbose. -GUI fallback chain: zed → antigravity-ide → code → kate → kwrite → - gnome-text-editor → gedit +GUI fallback chain: zed → antigravity\-ide → code → kate → kwrite → + gnome\-text\-editor → gedit Terminal fallback chain: nvim → vim → micro → nano → vi Arguments: FILE... Files to open (any number) - -V, --visual Force the GUI editor ($VISUAL or fallbacks) - -t, --terminal Force the terminal editor ($EDITOR or fallbacks) - -e, --editor=X Use a specific editor binary X - -c, --clipboard Open the clipboard contents (as a temp file) - -x, --text=STR Open STR as the contents of a new temp file - -n, --new Force a new window/instance (best-effort, where supported) - -v, --verbose Print the launch command and let editor output through - -s, --silent Suppress all output, including the editor\[aq]s - -h, --help Show this help message + \-V, \-\-visual Force the GUI editor ($VISUAL or fallbacks) + \-t, \-\-terminal Force the terminal editor ($EDITOR or fallbacks) + \-e, \-\-editor=X Use a specific editor binary X + \-c, \-\-clipboard Open the clipboard contents (as a temp file) + \-x, \-\-text=STR Open STR as the contents of a new temp file + \-n, \-\-new Force a new window/instance (best\-effort, where supported) + \-v, \-\-verbose Print the launch command and let editor output through + \-s, \-\-silent Suppress all output, including the editor\[aq]s + \-h, \-\-help Show this help message Exit Status: 0 Editor launched successfully @@ -1319,20 +1199,18 @@ Exit Status: Example: edit notes.txt -edit --visual \[ti]/.config/fish/config.fish -edit --terminal --new todo.md -edit --editor=code --clipboard -edit --text=\[dq]hello world\[dq] -\f[R] -.fi +edit \-\-visual \[ti]/.config/fish/config.fish +edit \-\-terminal \-\-new todo.md +edit \-\-editor=code \-\-clipboard +edit \-\-text=\[dq]hello world\[dq] +.EE .SS fc .IP -.nf -\f[C] +.EX Synopsis: fc [command_prefix] -Edits the last shell command -- or the most recent one matching a -prefix -- in $EDITOR, then executes the result. Bash-style fc +Edits the last shell command \-\- or the most recent one matching a +prefix \-\- in $EDITOR, then executes the result. Bash\-style fc behaviour. Falls back to vi when $EDITOR is unset, and aborts without executing if the buffer is left empty. @@ -1346,12 +1224,10 @@ Exit Status: Example: fc fc git -\f[R] -.fi +.EE .SS less .IP -.nf -\f[C] +.EX Synopsis: less [args...] Pager wrapper that tries $PAGER, then ov, then less, then more, then cat @@ -1362,59 +1238,53 @@ Arguments: Example: less /var/log/syslog -\f[R] -.fi +.EE .SS rawfish .IP -.nf -\f[C] +.EX Synopsis: rawfish [args...] Launches a Fish shell with NO_TMUX=1 set, bypassing any tmux -auto-attach or session management hooks. +auto\-attach or session management hooks. Arguments: args... Arguments forwarded to fish Example: rawfish -\f[R] -.fi +.EE .SS view .IP -.nf -\f[C] +.EX Synopsis: view [args...] -Opens files in nvim read-only mode (-R). Falls back to less if nvim +Opens files in nvim read\-only mode (\-R). Falls back to less if nvim is not installed. Arguments: - args... Files or options forwarded to nvim -R or less + args... Files or options forwarded to nvim \-R or less Example: view /etc/fstab -\f[R] -.fi +.EE .SS 5.4 Git and Version Control -.SS auto-pull +.SS auto\-pull .IP -.nf -\f[C] -Synopsis: auto-pull [list] - auto-pull add [PATH] - auto-pull remove - auto-pull status +.EX +Synopsis: auto\-pull [list] + auto\-pull add [PATH] + auto\-pull remove + auto\-pull status -Manages the auto-pull registry: the list of repositories that are -background fast-forwarded when you enter them (see conf.d/auto-pull.fish -and _auto_pull_sync). The fish-config repo is always covered as a baseline +Manages the auto\-pull registry: the list of repositories that are +background fast\-forwarded when you enter them (see conf.d/auto\-pull.fish +and _auto_pull_sync). The fish\-config repo is always covered as a baseline and does not need to be added. The registry is a plain text file, one -absolute git-toplevel path per line, stored machine-locally at -$__fish_user_dots_path/auto-pull.list (defaults to -\[ti]/.config/.user-dots/fish/auto-pull.list) and never committed. +absolute git\-toplevel path per line, stored machine\-locally at +$__fish_user_dots_path/auto\-pull.list (defaults to +\[ti]/.config/.user\-dots/fish/auto\-pull.list) and never committed. -Registry management works regardless of the C2 auto-execution guard; only +Registry management works regardless of the C2 auto\-execution guard; only the background sync itself is gated by __fish_config_op_autoexec. Arguments: @@ -1422,23 +1292,21 @@ Arguments: add [PATH] Register PATH\[aq]s git root; defaults to the current repo remove Unregister by basename or exact path status Show enabled/disabled state, repo count, and registry path - -h, --help Show this help message + \-h, \-\-help Show this help message Exit Status: 0 Subcommand succeeded 1 Bad usage, target is not a git repo, or target not registered Example: -cd \[ti]/src/qmk_firmware; and auto-pull add -auto-pull add \[ti]/work/api -auto-pull list -auto-pull remove qmk_firmware -\f[R] -.fi +cd \[ti]/src/qmk_firmware; and auto\-pull add +auto\-pull add \[ti]/work/api +auto\-pull list +auto\-pull remove qmk_firmware +.EE .SS branch .IP -.nf -\f[C] +.EX Synopsis: branch Switches to a local git branch, creating it if it does not already @@ -1452,70 +1320,64 @@ Exit Status: 1 Not inside a git work tree Example: -branch feature/new-ui -\f[R] -.fi +branch feature/new\-ui +.EE .SS gi .IP -.nf -\f[C] -Synopsis: gi [-h] [-b] [-p] [-s] [-l] [targets...] +.EX +Synopsis: gi [\-h] [\-b] [\-p] [\-s] [\-l] [targets...] Generates .gitignore content by querying the gitignore.io API. Appends -results to the repository\[aq]s .gitignore with MD5-based deduplication \[em] -patterns already present are not re-appended \[em] or prints to stdout with --s. Supports generic boilerplate and interactive prompt modes. +results to the repository\[aq]s .gitignore with MD5\-based deduplication \[em] +patterns already present are not re\-appended \[em] or prints to stdout with +\-s. Supports generic boilerplate and interactive prompt modes. Arguments: - -h, --help Show help message - -d, --description Show the function description - -l, --list List all supported targets from the API - -b, --boilerplate Append boilerplate from $GITIGNORE_BOILERPLATE - -p, --prompt Prompt for patterns to append - -s, --stdout Print API output to stdout instead of .gitignore - targets Comma- or space-separated list of language/tool names + \-h, \-\-help Show help message + \-d, \-\-description Show the function description + \-l, \-\-list List all supported targets from the API + \-b, \-\-boilerplate Append boilerplate from $GITIGNORE_BOILERPLATE + \-p, \-\-prompt Prompt for patterns to append + \-s, \-\-stdout Print API output to stdout instead of .gitignore + targets Comma\- or space\-separated list of language/tool names Exit Status: - 0 Patterns appended, or resolved with -s/--stdout or -l/--list + 0 Patterns appended, or resolved with \-s/\-\-stdout or \-l/\-\-list 1 Not in a git repository or API fetch failed Returns: - With -s/--stdout, the fetched .gitignore pattern text, printed to stdout. - With -l/--list, the supported target list, printed to stdout. + With \-s/\-\-stdout, the fetched .gitignore pattern text, printed to stdout. + With \-l/\-\-list, the supported target list, printed to stdout. Example: gi python,venv -gi -b -p -gi -s node > .gitignore -\f[R] -.fi -.SS git-clean +gi \-b \-p +gi \-s node > .gitignore +.EE +.SS git\-clean .IP -.nf -\f[C] -Synopsis: git-clean [-h] [-f] +.EX +Synopsis: git\-clean [\-h] [\-f] -Fetches and prunes the remote, fast-forwards the current branch, and +Fetches and prunes the remote, fast\-forwards the current branch, and deletes local branches whose tracking remote has been deleted. Switches to main/master automatically if the current branch is orphaned. Arguments: - -h, --help Show help message - -f, --force Force-delete unmerged orphaned branches (git branch -D) + \-h, \-\-help Show help message + \-f, \-\-force Force\-delete unmerged orphaned branches (git branch \-D) Exit Status: 0 Cleanup complete 1 Argument parsing failed Example: -git-clean --force -git-clean -\f[R] -.fi +git\-clean \-\-force +git\-clean +.EE .SS gitui .IP -.nf -\f[C] +.EX Synopsis: gitui [args...] Launches gitui with the Catppuccin Frappe theme (frappe.ron), passing any @@ -1526,12 +1388,10 @@ Arguments: Example: gitui -\f[R] -.fi +.EE .SS gitup .IP -.nf -\f[C] +.EX Synopsis: gitup [args...] Fetches updates from the remote and shows git status. Extra arguments @@ -1546,27 +1406,23 @@ Exit Status: Example: gitup -gitup --all -\f[R] -.fi +gitup \-\-all +.EE .SS hist .IP -.nf -\f[C] +.EX Synopsis: hist Searches fish history interactively using fzf, inserts the selected command -into the command line, and copies it to the clipboard via wl-copy. +into the command line, and copies it to the clipboard via wl\-copy. Example: hist -\f[R] -.fi +.EE .SS 5.5 Package Management .SS cleanup .IP -.nf -\f[C] +.EX Synopsis: cleanup Identifies and removes Arch Linux orphan packages using pacman. Logs @@ -1574,16 +1430,14 @@ package names and versions to \[ti]/.removed_orphans before removal. Example: cleanup -\f[R] -.fi +.EE .SS parur .IP -.nf -\f[C] +.EX Synopsis: parur -Presents an fzf picker of all installed packages (via pacman -Qqs) with -pacman -Qi previews, then removes the selected packages using paru or yay. +Presents an fzf picker of all installed packages (via pacman \-Qqs) with +pacman \-Qi previews, then removes the selected packages using paru or yay. Arch Linux only. Exit Status: @@ -1592,31 +1446,29 @@ Exit Status: Example: parur -\f[R] -.fi +.EE .SS pkg .IP -.nf -\f[C] -Synopsis: pkg [-h] [-i|-u] [package...] +.EX +Synopsis: pkg [\-h] [\-i|\-u] [package...] Installs or removes packages using the system\[aq]s available package manager. Supports paru, yay, pacman, apt, dnf, zypper, yum, brew, and pkg. In auto mode (no flag), detects whether each package is installed and toggles it \[em] installing if absent, removing if present. -The package-installed check uses the correct query for each manager: +The package\-installed check uses the correct query for each manager: - pacman/paru/yay pacman -Qi - apt dpkg -s - dnf/zypper/yum rpm -q + pacman/paru/yay pacman \-Qi + apt dpkg \-s + dnf/zypper/yum rpm \-q brew brew list pkg pkg info Arguments: - -h, --help Show help message - -i, --install Force install mode - -u, --uninstall Force uninstall mode + \-h, \-\-help Show help message + \-i, \-\-install Force install mode + \-u, \-\-uninstall Force uninstall mode package One or more package names to install or remove Exit Status: @@ -1625,14 +1477,12 @@ Exit Status: Example: pkg firefox -pkg -i ripgrep fd-find -pkg -u cowsay -\f[R] -.fi +pkg \-i ripgrep fd\-find +pkg \-u cowsay +.EE .SS search .IP -.nf -\f[C] +.EX Synopsis: search [args...] Delegates to paru or yay for interactive AUR package search and @@ -1647,15 +1497,13 @@ Exit Status: Example: search neovim -\f[R] -.fi +.EE .SS upgrade .IP -.nf -\f[C] +.EX Synopsis: upgrade -Runs a full system upgrade via paru or yay with --noconfirm. Falls +Runs a full system upgrade via paru or yay with \-\-noconfirm. Falls back to yay if paru is not installed. Arch Linux only. Exit Status: @@ -1664,27 +1512,23 @@ Exit Status: Example: upgrade -\f[R] -.fi +.EE .SS 5.6 Dependency Management .SS check_fish_deps .IP -.nf -\f[C] +.EX Synopsis: check_fish_deps -Backwards-compatibility wrapper that delegates to fish-deps status to +Backwards\-compatibility wrapper that delegates to fish\-deps status to report which fish shell dependencies are installed or missing. Example: check_fish_deps -\f[R] -.fi -.SS fish-deps +.EE +.SS fish\-deps .IP -.nf -\f[C] -Synopsis: fish-deps [status|install|update|sync] +.EX +Synopsis: fish\-deps [status|install|update|sync] Unified command for managing all tools this configuration depends on, dispatching to subcommand handlers. Defaults to status when no subcommand @@ -1705,7 +1549,7 @@ Dependencies are grouped into three tiers: Integrations wakatime, tailscale Recommended cargo, starship, uv, direnv, paru, yay, eza, lsd, bat, btop, dust, duf, prettyping, ov, ripgrep, lazygit, - lazydocker, trash, kitty, wezterm, python3, yt-dlp + lazydocker, trash, kitty, wezterm, python3, yt\-dlp Arguments: status Report installed/missing deps (default) @@ -1718,57 +1562,49 @@ Exit Status: 1 Unknown subcommand Example: -fish-deps sync -fish-deps -fish-deps install -fish-deps update -\f[R] -.fi -.SS fzf-update +fish\-deps sync +fish\-deps +fish\-deps install +fish\-deps update +.EE +.SS fzf\-update .IP -.nf -\f[C] -Synopsis: fzf-update +.EX +Synopsis: fzf\-update Installs or upgrades fzf from git HEAD into \[ti]/.fzf. Pulls the latest changes if \[ti]/.fzf already exists, or clones the repository if not. Example: -fzf-update -\f[R] -.fi +fzf\-update +.EE .SS 5.7 System and Monitoring -.SS limine-edit +.SS limine\-edit .IP -.nf -\f[C] -Synopsis: limine-edit +.EX +Synopsis: limine\-edit -Opens /boot/limine.conf in sudoedit, then re-enrolls the config hash, -runs CachyOS boot hooks (limine-mkinitcpio), and re-signs all Secure Boot +Opens /boot/limine.conf in sudoedit, then re\-enrolls the config hash, +runs CachyOS boot hooks (limine\-mkinitcpio), and re\-signs all Secure Boot files tracked by sbctl. Combines the edit and sign steps into a single command. Example: -limine-edit -\f[R] -.fi +limine\-edit +.EE .SS lock .IP -.nf -\f[C] +.EX Synopsis: lock -Locks the current desktop session using loginctl lock-session. +Locks the current desktop session using loginctl lock\-session. Example: lock -\f[R] -.fi +.EE .SS ports .IP -.nf -\f[C] +.EX Synopsis: ports Lists all active TCP listeners on the system using lsof, showing @@ -1776,21 +1612,19 @@ port numbers and addresses without hostname resolution. Example: ports -\f[R] -.fi +.EE .SS sbver .IP -.nf -\f[C] -Synopsis: sbver [--brief] +.EX +Synopsis: sbver [\-\-brief] Verifies Secure Boot signatures on all EFI binaries tracked by sbctl, -filtering out \[dq]invalid PE header\[dq] noise. Color-codes each file as +filtering out \[dq]invalid PE header\[dq] noise. Color\-codes each file as verified (green ✓) or unsigned (red ✗) and prints a final summary count. Arguments: - --brief Suppress per-file output; show only the final summary + \-\-brief Suppress per\-file output; show only the final summary Exit Status: 0 All binaries verified (or summary shown) @@ -1798,44 +1632,38 @@ Exit Status: Example: sbver -sbver --brief -\f[R] -.fi +sbver \-\-brief +.EE .SS screensleep .IP -.nf -\f[C] +.EX Synopsis: screensleep -Turns off the display after a 1-second delay by invoking the KDE +Turns off the display after a 1\-second delay by invoking the KDE PowerDevil \[dq]Turn Off Screen\[dq] global shortcut via busctl. Example: screensleep -\f[R] -.fi -.SS sudo-toggle +.EE +.SS sudo\-toggle .IP -.nf -\f[C] -Synopsis: sudo-toggle +.EX +Synopsis: sudo\-toggle Toggles the sudo NOPASSWD rule on and off via -/etc/sudoers.d/nofail-toggle. Useful for automated tasks that would +/etc/sudoers.d/nofail\-toggle. Useful for automated tasks that would otherwise require a password entry. Clears the sudo credential cache -when re-enabling, so the lockdown takes effect immediately. +when re\-enabling, so the lockdown takes effect immediately. Exit Status: 0 Rule toggled Example: -sudo-toggle -\f[R] -.fi +sudo\-toggle +.EE .SS swapstat .IP -.nf -\f[C] +.EX Synopsis: swapstat Displays a colorized memory report showing kernel swappiness, @@ -1844,12 +1672,10 @@ active swap priority (via swapon). Example: swapstat -\f[R] -.fi +.EE .SS top .IP -.nf -\f[C] +.EX Synopsis: top [args...] Wraps btop as a modern replacement for top. Falls back to system top @@ -1860,18 +1686,16 @@ Arguments: Example: top -\f[R] -.fi +.EE .SS 5.8 Terminal Management .SS bkg .IP -.nf -\f[C] +.EX Synopsis: bkg [args...] Launches a command in the background, fully detached from the terminal using nohup. All stdout and stderr output is discarded. Simpler than -detach; no --version flag. +detach; no \-\-version flag. Arguments: command The command to run detached @@ -1883,21 +1707,19 @@ Exit Status: Example: bkg firefox -\f[R] -.fi +.EE .SS detach .IP -.nf -\f[C] -Synopsis: detach [-h] [--version] [args...] +.EX +Synopsis: detach [\-h] [\-\-version] [args...] Runs a command in the background using nohup, fully detached from the terminal with stdout/stderr discarded. The command survives the current session. Arguments: - -h, --help Show help message - --version Show version information + \-h, \-\-help Show help message + \-\-version Show version information command The command to run detached args... Additional arguments for the command @@ -1906,22 +1728,20 @@ Exit Status: 1 No command provided or unknown option Example: -detach rsync -a ./data remote:/backup/ -\f[R] -.fi +detach rsync \-a ./data remote:/backup/ +.EE .SS split .IP -.nf -\f[C] -Synopsis: split [-h | -v] [command...] +.EX +Synopsis: split [\-h | \-v] [command...] Opens a new pane split in Kitty or WezTerm, optionally running a command in it. Defaults to a horizontal (bottom) split. The new pane inherits the current working directory. Arguments: - -h, --horizontal Open a horizontal split (default) - -v, --vertical Open a vertical split + \-h, \-\-horizontal Open a horizontal split (default) + \-v, \-\-vertical Open a vertical split command... Command to run in the new pane; opens a bare fish shell if omitted @@ -1931,16 +1751,14 @@ Exit Status: Example: split -split -v nvim README.md -\f[R] -.fi +split \-v nvim README.md +.EE .SS spwin .IP -.nf -\f[C] +.EX Synopsis: spwin [args...] -Spawns a new terminal OS window in Kitty (via spawn-window.sh if +Spawns a new terminal OS window in Kitty (via spawn\-window.sh if present, otherwise kitty \[at] launch) or WezTerm (via wezterm cli spawn). Arguments: @@ -1952,12 +1770,10 @@ Exit Status: Example: spwin -\f[R] -.fi +.EE .SS ssh .IP -.nf -\f[C] +.EX Synopsis: ssh [args...] Wraps ssh with kitten ssh inside Kitty terminal for better terminal @@ -1970,17 +1786,15 @@ Arguments: Example: ssh user\[at]host -\f[R] -.fi +.EE .SS tab .IP -.nf -\f[C] +.EX Synopsis: tab [args...] Opens a new tab in Kitty, WezTerm, or Konsole using the current working directory (or $cdto if set). Arguments are forwarded to the -terminal\[aq]s tab-open command. +terminal\[aq]s tab\-open command. Arguments: args... Arguments forwarded to the terminal\[aq]s launch command @@ -1991,20 +1805,18 @@ Exit Status: Example: tab -\f[R] -.fi +.EE .SS 5.9 Clipboard .SS p .IP -.nf -\f[C] +.EX Synopsis: p [args...] -Outputs clipboard contents to stdout. Uses wl-paste on Wayland, -falls back to xclip on X11. Supports -h/--help for usage info. +Outputs clipboard contents to stdout. Uses wl\-paste on Wayland, +falls back to xclip on X11. Supports \-h/\-\-help for usage info. Arguments: - -h, --help Show usage help + \-h, \-\-help Show usage help args... Arguments forwarded to the clipboard tool Exit Status: @@ -2017,15 +1829,13 @@ Returns: Example: p | grep foo p > file.txt -\f[R] -.fi +.EE .SS paste .IP -.nf -\f[C] +.EX Synopsis: paste [args...] -Outputs clipboard contents to stdout. Uses wl-paste on Wayland, +Outputs clipboard contents to stdout. Uses wl\-paste on Wayland, falls back to xclip on X11. Arguments: @@ -2040,15 +1850,13 @@ Returns: Example: paste > file.txt -\f[R] -.fi +.EE .SS y .IP -.nf -\f[C] +.EX Synopsis: y [text...] -Copies text to the system clipboard using wl-copy (Wayland) or xclip (X11). +Copies text to the system clipboard using wl\-copy (Wayland) or xclip (X11). Reads from stdin when no arguments are given. Arguments: @@ -2062,13 +1870,11 @@ Example: y \[dq]hello world\[dq] ls | y cat file.txt | y -\f[R] -.fi +.EE .SS 5.10 Network .SS gip .IP -.nf -\f[C] +.EX Synopsis: gip Fetches and prints both the public IPv4 and IPv6 addresses using @@ -2076,24 +1882,20 @@ icanhazip.com. Shows \[dq]Not detected\[dq] for any address that times out. Example: gip -\f[R] -.fi +.EE .SS gip4 .IP -.nf -\f[C] +.EX Synopsis: gip4 Fetches and prints the machine\[aq]s public IPv4 address using icanhazip.com. Example: gip4 -\f[R] -.fi +.EE .SS gip6 .IP -.nf -\f[C] +.EX Synopsis: gip6 Fetches and prints the machine\[aq]s public IPv6 address using icanhazip.com. @@ -2108,34 +1910,30 @@ Returns: Example: gip6 -\f[R] -.fi +.EE .SS ping .IP -.nf -\f[C] +.EX Synopsis: ping [args...] -Wraps prettyping with --nolegend by default for a cleaner display. -Pass --legend to show the legend. Falls back to system ping if +Wraps prettyping with \-\-nolegend by default for a cleaner display. +Pass \-\-legend to show the legend. Falls back to system ping if prettyping is not installed. Arguments: - --legend Show the prettyping legend (overrides default --nolegend) + \-\-legend Show the prettyping legend (overrides default \-\-nolegend) args... Arguments forwarded to prettyping or system ping Example: ping google.com -ping --legend google.com -\f[R] -.fi +ping \-\-legend google.com +.EE .SS qr .IP -.nf -\f[C] +.EX Synopsis: qr [text...] -Generates a UTF-8 QR code from the given text or from stdin if no +Generates a UTF\-8 QR code from the given text or from stdin if no argument is provided. Uses qrencode locally if available, otherwise falls back to the qrenco.de API via curl. @@ -2145,17 +1943,15 @@ Arguments: Example: qr \[dq]https://example.com\[dq] echo \[dq]hello\[dq] | qr -\f[R] -.fi +.EE .SS 5.11 Pager and Logging .SS logs .IP -.nf -\f[C] -Synopsis: logs [-h] [-c ] +.EX +Synopsis: logs [\-h] [\-c ] Interactively browses terminal log files (scrollback, paru, yay) sorted -newest-first using fzf. Supports viewing in $PAGER, editing, and deletion. +newest\-first using fzf. Supports viewing in $PAGER, editing, and deletion. Keybindings inside the fzf browser: Enter Open in $PAGER @@ -2164,28 +1960,26 @@ Keybindings inside the fzf browser: ? Toggle keybind help overlay Paru and yay logs open in ov with syntax highlighting and sticky section -headers. Scrollback logs open in ov with per-command sticky prompt headers +headers. Scrollback logs open in ov with per\-command sticky prompt headers based on OSC 133 markers. Arguments: - -h, --help Show help message - -c, --category cat Filter to one category: scrollback, paru, or yay + \-h, \-\-help Show help message + \-c, \-\-category cat Filter to one category: scrollback, paru, or yay Exit Status: 0 File viewed or no file selected 1 No log files found Example: -logs -c paru +logs \-c paru logs -logs -c scrollback -\f[R] -.fi +logs \-c scrollback +.EE .SS smart_exit .IP -.nf -\f[C] -Synopsis: smart_exit [-h] [-n] +.EX +Synopsis: smart_exit [\-h] [\-n] Closes the shell session. In Kitty, captures the terminal scrollback to a timestamped log file in $SCROLLBACK_HISTORY_DIR before exiting. @@ -2193,8 +1987,8 @@ Automatically prunes junk and the oldest logs when the count exceeds $SCROLLBACK_HISTORY_MAX_FILES. Arguments: - -h, --help Show help message - -n, --no-log Exit without saving a scrollback log + \-h, \-\-help Show help message + \-n, \-\-no\-log Exit without saving a scrollback log Exit Status: 0 Shell session exited @@ -2206,33 +2000,31 @@ Notes: Example: smart_exit -smart_exit --no-log -\f[R] -.fi +smart_exit \-\-no\-log +.EE .SS 5.12 AI and Developer Tools -.SS agents-init +.SS agents\-init .IP -.nf -\f[C] -Synopsis: agents-init [-a | --agents] [-p | --plugins] [-v | --verbose] - [-q | --quiet] [-s | --silent] [-h | --help] +.EX +Synopsis: agents\-init [\-a | \-\-agents] [\-p | \-\-plugins] [\-v | \-\-verbose] + [\-q | \-\-quiet] [\-s | \-\-silent] [\-h | \-\-help] -Scaffolds an AGENTS/ sub-repository inside a project directory. Creates -a self-contained git repo for agent specifications, moves any existing -agent-related files into it, and replaces them with symlinks so the outer +Scaffolds an AGENTS/ sub\-repository inside a project directory. Creates +a self\-contained git repo for agent specifications, moves any existing +agent\-related files into it, and replaces them with symlinks so the outer project never tracks agent files directly. File layout after setup: AGENTS/AGENTS.md canonical agent spec (real file) AGENTS/CLAUDE.md real file (if CLAUDE.md existed separately) - or symlink → AGENTS.md (single-source case) + or symlink → AGENTS.md (single\-source case) /AGENTS.md → AGENTS/AGENTS.md /CLAUDE.md → AGENTS/CLAUDE.md AGENTS/plans superpowers plans (real dir, .gitkeep) AGENTS/specs superpowers specs (real dir, .gitkeep) AGENTS/devlogs agent development logs (real dir, .gitkeep) AGENTS/.version MAJOR.MINOR.PATCH structure version (seed 1.0.0) - AGENTS/.agents-tools/ committed version-bump script + git hook shims + AGENTS/.agents\-tools/ committed version\-bump script + git hook shims docs/superpowers/plans → ../../AGENTS/plans (always) docs/superpowers/specs → ../../AGENTS/specs (always) docs/plans → ../AGENTS/plans (only if docs/plans existed) @@ -2243,60 +2035,58 @@ plans/ and specs/ are merged from every legacy location (docs/, docs/superpowers/, and the old AGENTS/plugins/ layout) into the canonical AGENTS/; the AGENTS/plugins/ layer is removed. -Each AGENTS repo carries a self-contained version bumper wired via -core.hooksPath: a pre-commit hook bumps AGENTS/.version on every commit +Each AGENTS repo carries a self\-contained version bumper wired via +core.hooksPath: a pre\-commit hook bumps AGENTS/.version on every commit (MINOR when the tracked directory set changes, PATCH otherwise; MAJOR is -manual-only), and a prepare-commit-msg hook appends \[dq](vX.Y.Z)\[dq] to the +manual\-only), and a prepare\-commit\-msg hook appends \[dq](vX.Y.Z)\[dq] to the commit subject. Each shim then chains (execs) to the global/system core.hooksPath hook of the same name, so this local override does not shadow global hooks (e.g. ggshield, Git LFS). The script/hooks are -version-managed from scripts/agents-tools/ and refreshed when their marker +version\-managed from scripts/agents\-tools/ and refreshed when their marker is stale. Downstream tooling can read AGENTS/.version directly \[em] a changed MINOR field signals a structure change. -With no flags, runs both --agents and --plugins setup; --agents re-runs -only the AGENTS.md / symlink step and --plugins only the plans/specs/ -devlogs wiring step. Managed paths are added to .gitignore. The sub-repo +With no flags, runs both \-\-agents and \-\-plugins setup; \-\-agents re\-runs +only the AGENTS.md / symlink step and \-\-plugins only the plans/specs/ +devlogs wiring step. Managed paths are added to .gitignore. The sub\-repo is pulled first when it has an upstream, and at the end of every -invocation any uncommitted changes inside it are auto-committed so -agent-made edits are captured automatically. Fully idempotent: a second +invocation any uncommitted changes inside it are auto\-committed so +agent\-made edits are captured automatically. Fully idempotent: a second run produces no output and no new commits. Called automatically by the claude and agy wrappers on every invocation. Arguments: - -a, --agents Set up AGENTS/ repo + AGENTS.md / CLAUDE.md symlinks only - -p, --plugins Set up AGENTS/ repo + plans/specs/devlogs dirs + docs/ symlinks only - -v, --verbose Print all per-step output (default) - -q, --quiet Print one summary line only if changes were made - -s, --silent Suppress all output; errors only (standard UNIX convention) - -h, --help Show this help message and exit + \-a, \-\-agents Set up AGENTS/ repo + AGENTS.md / CLAUDE.md symlinks only + \-p, \-\-plugins Set up AGENTS/ repo + plans/specs/devlogs dirs + docs/ symlinks only + \-v, \-\-verbose Print all per\-step output (default) + \-q, \-\-quiet Print one summary line only if changes were made + \-s, \-\-silent Suppress all output; errors only (standard UNIX convention) + \-h, \-\-help Show this help message and exit Exit Status: 0 Setup completed successfully 1 Fatal error (git init failed, move failed, etc.) Example: -agents-init -agents-init --agents -agents-init --plugins -agents-init --quiet -\f[R] -.fi +agents\-init +agents\-init \-\-agents +agents\-init \-\-plugins +agents\-init \-\-quiet +.EE .PP -\f[B]Used by:\f[R] \f[V]agy\f[R], \f[V]claude\f[R] +\f[B]Used by:\f[R] \f[CR]agy\f[R], \f[CR]claude\f[R] .SS agy .IP -.nf -\f[C] +.EX Synopsis: agy [ARGS...] Wrapper for the agy Antigravity AI CLI that ensures the AGENTS/ -sub-repository is initialized and any agent-made changes are committed -before launch. Delegates all scaffold and commit logic to agents-init ---quiet (full setup), which ensures AGENTS/ is scaffolded and CLAUDE.md +sub\-repository is initialized and any agent\-made changes are committed +before launch. Delegates all scaffold and commit logic to agents\-init +\-\-quiet (full setup), which ensures AGENTS/ is scaffolded and CLAUDE.md is symlinked to AGENTS/AGENTS.md in the current project. All arguments are forwarded verbatim to the real agy binary. @@ -2314,35 +2104,31 @@ Example: agy agy chat agy resume -\f[R] -.fi +.EE .PP -\f[B]Dependencies:\f[R] \f[V]agents-init\f[R] -.SS antigravity-ide +\f[B]Dependencies:\f[R] \f[CR]agents\-init\f[R] +.SS antigravity\-ide .IP -.nf -\f[C] -Synopsis: antigravity-ide [args...] +.EX +Synopsis: antigravity\-ide [args...] -Wrapper for the antigravity-ide command that filters a known noisy warning +Wrapper for the antigravity\-ide command that filters a known noisy warning about an unrecognized \[aq]app\[aq] option from stderr. Arguments: - args... Arguments passed through to the antigravity-ide command + args... Arguments passed through to the antigravity\-ide command Example: -antigravity-ide -\f[R] -.fi +antigravity\-ide +.EE .SS claude .IP -.nf -\f[C] +.EX Synopsis: claude [ARGS...] -Wrapper for the claude CLI that ensures the AGENTS/ sub-repository is -initialized and any agent-made changes are committed before launch. -Delegates all scaffold and commit logic to agents-init --quiet (full +Wrapper for the claude CLI that ensures the AGENTS/ sub\-repository is +initialized and any agent\-made changes are committed before launch. +Delegates all scaffold and commit logic to agents\-init \-\-quiet (full setup), which ensures AGENTS/ is scaffolded and CLAUDE.md is symlinked to AGENTS/AGENTS.md in the current project. All arguments are forwarded verbatim to the real claude binary. @@ -2359,44 +2145,38 @@ Exit Status: Example: claude -claude --resume +claude \-\-resume claude \[dq]Explain the recent changes\[dq] -\f[R] -.fi +.EE .PP -\f[B]Dependencies:\f[R] \f[V]agents-init\f[R] -.SS claude-docs +\f[B]Dependencies:\f[R] \f[CR]agents\-init\f[R] +.SS claude\-docs .IP -.nf -\f[C] -Synopsis: claude-docs +.EX +Synopsis: claude\-docs Invokes Claude Code to analyze recent repository changes and update README.md, ensuring all features and examples are accurate and pruning obsolete content. Example: -claude-docs -\f[R] -.fi -.SS claude-pr +claude\-docs +.EE +.SS claude\-pr .IP -.nf -\f[C] -Synopsis: claude-pr +.EX +Synopsis: claude\-pr -Invokes Claude Code to perform a full PR workflow: create a kebab-case +Invokes Claude Code to perform a full PR workflow: create a kebab\-case branch, write a Conventional Commit, run verification, push, and open a pull request with a manual verification checklist. Example: -claude-pr -\f[R] -.fi +claude\-pr +.EE .SS dops .IP -.nf -\f[C] +.EX Synopsis: docker [subcommand] [args...] Wrapper for docker that intercepts the ps subcommand and redirects it to @@ -2409,52 +2189,48 @@ Arguments: Example: docker ps -\f[R] -.fi +.EE .SS qc .IP -.nf -\f[C] +.EX Synopsis: qc [prompt...] -Quick-chat wrapper around the aichat LLM CLI that defaults to the \[dq]cli\[dq] -role \[em] a system prompt tuned for concise, terminal-friendly output. +Quick\-chat wrapper around the aichat LLM CLI that defaults to the \[dq]cli\[dq] +role \[em] a system prompt tuned for concise, terminal\-friendly output. Resolves the aichat config directory (honoring $XDG_CONFIG_HOME), creates it if missing, and on first use installs the bundled role by symlinking -scripts/cli-agent.md to $XDG_CONFIG_HOME/aichat/roles/cli.md. Inherits -every aichat flag and tab completion (--wraps aichat); passing --role/-r +scripts/cli\-agent.md to $XDG_CONFIG_HOME/aichat/roles/cli.md. Inherits +every aichat flag and tab completion (\-\-wraps aichat); passing \-\-role/\-r overrides the default role, so qc forwards to aichat unchanged. The -function is only defined when aichat is installed. Run \[ga]qc --help\[ga] for +function is only defined when aichat is installed. Run \[ga]qc \-\-help\[ga] for aichat\[aq]s full flag reference with the command name rewritten to qc. Arguments: prompt... Prompt forwarded to aichat - -h, --help Show usage help + \-h, \-\-help Show usage help Exit Status: aichat\[aq]s exit status. Example: qc \[dq]how do I list open ports on linux?\[dq] -qc -m ollama:llama3 \[dq]explain this error\[dq] -qc --role coder \[dq]refactor this function\[dq] -\f[R] -.fi +qc \-m ollama:llama3 \[dq]explain this error\[dq] +qc \-\-role coder \[dq]refactor this function\[dq] +.EE .SS superpowers .IP -.nf -\f[C] -Synopsis: superpowers [on|off] [-g] +.EX +Synopsis: superpowers [on|off] [\-g] -Enables or disables the superpowers plugin for both antigravity-cli -(workspace scope) and Claude (project scope). Use -g/--global to apply +Enables or disables the superpowers plugin for both antigravity\-cli +(workspace scope) and Claude (project scope). Use \-g/\-\-global to apply at the user scope instead of workspace/project. Arguments: on Enable superpowers for both tools off Disable superpowers for both tools - -g, --global Apply at user/global scope instead of workspace/project - -h, --help Show usage help + \-g, \-\-global Apply at user/global scope instead of workspace/project + \-h, \-\-help Show usage help Exit Status: 0 Mode applied successfully @@ -2462,26 +2238,24 @@ Exit Status: Example: superpowers on -superpowers off -g -\f[R] -.fi +superpowers off \-g +.EE .SS 5.13 Media and Utilities .SS dng2avif .IP -.nf -\f[C] -Synopsis: dng2avif [-h] [-i ] [-o ] [-q ] [-s ] [input.dng] +.EX +Synopsis: dng2avif [\-h] [\-i ] [\-o ] [\-q ] [\-s ] [input.dng] -Converts a DNG raw image to a 10-bit HDR AVIF using a three-step pipeline: +Converts a DNG raw image to a 10\-bit HDR AVIF using a three\-step pipeline: develop with ImageMagick, encode with ffmpeg+avifenc, sync metadata with exiftool. Requires magick, ffmpeg, avifenc, and exiftool. Arguments: - -i, --input FILE Input DNG file - -o, --output FILE Output AVIF file (defaults to input basename) - -q, --quality N Encoding quality 0-100 (default: 92) - -s, --speed N Encoder speed 0-10 (default: 3, 0 = slowest) - -h, --help Show help message + \-i, \-\-input FILE Input DNG file + \-o, \-\-output FILE Output AVIF file (defaults to input basename) + \-q, \-\-quality N Encoding quality 0\-100 (default: 92) + \-s, \-\-speed N Encoder speed 0\-10 (default: 3, 0 = slowest) + \-h, \-\-help Show help message Exit Status: 0 Conversion complete @@ -2489,77 +2263,69 @@ Exit Status: Example: dng2avif photo.dng -dng2avif -q 85 -s 5 -i shot.dng -o out.avif -\f[R] -.fi +dng2avif \-q 85 \-s 5 \-i shot.dng \-o out.avif +.EE .SS spark .IP -.nf -\f[C] -Synopsis: spark [--min=] [--max=] [numbers...] +.EX +Synopsis: spark [\-\-min=] [\-\-max=] [numbers...] Renders a Unicode sparkline bar chart for a sequence of numbers. Reads numbers from arguments or from stdin if none are provided. -Optional --min and --max clamp the scale range. +Optional \-\-min and \-\-max clamp the scale range. Arguments: - --min= Minimum value for scale (default: list minimum) - --max= Maximum value for scale (default: list maximum) - numbers... Space-separated numbers to chart; reads stdin if omitted - -v, --version Print version - -h, --help Show usage help + \-\-min= Minimum value for scale (default: list minimum) + \-\-max= Maximum value for scale (default: list maximum) + numbers... Space\-separated numbers to chart; reads stdin if omitted + \-v, \-\-version Print version + \-h, \-\-help Show usage help Example: spark 1 1 2 5 14 42 -seq 64 | sort --random-sort | spark +seq 64 | sort \-\-random\-sort | spark echo \[dq]3 7 2 9 1\[dq] | spark -\f[R] -.fi -.SS steam-dl +.EE +.SS steam\-dl .IP -.nf -\f[C] -Synopsis: steam-dl +.EX +Synopsis: steam\-dl -Launches Steam with systemd-inhibit to prevent the system from idling +Launches Steam with systemd\-inhibit to prevent the system from idling or sleeping during active downloads. Example: -steam-dl -\f[R] -.fi -.SS yt-dlp +steam\-dl +.EE +.SS yt\-dlp .IP -.nf -\f[C] -Synopsis: yt-dlp [args...] URL [URL...] +.EX +Synopsis: yt\-dlp [args...] URL [URL...] -Wraps yt-dlp, injecting sane embedding + SponsorBlock defaults -(--sponsorblock-remove all, --embed-subs, --embed-metadata, ---embed-thumbnail). Each default is suppressed if the user already -passes that flag, its alias, or its negation (e.g. --no-embed-thumbnail -drops our --embed-thumbnail; --no-sponsorblock or your own ---sponsorblock-remove drops ours). All other arguments pass through -untouched. --help and friends fall through to real yt-dlp. +Wraps yt\-dlp, injecting sane embedding + SponsorBlock defaults +(\-\-sponsorblock\-remove all, \-\-embed\-subs, \-\-embed\-metadata, +\-\-embed\-thumbnail). Each default is suppressed if the user already +passes that flag, its alias, or its negation (e.g. \-\-no\-embed\-thumbnail +drops our \-\-embed\-thumbnail; \-\-no\-sponsorblock or your own +\-\-sponsorblock\-remove drops ours). All other arguments pass through +untouched. \-\-help and friends fall through to real yt\-dlp. Opinionated component (C1): when disabled via __fish_config_op_aliases (or the __fish_config_opinionated master), passes straight through to -the system yt-dlp with no defaults injected. +the system yt\-dlp with no defaults injected. Arguments: - args... Arguments forwarded to yt-dlp (defaults prepended) - --no-embed-thumbnail Skip thumbnail embedding for this run + args... Arguments forwarded to yt\-dlp (defaults prepended) + \-\-no\-embed\-thumbnail Skip thumbnail embedding for this run Example: -yt-dlp dQw4w9WgXcQ -yt-dlp --no-embed-thumbnail dQw4w9WgXcQ # drops our thumbnail default -\f[R] -.fi +yt\-dlp dQw4w9WgXcQ +yt\-dlp \-\-no\-embed\-thumbnail dQw4w9WgXcQ # drops our thumbnail default +.EE .SS 5.14 Miscellaneous .SS bash .IP -.nf -\f[C] +.EX Synopsis: bash [args...] Switches the current shell session to bash, loading config from the XDG @@ -2570,13 +2336,11 @@ Arguments: Example: bash -\f[R] -.fi -.SS bd-pull +.EE +.SS bd\-pull .IP -.nf -\f[C] -Synopsis: bd-pull +.EX +Synopsis: bd\-pull Fetches unlinked issues from a Gitea repository, creates corresponding local Beads entries, and updates the Gitea issue titles to include the new Bead IDs. @@ -2590,14 +2354,12 @@ Exit Status: 1 Missing required argument or environment variables Example: -bd-pull myuser/myproject -bd-pull rootiest/fish-config -\f[R] -.fi +bd\-pull myuser/myproject +bd\-pull rootiest/fish\-config +.EE .SS cffetch .IP -.nf -\f[C] +.EX Synopsis: cffetch [args...] Clears the screen and displays system information using fastfetch with a @@ -2608,15 +2370,13 @@ Arguments: Example: cffetch -\f[R] -.fi +.EE .SS cheat .IP -.nf -\f[C] +.EX Synopsis: cheat [args...] -Displays colorized cheatsheets using cheat -c. Falls back to tldr, then +Displays colorized cheatsheets using cheat \-c. Falls back to tldr, then man, if cheat is not installed. Arguments: @@ -2626,153 +2386,145 @@ Arguments: Example: cheat tar cheat git -\f[R] -.fi -.SS config-help +.EE +.SS config\-help .IP -.nf -\f[C] -Synopsis: config-help [section] - config-help --html - config-help [section] --man - config-help --help +.EX +Synopsis: config\-help [section] + config\-help \-\-html + config\-help [section] \-\-man + config\-help \-\-help Opens the offline fish shell configuration manual in the best available -pager. Falls back through ov -> bat -> man -> less -> cat. +pager. Falls back through ov \-> bat \-> man \-> less \-> cat. If a section keyword is provided, the pager opens at the first heading -that matches the keyword. Lookup order: docs/fish-config.index (exact +that matches the keyword. Lookup order: docs/fish\-config.index (exact keyword aliases), then a normalized heading scan as fallback. When opened with ov a sticky navigation hint is shown at the top of the -screen. Section matching is case-insensitive. Pass --html / -w to open +screen. Section matching is case\-insensitive. Pass \-\-html / \-w to open the published documentation website (https://fish.rootiest.fyi/) -in the default browser via xdg-open \[em] deep links to a section aren\[aq]t +in the default browser via xdg\-open \[em] deep links to a section aren\[aq]t supported there, so if a keyword is given a note points you to the site\[aq]s -search box instead. Pass --man / -m to open the compiled man page -(docs/fish-config.1) via \[ga]man -l\[ga]; if a section keyword is given, the -pager opens at the nearest match. Pass --help or -h for usage and the +search box instead. Pass \-\-man / \-m to open the compiled man page +(docs/fish\-config.1) via \[ga]man \-l\[ga]; if a section keyword is given, the +pager opens at the nearest match. Pass \-\-help or \-h for usage and the navigation key reference. Arguments: section Optional keyword to jump to a matching section heading - -w, --html Open the published documentation website in the default browser - -m, --man Open the compiled man page via man -l - -h, --help Print usage and navigation reference, then exit + \-w, \-\-html Open the published documentation website in the default browser + \-m, \-\-man Open the compiled man page via man \-l + \-h, \-\-help Print usage and navigation reference, then exit Exit Status: 0 Manual displayed 1 Documentation file not found, or required tool not available Returns: - With -h/--help, the usage and navigation reference, printed to stdout. + With \-h/\-\-help, the usage and navigation reference, printed to stdout. Otherwise, the manual is shown via the resolved pager (not captured stdout). Notes: The preferred invocation is \[ga]help config [...]\[ga] \[em] this function is registered as a handler in the help wrapper so that syntax works - transparently. Direct \[ga]config-help\[ga] calls are also valid. + transparently. Direct \[ga]config\-help\[ga] calls are also valid. Example: -config-help -config-help keybindings -config-help pkg -config-help fish-deps -config-help --html -config-help --man -config-help keys --man -config-help --help -config-help pkg --man -\f[R] -.fi -.SS config-settings +config\-help +config\-help keybindings +config\-help pkg +config\-help fish\-deps +config\-help \-\-html +config\-help \-\-man +config\-help keys \-\-man +config\-help \-\-help +config\-help pkg \-\-man +.EE +.SS config\-settings .IP -.nf -\f[C] -Synopsis: config-settings [-h | --help] +.EX +Synopsis: config\-settings [\-h | \-\-help] -Opens an interactive full-screen TUI for managing fish config settings +Opens an interactive full\-screen TUI for managing fish config settings across four pages, without having to type or remember variable names: - Universal \[em] opinionated-category toggles (C1\[en]C6) + master, persistent (set -U) - Session \[em] the same toggles, current shell only (set -g) - Sponge \[em] sponge history-scrubbing settings: delay, successful exit - codes, purge-only-on-exit, allow-previously-successful, and - extra sensitive variable-name tokens - Paths \[em] scrollback log directory, scrollback max files, the user-dots - path, and the user-dots convenience symlink toggle (Dots link) + Universal \[em] opinionated\-category toggles (C1\[en]C6) + master, persistent (set \-U) + Session \[em] the same toggles, current shell only (set \-g) + Sponge \[em] sponge history\-scrubbing settings: delay, successful exit + codes, purge\-only\-on\-exit, allow\-previously\-successful, and + extra sensitive variable\-name tokens + Paths \[em] scrollback log directory, scrollback max files, the user\-dots + path, and the user\-dots convenience symlink toggle (Dots link) Toggle rows use ← / → (or h / l) to step OFF ← DEFAULT → ON; DEFAULT erases -the variable so the master switch / built-in default applies. Value rows +the variable so the master switch / built\-in default applies. Value rows (Sponge, Paths) use Enter to edit inline; ← / h clears to default. List rows (e.g. Extra secret, OK codes) accept values separated by commas and/or whitespace \[em] \[dq]A, B\[dq], \[dq]A,B\[dq] and \[dq]A B\[dq] all yield the same two entries. -Tab / Shift-Tab cycle forward / backward through pages. +Tab / Shift\-Tab cycle forward / backward through pages. Changes apply immediately \[em] no confirm step. Always available regardless of __fish_config_opinionated state. The Sponge and Paths pages always write universal variables \[em] these are -persistent, set-and-forget settings with no per-session scope. Editing a -scrollback row updates both the __fish_scrollback_history_* source-of-truth +persistent, set\-and\-forget settings with no per\-session scope. Editing a +scrollback row updates both the __fish_scrollback_history_* source\-of\-truth variables and the exported SCROLLBACK_HISTORY_* mirrors, so the AUR/tmux/ zellij log wrappers (which read the exported names) see the change in the running session. The panel adapts to the terminal width automatically, selecting from four -layout tiers (with a 6-column buffer on each side before stepping up to the +layout tiers (with a 6\-column buffer on each side before stepping up to the next tier) and horizontally centering the box. The panel redraws within \[ti]0.3 s of a terminal resize with no keypress required. - COLUMNS >= 90 → 78-wide panel (most detail) - COLUMNS >= 86 → 74-wide panel - COLUMNS >= 82 → 70-wide panel - COLUMNS < 82 → 52-wide panel (default) + COLUMNS >= 90 → 78\-wide panel (most detail) + COLUMNS >= 86 → 74\-wide panel + COLUMNS >= 82 → 70\-wide panel + COLUMNS < 82 → 52\-wide panel (default) Navigation: ↑ ↓ / k j Move cursor ← → / h l Toggle rows: OFF ← DEFAULT → ON ← / h Value rows: clear to default Enter Value rows: edit inline (Sponge / Paths pages) - Tab / S-Tab Next / previous page + Tab / S\-Tab Next / previous page q / Escape Exit Arguments: - -h, --help Print usage and exit + \-h, \-\-help Print usage and exit Exit Status: 0 Exited normally (q or Escape pressed) 1 Unknown flag passed Example: -config-settings -\f[R] -.fi +config\-settings +.EE .PP -\f[B]Used by:\f[R] \f[V]config-toggle\f[R] -.SS config-toggle +\f[B]Used by:\f[R] \f[CR]config\-toggle\f[R] +.SS config\-toggle .IP -.nf -\f[C] -Synopsis: config-toggle [args...] +.EX +Synopsis: config\-toggle [args...] -Deprecated alias for config-settings. Prints a one-line deprecation -notice to stderr, then delegates all arguments to config-settings. +Deprecated alias for config\-settings. Prints a one\-line deprecation +notice to stderr, then delegates all arguments to config\-settings. Arguments: - args Passed through verbatim to config-settings + args Passed through verbatim to config\-settings Exit Status: - Same as config-settings + Same as config\-settings Example: -config-toggle # opens config-settings with a deprecation notice -\f[R] -.fi +config\-toggle # opens config\-settings with a deprecation notice +.EE .PP -\f[B]Dependencies:\f[R] \f[V]config-settings\f[R] -.SS config-update +\f[B]Dependencies:\f[R] \f[CR]config\-settings\f[R] +.SS config\-update .IP -.nf -\f[C] -Synopsis: config-update [-h | --help] [-f | --force] [-n | --dry-run] +.EX +Synopsis: config\-update [\-h | \-\-help] [\-f | \-\-force] [\-n | \-\-dry\-run] Pulls the latest fish shell configuration from the upstream repository into \[ti]/.config/fish. Git output is suppressed; status is reported @@ -2780,45 +2532,41 @@ through colored messages. After a successful pull the function prints a short summary of changed files; run \[ga]exec fish\[ga] to reload the shell. Arguments: - -h, --help Show this help message and exit - -f, --force Stash local changes before pulling, then pop the stash - -n, --dry-run Check for upstream changes without applying them + \-h, \-\-help Show this help message and exit + \-f, \-\-force Stash local changes before pulling, then pop the stash + \-n, \-\-dry\-run Check for upstream changes without applying them Exit Status: 0 Config updated (or already up to date) 1 Update failed (network error, merge conflict, or not a git repo) Example: -config-update -config-update --dry-run -config-update --force -\f[R] -.fi +config\-update +config\-update \-\-dry\-run +config\-update \-\-force +.EE .SS dockup .IP -.nf -\f[C] -Synopsis: dockup [-h] [directory] +.EX +Synopsis: dockup [\-h] [directory] Pulls the latest Docker images and restarts all services in a Docker Compose project, then prunes dangling images. Accepts an optional target directory. Arguments: - -h, --help Show help message + \-h, \-\-help Show help message directory Path to the compose project (defaults to current directory) Exit Status: 0 Services updated and running - 1 Directory not found or no docker-compose.yml present + 1 Directory not found or no docker\-compose.yml present Example: dockup \[ti]/myapp -\f[R] -.fi +.EE .SS ffetch .IP -.nf -\f[C] +.EX Synopsis: ffetch [args...] Alias for fastfetch that loads a custom config from \[ti]/.fastfetch.jsonc when @@ -2829,16 +2577,14 @@ Arguments: Example: ffetch -\f[R] -.fi +.EE .SS joplin .IP -.nf -\f[C] +.EX Synopsis: joplin [args...] Runs the Joplin CLI with Node deprecation warnings suppressed via -NODE_OPTIONS=--no-deprecation. +NODE_OPTIONS=\-\-no\-deprecation. Arguments: args... Arguments forwarded to the joplin command @@ -2849,21 +2595,19 @@ Exit Status: Example: joplin ls -\f[R] -.fi -.SS kitty-logging +.EE +.SS kitty\-logging .IP -.nf -\f[C] -Synopsis: kitty-logging [install | uninstall | status | dismiss] [-h] +.EX +Synopsis: kitty\-logging [install | uninstall | status | dismiss] [\-h] -Manages the fish-config Kitty scrollback watcher that powers C5 logging. +Manages the fish\-config Kitty scrollback watcher that powers C5 logging. \[ga]install\[ga] symlinks the canonical watcher into the Kitty config dir (so it always tracks the source) and wires it into kitty.conf via a -sentinel-marked managed block, commenting out any conflicting active -watcher line to avoid double-capture. \[ga]uninstall\[ga] reverses it. \[ga]status\[ga] +sentinel\-marked managed block, commenting out any conflicting active +watcher line to avoid double\-capture. \[ga]uninstall\[ga] reverses it. \[ga]status\[ga] reports wiring, installed watcher version, and C5 logging state. \[ga]dismiss\[ga] -silences the per-session setup reminder. +silences the per\-session setup reminder. Runtime capture stays governed by the C5 .logging_disabled sentinel, so disabling __fish_config_op_logging makes the watcher inert without @@ -2873,22 +2617,20 @@ Arguments: install Symlink the watcher and add the managed block to kitty.conf uninstall Remove the managed block and the watcher symlink status Report wiring, watcher version, and C5 logging state - dismiss Stop the per-session reminder - -h, --help Show this help + dismiss Stop the per\-session reminder + \-h, \-\-help Show this help Exit Status: 0 Success 1 Unknown subcommand/flag, kitty missing, or a write failure Example: -kitty-logging install -kitty-logging status -\f[R] -.fi +kitty\-logging install +kitty\-logging status +.EE .SS ld .IP -.nf -\f[C] +.EX Synopsis: ld Launches lazydocker targeting the currently active Docker context by @@ -2896,142 +2638,132 @@ resolving the host endpoint from docker context inspect. Example: ld -\f[R] -.fi -.SS open-url +.EE +.SS open\-url .IP -.nf -\f[C] -Synopsis: open-url [-s|--silent] [-v|--verbose] - open-url --help +.EX +Synopsis: open\-url [\-s|\-\-silent] [\-v|\-\-verbose] + open\-url \-\-help Opens a URL (or file:// URI) in the best available graphical web browser, backgrounded so it never blocks the terminal. Resolves a real browser -binary rather than deferring to xdg-open, whose MIME dispatch can hand -local text/html files to non-browser apps (e.g. ebook readers). +binary rather than deferring to xdg\-open, whose MIME dispatch can hand +local text/html files to non\-browser apps (e.g. ebook readers). Silent by default: prints nothing on success (errors always go to stderr); ---silent / -s is accepted for explicitness. +\-\-silent / \-s is accepted for explicitness. Resolution order: 1. $fish_help_browser (explicit override) 2. $BROWSER (validated; errors if not a command) - 3. xdg-mime default handler for x-scheme-handler/https - 4. First known browser binary found in a built-in list - 5. xdg-open (last resort) + 3. xdg\-mime default handler for x\-scheme\-handler/https + 4. First known browser binary found in a built\-in list + 5. xdg\-open (last resort) Arguments: url The URL or file:// URI to open (required) - -s, --silent Suppress success output (the default) - -v, --verbose Print which browser is being launched - -h, --help Print usage and exit + \-s, \-\-silent Suppress success output (the default) + \-v, \-\-verbose Print which browser is being launched + \-h, \-\-help Print usage and exit Exit Status: 0 Browser launched 1 No URL given, invalid $BROWSER, or no browser found Notes: - Typo abbreviation: url-open (expands to open-url on space/enter). + Typo abbreviation: url\-open (expands to open\-url on space/enter). Example: -open-url https://git.rootiest.dev/rootiest/fish-config -open-url -v https://fish.rootiest.fyi/ -\f[R] -.fi +open\-url https://git.rootiest.dev/rootiest/fish\-config +open\-url \-v https://fish.rootiest.fyi/ +.EE .PP -\f[B]Used by:\f[R] \f[V]repo-open\f[R] +\f[B]Used by:\f[R] \f[CR]repo\-open\f[R] .SS replay .IP -.nf -\f[C] +.EX Synopsis: replay Runs the given commands in Bash and replays any resulting environment variable, alias, and directory changes back into the current Fish -session. Useful for sourcing Bash-only scripts. +session. Useful for sourcing Bash\-only scripts. Arguments: commands Bash command string to execute and replay Exit Status: 0 Commands ran successfully and changes were replayed - 1 Bash command exited with a non-zero status + 1 Bash command exited with a non\-zero status Example: replay \[dq]source \[ti]/.bashrc\[dq] replay \[dq]export FOO=bar\[dq] -\f[R] -.fi -.SS repo-open +.EE +.SS repo\-open .IP -.nf -\f[C] -Synopsis: repo-open [-p|--print] [-r|--root] - repo-open --help +.EX +Synopsis: repo\-open [\-p|\-\-print] [\-r|\-\-root] + repo\-open \-\-help Opens the web page for the current repository\[aq]s \[ga]origin\[ga] remote in a -browser (via open-url). Deep-links to the current branch when it exists +browser (via open\-url). Deep\-links to the current branch when it exists on the remote, falling back to the remote\[aq]s default branch (main/master) -otherwise, and to the current sub-directory when invoked below the repo +otherwise, and to the current sub\-directory when invoked below the repo root. The remote URL is normalized from both HTTPS and SSH/scp forms (git\[at]host:owner/repo.git, ssh://\&..., https://\&...). The web path layout is -provider-specific; the provider is resolved in this order: +provider\-specific; the provider is resolved in this order: - 1. git config browse.provider (per-repo or --global override) + 1. git config browse.provider (per\-repo or \-\-global override) 2. Hostname heuristic (github / gitlab / gitea / bitbucket; codeberg → gitea) - 3. Default: github-style layout + 3. Default: github\-style layout -For a self-hosted host the heuristic can\[aq]t classify (e.g. a Gitea or +For a self\-hosted host the heuristic can\[aq]t classify (e.g. a Gitea or GitLab instance on a custom domain), set the provider once: git config browse.provider gitea Arguments: - -p, --print Print the resolved URL instead of opening it - -r, --root Ignore the current sub-directory; link to the repo root - -h, --help Print usage and exit + \-p, \-\-print Print the resolved URL instead of opening it + \-r, \-\-root Ignore the current sub\-directory; link to the repo root + \-h, \-\-help Print usage and exit Exit Status: - 0 URL opened, or resolved with -p/--print + 0 URL opened, or resolved with \-p/\-\-print 1 Not a git repo, no origin remote, or browser launch failed Returns: - With -p/--print, the resolved repository URL, printed to stdout + With \-p/\-\-print, the resolved repository URL, printed to stdout Notes: - Typo abbreviation: open-repo (expands to repo-open on space/enter). + Typo abbreviation: open\-repo (expands to repo\-open on space/enter). Example: -repo-open # open current branch (+ subdir) in browser -repo-open --print # just print the URL -repo-open --root # repo home page for the current branch -\f[R] -.fi +repo\-open # open current branch (+ subdir) in browser +repo\-open \-\-print # just print the URL +repo\-open \-\-root # repo home page for the current branch +.EE .PP -\f[B]Dependencies:\f[R] \f[V]open-url\f[R] -.SS tmux-clean +\f[B]Dependencies:\f[R] \f[CR]open\-url\f[R] +.SS tmux\-clean .IP -.nf -\f[C] -Synopsis: tmux-clean +.EX +Synopsis: tmux\-clean Kills all detached (unattached) tmux sessions, leaving any currently attached sessions running. Example: -tmux-clean -\f[R] -.fi -.SS wake-lock +tmux\-clean +.EE +.SS wake\-lock .IP -.nf -\f[C] -Synopsis: wake-lock [args...] +.EX +Synopsis: wake\-lock [args...] -Runs a command under systemd-inhibit to prevent the system from idling +Runs a command under systemd\-inhibit to prevent the system from idling or sleeping for the duration of the command. Arguments: @@ -3043,14 +2775,12 @@ Exit Status: 1 No command provided Example: -wake-lock rsync -avz src/ dest/ -\f[R] -.fi +wake\-lock rsync \-avz src/ dest/ +.EE .SH 6. DEPENDENCY CATALOG -.PP -fish-deps manages these tools. -Run \f[V]fish-deps\f[R] to check status, or \f[V]fish-deps install\f[R] -to install missing ones. +fish\-deps manages these tools. +Run \f[CR]fish\-deps\f[R] to check status, or +\f[CR]fish\-deps install\f[R] to install missing ones. .SS Required .PP .TS @@ -3063,17 +2793,17 @@ Description T} _ T{ -\f[V]fish\f[R] +\f[CR]fish\f[R] T}@T{ Fish shell >= 4.0 T} T{ -\f[V]fzf\f[R] +\f[CR]fzf\f[R] T}@T{ Fuzzy finder T} T{ -\f[V]zoxide\f[R] +\f[CR]zoxide\f[R] T}@T{ Smart cd with frecency T} @@ -3090,12 +2820,12 @@ Description T} _ T{ -\f[V]wakatime\f[R] +\f[CR]wakatime\f[R] T}@T{ Developer time tracking T} T{ -\f[V]tailscale\f[R] +\f[CR]tailscale\f[R] T}@T{ Mesh VPN client T} @@ -3112,133 +2842,132 @@ Description T} _ T{ -\f[V]cargo\f[R] +\f[CR]cargo\f[R] T}@T{ -Rust toolchain (via rustup); used by \f[V]fish-deps\f[R] to install -Rust-based tools and to build fish from source. -All paths are gated on \f[V]type -q cargo\f[R] and degrade gracefully. +Rust toolchain (via rustup); used by \f[CR]fish\-deps\f[R] to install +Rust\-based tools and to build fish from source. +All paths are gated on \f[CR]type \-q cargo\f[R] and degrade gracefully. T} T{ -\f[V]starship\f[R] +\f[CR]starship\f[R] T}@T{ -Cross-shell prompt; loaded via \f[V]type -q starship\f[R] guard. -Without it the Catppuccin nim-style fallback prompt activates. +Cross\-shell prompt; loaded via \f[CR]type \-q starship\f[R] guard. +Without it the Catppuccin nim\-style fallback prompt activates. T} T{ -\f[V]uv\f[R] +\f[CR]uv\f[R] T}@T{ Python package and project manager (Astral); used by the -fish-from-source build path in \f[V]fish-deps\f[R]. +fish\-from\-source build path in \f[CR]fish\-deps\f[R]. All consumers degrade gracefully without it. T} T{ -\f[V]direnv\f[R] +\f[CR]direnv\f[R] T}@T{ -Per-directory environment loading; integration is fully guarded with -\f[V]type -q direnv\f[R]. -Without it the direnv hook is simply not loaded and auto-venv activates +Per\-directory environment loading; integration is fully guarded with +\f[CR]type \-q direnv\f[R]. +Without it the direnv hook is simply not loaded and auto\-venv activates normally. T} T{ -\f[V]paru\f[R] +\f[CR]paru\f[R] T}@T{ -AUR helper (Arch only; preferred); guarded throughout \[em] non-Arch -systems silently skip AUR-specific paths. +AUR helper (Arch only; preferred); guarded throughout \[em] non\-Arch +systems silently skip AUR\-specific paths. T} T{ -\f[V]yay\f[R] +\f[CR]yay\f[R] T}@T{ AUR helper (Arch only; fallback to paru); same guards apply. T} T{ -\f[V]eza\f[R] +\f[CR]eza\f[R] T}@T{ -Modern \f[V]ls\f[R] replacement +Modern \f[CR]ls\f[R] replacement T} T{ -\f[V]lsd\f[R] +\f[CR]lsd\f[R] T}@T{ -\f[V]ls\f[R] replacement (fallback to \f[V]eza\f[R]) +\f[CR]ls\f[R] replacement (fallback to \f[CR]eza\f[R]) T} T{ -\f[V]bat\f[R] +\f[CR]bat\f[R] T}@T{ -Syntax-highlighted \f[V]cat\f[R] +Syntax\-highlighted \f[CR]cat\f[R] T} T{ -\f[V]btop\f[R] +\f[CR]btop\f[R] T}@T{ Modern resource monitor T} T{ -\f[V]dust\f[R] +\f[CR]dust\f[R] T}@T{ Disk usage tree (Rust) T} T{ -\f[V]duf\f[R] +\f[CR]duf\f[R] T}@T{ Disk usage/free overview T} T{ -\f[V]prettyping\f[R] +\f[CR]prettyping\f[R] T}@T{ Colorized ping wrapper T} T{ -\f[V]ov\f[R] +\f[CR]ov\f[R] T}@T{ -Modern pager (replaces \f[V]less\f[R]) +Modern pager (replaces \f[CR]less\f[R]) T} T{ -\f[V]ripgrep\f[R] +\f[CR]ripgrep\f[R] T}@T{ Fast line search T} T{ -\f[V]lazygit\f[R] +\f[CR]lazygit\f[R] T}@T{ Terminal git UI T} T{ -\f[V]lazydocker\f[R] +\f[CR]lazydocker\f[R] T}@T{ Terminal docker UI T} T{ -\f[V]trash\f[R] +\f[CR]trash\f[R] T}@T{ -Safe delete (\f[V]trash-cli\f[R]) +Safe delete (\f[CR]trash\-cli\f[R]) T} T{ -\f[V]kitty\f[R] +\f[CR]kitty\f[R] T}@T{ -GPU-accelerated terminal (primary) +GPU\-accelerated terminal (primary) T} T{ -\f[V]wezterm\f[R] +\f[CR]wezterm\f[R] T}@T{ -GPU-accelerated terminal (alternative) +GPU\-accelerated terminal (alternative) T} T{ -\f[V]python3\f[R] +\f[CR]python3\f[R] T}@T{ -Standalone interpreter \[em] used by the \f[V]paru\f[R]/\f[V]yay\f[R] +Standalone interpreter \[em] used by the \f[CR]paru\f[R]/\f[CR]yay\f[R] log cleaner. -Note: \f[V]uv\f[R] does not provide \f[V]python3\f[R] on PATH, and +Note: \f[CR]uv\f[R] does not provide \f[CR]python3\f[R] on PATH, and Arch\[cq]s base does not include it, so it is listed separately. All consumers degrade gracefully without it. T} T{ -\f[V]yt-dlp\f[R] +\f[CR]yt\-dlp\f[R] T}@T{ -Video/media downloader; backs the \f[V]yt-dlp\f[R] wrapper function. -Optional \[em] the wrapper falls back to the system \f[V]yt-dlp\f[R] and -the rest of the config works without it. +Video/media downloader; backs the \f[CR]yt\-dlp\f[R] wrapper function. +Optional \[em] the wrapper falls back to the system \f[CR]yt\-dlp\f[R] +and the rest of the config works without it. T} .TE .SS Install Methods -.PP The install priority for each tool: .PP .TS @@ -3251,135 +2980,123 @@ Packages T} _ T{ -\f[V]cargo\f[R] +\f[CR]cargo\f[R] T}@T{ -Rust tools (\f[V]eza\f[R], \f[V]lsd\f[R], \f[V]bat\f[R], \f[V]dust\f[R], -\f[V]ov\f[R], \f[V]ripgrep\f[R], \f[V]trashy\f[R], \f[V]zoxide\f[R], -\f[V]starship\f[R]) \[em] always gets the latest crate version +Rust tools (\f[CR]eza\f[R], \f[CR]lsd\f[R], \f[CR]bat\f[R], +\f[CR]dust\f[R], \f[CR]ov\f[R], \f[CR]ripgrep\f[R], \f[CR]trashy\f[R], +\f[CR]zoxide\f[R], \f[CR]starship\f[R]) \[em] always gets the latest +crate version T} T{ system PM T}@T{ -\f[V]paru\f[R] / \f[V]apt\f[R] / \f[V]brew\f[R] / \f[V]dnf\f[R] / etc. +\f[CR]paru\f[R] / \f[CR]apt\f[R] / \f[CR]brew\f[R] / \f[CR]dnf\f[R] / +etc. \[em] for tools without a crate T} T{ -\f[V]git clone\f[R] +\f[CR]git clone\f[R] T}@T{ -\f[V]fzf\f[R] \[em] installed from GitHub to \f[V]\[ti]/.fzf/\f[R] +\f[CR]fzf\f[R] \[em] installed from GitHub to \f[CR]\[ti]/.fzf/\f[R] T} T{ -\f[V]curl\f[R] +\f[CR]curl\f[R] T}@T{ -\f[V]starship\f[R] installer, \f[V]fisher\f[R] bootstrap, \f[V]uv\f[R] -installer +\f[CR]starship\f[R] installer, \f[CR]fisher\f[R] bootstrap, +\f[CR]uv\f[R] installer T} .TE .PP * * * * * .SH 7. CUSTOMIZATION -.PP This section explains how to adapt the configuration to your specific workflow, including local machine overrides and opinionated component toggles. -.SS Machine-local Configuration -.PP -Place machine-specific settings that should not be committed to git in: +.SS Machine\-local Configuration +Place machine\-specific settings that should not be committed to git in: .IP -.nf -\f[C] +.EX $__fish_user_dots_path/local.fish -\f[R] -.fi +.EE .PP -\f[V]__fish_user_dots_path\f[R] defaults to -\f[V]\[ti]/.config/.user-dots/fish\f[R]. +\f[CR]__fish_user_dots_path\f[R] defaults to +\f[CR]\[ti]/.config/.user\-dots/fish\f[R]. Set a custom location with: .IP -.nf -\f[C] -set -U __fish_user_dots_path /path/to/your/dots/fish -\f[R] -.fi +.EX +set \-U __fish_user_dots_path /path/to/your/dots/fish +.EE .PP -Typical uses: additional PATH entries, local aliases, hostname-specific -env vars, work-specific tool configs. +Typical uses: additional PATH entries, local aliases, hostname\-specific +env vars, work\-specific tool configs. .PP -For convenience, a git-ignored \f[V]user-dots\f[R] symlink in the fish -config directory tracks \f[V]$__fish_user_dots_path\f[R] so the overlay -can be browsed from \f[V]\[ti]/.config/fish/\f[R]. +For convenience, a git\-ignored \f[CR]user\-dots\f[R] symlink in the +fish config directory tracks \f[CR]$__fish_user_dots_path\f[R] so the +overlay can be browsed from \f[CR]\[ti]/.config/fish/\f[R]. It is created if missing and repointed if the path changes. -Opt out by setting \f[V]__fish_user_dots_symlink\f[R] to a falsy value, -or toggling \[lq]Dots link\[rq] off on the config-settings Paths page +Opt out by setting \f[CR]__fish_user_dots_symlink\f[R] to a falsy value, +or toggling \[lq]Dots link\[rq] off on the config\-settings Paths page \[em] this stops generation and removes any existing link. It only ever manages a symlink and never clobbers a real file or directory at that path. .SS Secrets and API Keys .IP -.nf -\f[C] +.EX $__fish_user_dots_path/secrets.fish -\f[R] -.fi +.EE .PP Store API tokens, GPG keys, private credentials here. This file is never committed. It is sourced by local.fish directly, not by config.fish. .PP -\f[V]local.fish\f[R] is sourced at the end of config.fish on every +\f[CR]local.fish\f[R] is sourced at the end of config.fish on every interactive session, so it and its companion secrets.fish can override anything set earlier. .SS Overriding Configuration Variables -.PP Any variable set in local.fish after the main config loads takes effect. Example: to increase the scrollback history limit: .IP -.nf -\f[C] +.EX # in local.fish -set -gx SCROLLBACK_HISTORY_MAX_FILES 200 -\f[R] -.fi +set \-gx SCROLLBACK_HISTORY_MAX_FILES 200 +.EE .SS Fish Universal Variables -.PP Some settings (fzf colors, theme) are stored in fish_variables via -\f[V]set -U\f[R]. -These are machine-local and git-ignored. +\f[CR]set \-U\f[R]. +These are machine\-local and git\-ignored. Do not commit fish_variables. .SS Opinionated Components (Minimal Mode) -.PP Every opinionated piece of this config is active by default but can be -switched off through six category opt-out variables, each evaluated via +switched off through six category opt\-out variables, each evaluated via __fish_variable_check. Set a variable to any falsy value (0, false, no, off, n) to disable its category; erase it or set a truthy value (1, true, yes, on, y) to -re-enable. +re\-enable. Unset means enabled. .PP -An explicit per-category truthy value takes precedence over the master +An explicit per\-category truthy value takes precedence over the master switch: setting __fish_config_opinionated=0 disables all unset categories, but a category with an explicit truthy value remains enabled regardless. .IP -.nf -\f[C] +.EX Variable Disables ──────────────────────────────────────── __fish_config_op_aliases Command shadows and flag injection: - ls->eza, cat->bat, cd->zoxide, - rm->trash, less->ov, top->btop, - ping->prettyping, ssh->kitten, - du->duf/dust, mkdir/bash wrappers, + ls\->eza, cat\->bat, cd\->zoxide, + rm\->trash, less\->ov, top\->btop, + ping\->prettyping, ssh\->kitten, + du\->duf/dust, mkdir/bash wrappers, history timestamps, grep/cp/mv/wget flag injection, help intercept, claude - AGENTS.md auto-link -__fish_config_op_autoexec Startup side-effects: Fisher + AGENTS.md auto\-link +__fish_config_op_autoexec Startup side\-effects: Fisher bootstrap, theme apply, paru/yay wrapper generation, auto venv activation, WakaTime hook __fish_config_op_overrides Key and env overrides: Vi mode, - exit->smart_exit, PAGER/MANPAGER, - CDPATH, bang-bang system, autopair, + exit\->smart_exit, PAGER/MANPAGER, + CDPATH, bang\-bang system, autopair, puffer, starship prompt, theme colors, FZF_DEFAULT_OPTS, right prompt @@ -3391,97 +3108,88 @@ __fish_config_op_logging Logging & capture: scrollback capture on exit, paru/yay AUR log wrappers, Kitty watcher capture; sentinel file coordinates - cross-process state -__fish_config_op_greeting Greeting & first-run UI: per-session + cross\-process state +__fish_config_op_greeting Greeting & first\-run UI: per\-session fish_greeting override (defines empty function late in config.fish to suppress distro greetings such as - CachyOS fastfetch); first-run welcome + CachyOS fastfetch); first\-run welcome banner in conf.d/first_run.fish -\f[R] -.fi +.EE .PP Examples: .IP -.nf -\f[C] +.EX # Disable command shadows only (rm becomes plain rm again): -set -U __fish_config_op_aliases off +set \-U __fish_config_op_aliases off # Full minimal mode \[em] disable all six categories at once: -set -U __fish_config_opinionated 0 +set \-U __fish_config_opinionated 0 -# Re-enable everything: -set -Ue __fish_config_opinionated +# Re\-enable everything: +set \-Ue __fish_config_opinionated # Minimal mode but keep the greeting: -set -U __fish_config_opinionated 0 -set -U __fish_config_op_greeting 1 -# (erase both to go back to full-flavor defaults) -\f[R] -.fi +set \-U __fish_config_opinionated 0 +set \-U __fish_config_op_greeting 1 +# (erase both to go back to full\-flavor defaults) +.EE .PP For an interactive alternative to setting these variables by hand, run -config-settings \[em] a full-screen TUI that flips any category +config\-settings \[em] a full\-screen TUI that flips any category (including C5 logging) on or off, per session or universally. See its entry in Section 5. .PP -NOTE: - Command shadows (rm, cat, ls, \&...) -react immediately; conf.d-level components (bindings, prompt, +NOTE: \- Command shadows (rm, cat, ls, \&...) +react immediately; conf.d\-level components (bindings, prompt, abbreviations, hooks) take effect in new shells. -- With aliases disabled, rm falls back to bare \f[V]command rm\f[R] +\- With aliases disabled, rm falls back to bare \f[CR]command rm\f[R] \[em] files are deleted permanently, not trashed. -- Disabled integration commands (spwin, tab, split, hist, logs, upgrade) -print an error naming the variable that disabled them. -- On CachyOS, the distro fish config\[cq]s own aliases, history -override, and bang-bang bindings are stripped per category as well. +\- Disabled integration commands (spwin, tab, split, hist, logs, +upgrade) print an error naming the variable that disabled them. +\- On CachyOS, the distro fish config\[cq]s own aliases, history +override, and bang\-bang bindings are stripped per category as well. .SS Component Reference -.PP The following tables detail every component in each category. Use this reference to understand exactly which behaviors change when you toggle a category variable. .SS C1 \[em] Command Shadows -.PP Disabling __fish_config_op_aliases restores standard system behavior for all of these commands. .IP -.nf -\f[C] +.EX Command / Alias Active behavior Disabled fallback ─────────────────────────────────────────────────────────────────────────── -ls eza -l -a --icons --hyperlink system ls -cat bat syntax-highlighted; dirs → ls /usr/bin/cat -cd zoxide frecency-based navigation fish builtin cd +ls eza \-l \-a \-\-icons \-\-hyperlink system ls +cat bat syntax\-highlighted; dirs → ls /usr/bin/cat +cd zoxide frecency\-based navigation fish builtin cd rm moves files to trash (recoverable) command rm (permanent) less $PAGER → ov → less → more → cat system less du duf (disk overview) or dust (dir tree) system du top btop resource monitor system top -ping prettyping --nolegend animation system ping +ping prettyping \-\-nolegend animation system ping ssh kitten ssh in Kitty terminal system ssh -rg rg --hyperlink-format=kitty system rg -mkdir verbose path-tree display on creation mkdir -p silently +rg rg \-\-hyperlink\-format=kitty system rg +mkdir verbose path\-tree display on creation mkdir \-p silently bash XDG bashrc + $SHELL reset on exit system bash history timestamps prepended to every entry fish builtin history -cp / mv forced -i confirmation prompt cp / mv unmodified -wget forced --continue (resume downloads) system wget -grep/fgrep/egrep forced --color=auto system grep variants -dir / vdir forced --color=auto system dir / vdir -help config intercepts \[dq]help config\[dq] → config-help fish builtin help -claude auto-links AGENTS.md as CLAUDE.md before launch command claude -edit multi-editor launcher (GUI/term + fallbacks) $EDITOR/nvim/nano/vi -\f[R] -.fi +cp / mv forced \-i confirmation prompt cp / mv unmodified +wget forced \-\-continue (resume downloads) system wget +grep/fgrep/egrep forced \-\-color=auto system grep variants +dir / vdir forced \-\-color=auto system dir / vdir +help config intercepts \[dq]help config\[dq] → config\-help fish builtin help +claude auto\-links AGENTS.md as CLAUDE.md before launch command claude +edit multi\-editor launcher (GUI/term + fallbacks) $EDITOR/nvim/nano/vi +.EE .PP -When C1 is disabled, \f[V]rm\f[R] uses bare \f[V]command rm\f[R] with no -wrapper \[em] files are permanently deleted, not trashed. +When C1 is disabled, \f[CR]rm\f[R] uses bare \f[CR]command rm\f[R] with +no wrapper \[em] files are permanently deleted, not trashed. There is no intermediate safety net. -.SS C2 \[em] Startup Side-Effects -.PP +.SS C2 \[em] Startup Side\-Effects These run automatically without any user action. Disabling __fish_config_op_autoexec prevents all of them. .IP -.nf -\f[C] +.EX Component Trigger What it does ─────────────────────────────────────────────────────────────────────────── Fisher bootstrap First shell only Downloads and installs fisher @@ -3491,86 +3199,82 @@ paru wrapper Every startup Writes \[ti]/.local/bin/paru wra yay wrapper Every startup Writes \[ti]/.local/bin/yay wrapper Python venv activation On every cd Sources .venv/bin/activate.fish WakaTime command hook On every command Reports to WakaTime API -Auto-pull fast-forward On entering a repo Background ff-only git pull -user-dots symlink Every startup Links $__fish_config_dir/user-dots +Auto\-pull fast\-forward On entering a repo Background ff\-only git pull +user\-dots symlink Every startup Links $__fish_config_dir/user\-dots to $__fish_user_dots_path -\f[R] -.fi +.EE .PP When C2 is disabled: no Fisher install, no theme application, no paru/yay wrapper generation, no automatic venv activation, no WakaTime -reporting, no auto-pull (the PWD handler is never registered), and the -user-dots convenience symlink is not created. -The symlink is git-ignored and only ever managed as a symlink \[em] a +reporting, no auto\-pull (the PWD handler is never registered), and the +user\-dots convenience symlink is not created. +The symlink is git\-ignored and only ever managed as a symlink \[em] a real file or directory at that path is left untouched. -The symlink has its own opt-out independent of C2: set +The symlink has its own opt\-out independent of C2: set __fish_user_dots_symlink to a falsy value (or toggle \[lq]Dots link\[rq] -off on the config-settings Paths page) to stop generating it and remove +off on the config\-settings Paths page) to stop generating it and remove any existing link \[em] honoured even when C2 is enabled. Managed by the __fish_user_dots_link helper. -The first-run completion marker (__fish_config_first_run_complete) is -still set so the init does not re-run on subsequent shells. +The first\-run completion marker (__fish_config_first_run_complete) is +still set so the init does not re\-run on subsequent shells. .PP Python venv activation fires on every directory change. If a directory uses direnv (.envrc present), direnv takes priority and -auto-venv is skipped for that directory. +auto\-venv is skipped for that directory. .PP -Auto-pull fast-forwards opted-in repositories in the background when you -cd into them. -The fish-config repo is always covered; other repos are added with the -\f[V]auto-pull\f[R] command (see its entry in the functions reference). -It only ever fast-forwards a clean repo whose branch has an upstream -\[em] never rebases, merges, or overwrites work \[em] so it is a no-op +Auto\-pull fast\-forwards opted\-in repositories in the background when +you cd into them. +The fish\-config repo is always covered; other repos are added with the +\f[CR]auto\-pull\f[R] command (see its entry in the functions +reference). +It only ever fast\-forwards a clean repo whose branch has an upstream +\[em] never rebases, merges, or overwrites work \[em] so it is a no\-op on dirty trees, divergent branches, or repos without a remote. -The handler fires once per repo entry (not on every sub-directory cd). -The registry is machine-local at -\f[V]$__fish_user_dots_path/auto-pull.list\f[R] (defaults to -\f[V]\[ti]/.config/.user-dots/fish/auto-pull.list\f[R]) and is never +The handler fires once per repo entry (not on every sub\-directory cd). +The registry is machine\-local at +\f[CR]$__fish_user_dots_path/auto\-pull.list\f[R] (defaults to +\f[CR]\[ti]/.config/.user\-dots/fish/auto\-pull.list\f[R]) and is never committed. .SS C3 \[em] Key and Environment Overrides -.PP These change fundamental shell behavior: how keys work, which pager opens, and what the prompt looks like. Disabling __fish_config_op_overrides removes all of them. .IP -.nf -\f[C] +.EX Override What it replaces or sets ─────────────────────────────────────────────────────────────────────────── Vi mode fish_vi_key_bindings replaces default Emacs mode XDG variables Sets global XDG Base Directory variables PATH setup Prepends custom bin directories to the PATH exit → smart_exit exit wrapper that captures scrollback before closing -PAGER=ov ov used by git, man, and all $PAGER-aware tools +PAGER=ov ov used by git, man, and all $PAGER\-aware tools MANPAGER=bat pipeline man pages rendered with syntax highlighting CDPATH=. \[ti]/projects \[ti] bare dir names resolve against \[ti]/projects and \[ti] -Bang-bang system ! and $ keys expand history; !\[ha], !*, !-N, !?str?, +Bang\-bang system ! and $ keys expand history; !\[ha], !*, !\-N, !?str?, \[ha]old\[ha]new abbreviations; six expand_bang_* helpers -Autopair ( [ { \[dq] \[aq] auto-close to (), [], {}, \[dq]\[dq], \[aq]\[aq] +Autopair ( [ { \[dq] \[aq] auto\-close to (), [], {}, \[dq]\[dq], \[aq]\[aq] Puffer key intercepts . ! $ * keys intercepted for smart expansion Starship prompt fish_prompt replaced by Starship + OSC 133 markers Catppuccin colors 30+ fish_color_* variables set to Mocha palette FZF_DEFAULT_OPTS FZF themed to Catppuccin Mocha colors Right prompt fish_right_prompt: exit code (on failure) + dim timestamp; always rendered; Docker context added when starship+C3 active -\f[R] -.fi +.EE .PP -The bang-bang system spans key_bindings.fish, abbr.fish, puffer.fish, +The bang\-bang system spans key_bindings.fish, abbr.fish, puffer.fish, and six expand_bang_*.fish functions. All are gated together \[em] disabling C3 removes the entire -bang-expansion system at once. +bang\-expansion system at once. .PP -When C3 is disabled, \f[V]exit\f[R] falls back to \f[V]builtin exit\f[R] -with no scrollback capture, no Kitty IPC, and no file I/O on exit. +When C3 is disabled, \f[CR]exit\f[R] falls back to +\f[CR]builtin exit\f[R] with no scrollback capture, no Kitty IPC, and no +file I/O on exit. The scrollback capture block is independently controlled by C5 (see below). .SS C4 \[em] Terminal and Tool Integration -.PP These features couple the shell to specific external tools. Disabling __fish_config_op_integrations disables all of them. .IP -.nf -\f[C] +.EX Component Requires ─────────────────────────────────────────────────────────────────────────── \[ti]60 Kitty/WezTerm abbrs Active Kitty or WezTerm session @@ -3579,43 +3283,39 @@ Done desktop notifications Graphical desktop with a notification daemon spwin Kitty or WezTerm tab Kitty, WezTerm, or Konsole split Kitty or WezTerm -hist fzf + wl-copy (Wayland clipboard) +hist fzf + wl\-copy (Wayland clipboard) logs fzf + ov; reads from \[ti]/.terminal_history/ upgrade paru or yay (Arch Linux only) WakaTime hook wakatime CLI and a configured API key -\f[R] -.fi +.EE .PP Disabled integration commands (spwin, tab, split, hist, logs, upgrade) print a colored error to stderr naming the variable that disabled them rather than silently failing. .SS C5 \[em] Logging and Capture -.PP Five components capture shell output to disk. Disabling __fish_config_op_logging skips all capture and removes the logging wrappers. .IP -.nf -\f[C] +.EX Component What it captures ─────────────────────────────────────────────────────────────────────────── Scrollback capture Terminal session output saved to: - \[ti]/.terminal_history/scrollback_YYYY-MM-DD_HH-MM-SS.log -tmux pane capture Continuous pane stream via pipe-pane, saved to: - \[ti]/.terminal_history/tmux_-w-p_YYYY-MM-DD_HH-MM-SS.log + \[ti]/.terminal_history/scrollback_YYYY\-MM\-DD_HH\-MM\-SS.log +tmux pane capture Continuous pane stream via pipe\-pane, saved to: + \[ti]/.terminal_history/tmux_\-w\-p_YYYY\-MM\-DD_HH\-MM\-SS.log zellij pane capture Pane scrollback snapshot on shell exit, saved to: - \[ti]/.terminal_history/zellij_-p_YYYY-MM-DD_HH-MM-SS.log + \[ti]/.terminal_history/zellij_\-p_YYYY\-MM\-DD_HH\-MM\-SS.log paru wrapper All paru/AUR output captured to: - \[ti]/.terminal_history/paru_YYYY-MM-DD_HH-MM-SS.log + \[ti]/.terminal_history/paru_YYYY\-MM\-DD_HH\-MM\-SS.log yay wrapper All yay/AUR output captured to: - \[ti]/.terminal_history/yay_YYYY-MM-DD_HH-MM-SS.log + \[ti]/.terminal_history/yay_YYYY\-MM\-DD_HH\-MM\-SS.log Kitty watcher watcher.py captures scrollback when Kitty closes -\f[R] -.fi +.EE .PP The tmux capture starts automatically when fish launches inside any tmux pane ($TMUX is set). -It uses tmux\[cq]s native pipe-pane to stream all pane output directly +It uses tmux\[cq]s native pipe\-pane to stream all pane output directly to disk without an intermediate process. Each fish shell session gets its own log file; a new log is created on each shell start (including exec fish and new splits). @@ -3624,61 +3324,60 @@ modification time) to keep the total within SCROLLBACK_HISTORY_MAX_FILES, matching the paru/yay wrapper behaviour. .PP The zellij capture works differently: Zellij has no live -output-streaming facility like pipe-pane, so the log is taken as a -one-shot snapshot when the shell exits, via -\f[V]zellij action dump-screen --full --ansi\f[R] (the \[en]ansi flag -preserves color). +output\-streaming facility like pipe\-pane, so the log is taken as a +one\-shot snapshot when the shell exits, via +\f[CR]zellij action dump\-screen \-\-full \-\-ansi\f[R] (the \[en]ansi +flag preserves color). The dump is captured on the fish process\[cq]s stdout and written to the -log file by fish itself (not via \f[V]--path\f[R], which would make the -zellij server write the file). +log file by fish itself (not via \f[CR]\-\-path\f[R], which would make +the zellij server write the file). A fish_exit handler (registered whenever $ZELLIJ is set) writes the pane\[cq]s full scrollback and then prunes old zellij_*.log files the same way. Because the capture happens at exit, toggling __fish_config_op_logging takes effect on the next exit with no restart or sentinel coordination -needed \[em] the C5 guard is re-checked when the handler fires. +needed \[em] the C5 guard is re\-checked when the handler fires. .PP LIMITATION \[em] zellij capture only fires on a clean shell exit (typing -\f[V]exit\f[R], Ctrl-D, or a logout), because that is when the fish_exit -handler runs. +\f[CR]exit\f[R], Ctrl\-D, or a logout), because that is when the +fish_exit handler runs. It does NOT capture when you close a pane or quit zellij through zellij itself: .IP \[bu] 2 Closing a pane signals the shell and tears the pane down concurrently, -so even if the handler runs, \f[V]dump-screen\f[R] may find the pane +so even if the handler runs, \f[CR]dump\-screen\f[R] may find the pane buffer already gone. .IP \[bu] 2 -Quitting zellij kills the zellij server, and \f[V]dump-screen\f[R] needs -a live server to read from \[em] there is nothing left to snapshot. +Quitting zellij kills the zellij server, and \f[CR]dump\-screen\f[R] +needs a live server to read from \[em] there is nothing left to +snapshot. .PP This is a structural difference from tmux, NOT a bug. -tmux streams pane output to disk continuously via pipe-pane, so whatever -was printed is already saved no matter how the pane dies. +tmux streams pane output to disk continuously via pipe\-pane, so +whatever was printed is already saved no matter how the pane dies. Zellij can only snapshot, and the only reliable snapshot point from the shell is a clean exit. To guarantee a zellij pane is logged, end the session with -\f[V]exit\f[R] or Ctrl-D rather than zellij\[cq]s close-pane or quit +\f[CR]exit\f[R] or Ctrl\-D rather than zellij\[cq]s close\-pane or quit actions. .PP -The Kitty watcher is managed by the kitty-logging command: it symlinks -the watcher (fish-config-watcher.py) into the Kitty config directory and -wires it into kitty.conf via a managed block. -Inside Kitty, a non-blocking per-session reminder points first-time -users at \f[V]kitty-logging install\f[R] until they install or run -\f[V]kitty-logging dismiss\f[R]. +The Kitty watcher is managed by the kitty\-logging command: it symlinks +the watcher (fish\-config\-watcher.py) into the Kitty config directory +and wires it into kitty.conf via a managed block. +Inside Kitty, a non\-blocking per\-session reminder points first\-time +users at \f[CR]kitty\-logging install\f[R] until they install or run +\f[CR]kitty\-logging dismiss\f[R]. Install affects new Kitty windows only; runtime disable is still handled by the .logging_disabled sentinel. .PP Logging coordination via sentinel file .PP C5 uses a sentinel file to synchronize state between the shell and -out-of-process components (the Kitty watcher and all running shells): +out\-of\-process components (the Kitty watcher and all running shells): .IP -.nf -\f[C] +.EX \[ti]/.config/fish/.logging_disabled -\f[R] -.fi +.EE .PP Disabling __fish_config_op_logging: 1. Creates the sentinel immediately in every open shell. @@ -3691,16 +3390,16 @@ capture \[em] no Kitty restart required. 4. smart_exit stops saving scrollback logs. 5. -Stops tmux pipe-pane capture in every open fish shell inside tmux. +Stops tmux pipe\-pane capture in every open fish shell inside tmux. .PP -Re-enabling __fish_config_op_logging: 1. +Re\-enabling __fish_config_op_logging: 1. Removes the sentinel in every open shell. 2. Regenerates paru/yay logging wrappers in \[ti]/.local/bin/. 3. Kitty watcher resumes capture on the next session exit. 4. -Restarts tmux pipe-pane capture in every open fish shell inside tmux. +Restarts tmux pipe\-pane capture in every open fish shell inside tmux. .PP Changes propagate to all running shells through an event handler that fires whenever __fish_config_op_logging changes \[em] no shell restart @@ -3708,27 +3407,24 @@ needed. .PP Note: C3 and C5 compose independently. C3 controls whether the smart_exit wrapper is active at all; C5 controls -only the scrollback-capture block inside it. +only the scrollback\-capture block inside it. With C3 disabled, exit is plain builtin exit regardless of C5. -.SS C6 \[em] Greeting and First-Run UI +.SS C6 \[em] Greeting and First\-Run UI .IP -.nf -\f[C] +.EX Component What it shows ─────────────────────────────────────────────────────────────────────────── -First-run welcome banner One-time message on first interactive session +First\-run welcome banner One\-time message on first interactive session fish_greeting override Empty function defined late in config.fish to suppress distro greetings (e.g. CachyOS sets fish_greeting to fastfetch by default) -\f[R] -.fi +.EE .PP When C6 is disabled, no greeting is printed by this config. Any greeting set by the distro or other configs runs normally \[em] this config simply does not override it. .SS Prompt and Theme .SS Starship -.PP The primary prompt is Starship, initialized by conf.d/starship.fish. Configure it via \[ti]/.config/starship.toml. .PP @@ -3739,175 +3435,148 @@ and OSC 133;B (input start) immediately after, placing both markers on the prompt line itself. This allows ov to use them as sticky section headers when browsing scrollback logs. -Without Starship, fish\[cq]s built-in prompt handles these markers +Without Starship, fish\[cq]s built\-in prompt handles these markers automatically. .SS Catppuccin Fallback Prompt -.PP -When Starship is absent or C3 overrides are disabled, a built-in -nim-style two-line prompt activates from functions/fish_prompt.fish. +When Starship is absent or C3 overrides are disabled, a built\-in +nim\-style two\-line prompt activates from functions/fish_prompt.fish. No external dependencies \[em] fish builtins only. .PP Layout: .IP -.nf -\f[C] +.EX ┬─[user\[at]host:\[ti]/path] (main) ╰─>$ -\f[R] -.fi +.EE .PP Elements: .IP -.nf -\f[C] +.EX user Yellow (Catppuccin Yellow); red if root \[at]host Blue (local) or Teal (SSH) \[ti]/path prompt_pwd abbreviation (Catppuccin Text) (main) Current git branch in Catppuccin Pink; omitted outside repos ─[V:name] Active Python venv basename; omitted when none -─[N/I/R/V] Vi-mode indicator when vi bindings are active +─[N/I/R/V] Vi\-mode indicator when vi bindings are active ┬─ / ╰─> Connector lines: Catppuccin Green on success, Red on failure -\f[R] -.fi +.EE .PP The right prompt (fish_right_prompt.fish) always renders, regardless of C3 state. On failure it shows a red ✘ and the exit code; on success it shows only the dim timestamp. When starship is installed and C3 is enabled, the active Docker context -is also shown (if non-default): +is also shown (if non\-default): .IP -.nf -\f[C] +.EX ✘ 1 󰡨 myctx Fri Jun 12 00:51:21 2026 ← failed, starship+C3 active ✘ 1 Fri Jun 12 00:51:21 2026 ← failed, fallback prompt Fri Jun 12 00:51:21 2026 ← success (no ✘) -\f[R] -.fi +.EE .SS FZF -.PP FZF is themed to Catppuccin Mocha via FZF_DEFAULT_OPTS set in integrations/fzf.fish. The colors applied: .IP -.nf -\f[C] +.EX Background: #1E1E2E (base) #313244 (surface0) Foreground: #CDD6F4 (text) Highlights: #F38BA8 (red) #CBA6F7 (mauve) #B4BEFE (lavender) -\f[R] -.fi +.EE .PP To customize, override FZF_DEFAULT_OPTS in local.fish. .SS Catppuccin Mocha Syntax Highlighting -.PP The Catppuccin Mocha theme ships with this config in themes/ and is -applied on first run via \f[V]conf.d/first_run.fish\f[R]. +applied on first run via \f[CR]conf.d/first_run.fish\f[R]. Colors are stored in fish_variables (universal). To switch variants, install a different theme from themes/: .IP -.nf -\f[C] +.EX fish_config theme save \[dq]Catppuccin Latte\[dq] -\f[R] -.fi +.EE .PP * * * * * .SH 8. FISHER PLUGINS -.PP Fisher is bootstrapped automatically on the \f[B]first interactive -session\f[R] via \f[V]conf.d/first_run.fish\f[R]. -This also applies the Catppuccin Mocha theme and prints a one-time +session\f[R] via \f[CR]conf.d/first_run.fish\f[R]. +This also applies the Catppuccin Mocha theme and prints a one\-time welcome message (gated by __fish_config_op_greeting; set it to 0 to suppress). -Subsequent sessions skip all first-run logic with zero overhead. +Subsequent sessions skip all first\-run logic with zero overhead. .PP -To re-trigger first-run initialization (e.g., after a fresh install or +To re\-trigger first\-run initialization (e.g., after a fresh install or for testing), run: .IP -.nf -\f[C] -set -Ue __fish_config_first_run_complete -\f[R] -.fi +.EX +set \-Ue __fish_config_first_run_complete +.EE .PP Then open a new shell. -.SS Fisher-Managed Plugins -.PP +.SS Fisher\-Managed Plugins The following plugins are fully managed by Fisher. Their files are installed into the repo directory by Fisher and are -listed in \f[V].gitignore\f[R] \[em] do not commit them. +listed in \f[CR].gitignore\f[R] \[em] do not commit them. Fisher installs and updates them automatically. .IP -.nf -\f[C] +.EX jorgebucaran/fisher Plugin manager itself -meaningful-ooo/sponge Remove failed commands from history -\f[R] -.fi +meaningful\-ooo/sponge Remove failed commands from history +.EE .SS Sponge History Filtering -.PP Sponge removes failed commands from history and, via -conf.d/sponge_privacy.fish, also filters privacy-sensitive commands +conf.d/sponge_privacy.fish, also filters privacy\-sensitive commands through three layers: .PP Layer 1 \[em] Static patterns (universal, persistent across sessions): Commands matching any of these structural signatures are never recorded: .IP -.nf -\f[C] ---password / --token / --passphrase / --api-key flags with values +.EX +\-\-password / \-\-token / \-\-passphrase / \-\-api\-key flags with values Inline env assignments: GITHUB_TOKEN=xxx, MY_API_KEY=abc -Fish set with sensitive names: set -gx GITHUB_TOKEN xxx +Fish set with sensitive names: set \-gx GITHUB_TOKEN xxx URLs with embedded credentials: https://user:pass\[at]host -HTTP Authorization headers: curl -H \[dq]Authorization: ...\[dq] -Basic auth flags: curl -u user:pass -sshpass, docker login -p, openssl -passin/-passout -\f[R] -.fi +HTTP Authorization headers: curl \-H \[dq]Authorization: ...\[dq] +Basic auth flags: curl \-u user:pass +sshpass, docker login \-p, openssl \-passin/\-passout +.EE .PP Layer 2 \[em] Dynamic secret values (session globals, refreshed each login): On the first prompt, after secrets.fish has loaded, the literal values of all exported variables whose names suggest credentials (TOKEN, PASSWORD, SECRET, API_KEY, etc.) -are collected, regex-escaped, and added as a session-scoped overlay. +are collected, regex\-escaped, and added as a session\-scoped overlay. Because globals shadow universals in Fish, the combined list is what sponge sees. Rotating a token takes effect on the next login automatically. .PP -Layer 3 \[em] Per-command filter (sponge_filter_secrets): Catches +Layer 3 \[em] Per\-command filter (sponge_filter_secrets): Catches credentials in variables exported after login, such as tokens sourced -from a project .env file mid-session. +from a project .env file mid\-session. .PP To add your own persistent patterns: .IP -.nf -\f[C] -set -U -a sponge_regex_patterns \[aq]your-regex-here\[aq] -\f[R] -.fi +.EX +set \-U \-a sponge_regex_patterns \[aq]your\-regex\-here\[aq] +.EE .PP -To mark additional variable NAMES as credential-bearing (so Layer 2 +To mark additional variable NAMES as credential\-bearing (so Layer 2 scrubs their values), add name tokens \[em] via -\f[V]config-settings\f[R] → Sponge, or directly: +\f[CR]config\-settings\f[R] → Sponge, or directly: .IP -.nf -\f[C] -set -U -a __fish_sponge_extra_sensitive ACME_API VAULT_PW -\f[R] -.fi +.EX +set \-U \-a __fish_sponge_extra_sensitive ACME_API VAULT_PW +.EE .PP -Tokens are folded into the Layer 2 name match case-insensitively as +Tokens are folded into the Layer 2 name match case\-insensitively as substrings, so ACME_API also covers ACME_API_KEY. -(The match uses \f[V]--entire\f[R] to return the full variable name, so -partial-name tokens dereference the right value.) +(The match uses \f[CR]\-\-entire\f[R] to return the full variable name, +so partial\-name tokens dereference the right value.) .PP -The \f[V]config-settings\f[R] Sponge page also surfaces sponge\[cq]s own -tuning variables \[em] sponge_delay, sponge_successful_exit_codes, +The \f[CR]config\-settings\f[R] Sponge page also surfaces sponge\[cq]s +own tuning variables \[em] sponge_delay, sponge_successful_exit_codes, sponge_purge_only_on_exit, and sponge_allow_previously_successful \[em] so they can be changed without typing variable names. .SS Bundled Plugin Functionality -.PP The remaining plugin functionality is bundled directly with this config rather than managed through Fisher. The bundled versions include customizations for Fish 4.x compatibility @@ -3916,45 +3585,37 @@ Installing them through Fisher would overwrite these customizations. .PP Bundled components and their upstream origins: .IP -.nf -\f[C] +.EX catppuccin/fish → themes/ + conf.d/theme.fish PatrickF1/fzf.fish → functions/_fzf_*.fish + conf.d/fzf.fish franciscolourenco/done → conf.d/done.fish jorgebucaran/autopair.fish → functions/_autopair_*.fish + conf.d/autopair.fish -nickeb96/puffer-fish → functions/_puffer_fish_*.fish + conf.d/puffer.fish -\f[R] -.fi +nickeb96/puffer\-fish → functions/_puffer_fish_*.fish + conf.d/puffer.fish +.EE .PP -Do not run \f[V]fisher install\f[R] for these \[em] it will overwrite +Do not run \f[CR]fisher install\f[R] for these \[em] it will overwrite the customized versions. To update their behavior, edit the relevant bundled files directly. .SS fish_plugins Manifest -.PP -The \f[V]fish_plugins\f[R] file at the config root: +The \f[CR]fish_plugins\f[R] file at the config root: .IP -.nf -\f[C] +.EX jorgebucaran/fisher Plugin manager itself -meaningful-ooo/sponge Remove failed commands from history -\f[R] -.fi +meaningful\-ooo/sponge Remove failed commands from history +.EE .PP -To update all Fisher-managed plugins, run \f[V]fisher update\f[R] or -\f[V]fish-deps update\f[R] which calls it as its first step. +To update all Fisher\-managed plugins, run \f[CR]fisher update\f[R] or +\f[CR]fish\-deps update\f[R] which calls it as its first step. .PP * * * * * .SH 9. INSTALLATION -.PP This configuration is managed as a git repository. To deploy on a new machine: .IP -.nf -\f[C] +.EX mv \[ti]/.config/fish \[ti]/.config/fish.bak # back up any existing config -git clone https://git.rootiest.dev/rootiest/fish-config.git \[ti]/.config/fish -\f[R] -.fi +git clone https://git.rootiest.dev/rootiest/fish\-config.git \[ti]/.config/fish +.EE .PP Then open a new Fish shell. Fisher installs automatically on first launch and the Catppuccin Mocha @@ -3962,7 +3623,6 @@ theme is applied. All other plugin functionality is bundled directly with this config and requires no additional installation. .SS Return Sentinel -.PP config.fish ends with a return sentinel guard. Any lines appended after it by a tool\[cq]s setup command (starship init fish | source, zoxide init fish | source, etc.) @@ -3971,38 +3631,32 @@ All integrations are managed via conf.d/ files. .PP If a new tool\[cq]s shell integration appears to do nothing, check whether its setup command appended an init line below the sentinel and -create a dedicated \f[V]conf.d/.fish\f[R] instead. +create a dedicated \f[CR]conf.d/.fish\f[R] instead. .SS Updating -.PP Pull the latest changes from the upstream repository without needing a configured git remote: .IP -.nf -\f[C] -config-update Fetch and apply the latest commits from upstream -config-update --dry-run Preview available changes without applying them -config-update --force Stash local changes, pull, then restore the stash -\f[R] -.fi +.EX +config\-update Fetch and apply the latest commits from upstream +config\-update \-\-dry\-run Preview available changes without applying them +config\-update \-\-force Stash local changes, pull, then restore the stash +.EE .PP All git output is suppressed. Run exec fish after a successful update to reload. .PP * * * * * .SH 10. PERSONALIZATION -.PP -Sensitive credentials and machine-specific settings are kept out of +Sensitive credentials and machine\-specific settings are kept out of version control in a private directory. -The path defaults to \f[V]\[ti]/.config/.user-dots/fish/\f[R] but can be -overridden: +The path defaults to \f[CR]\[ti]/.config/.user\-dots/fish/\f[R] but can +be overridden: .IP -.nf -\f[C] -set -U __fish_user_dots_path /path/to/your/dots/fish -\f[R] -.fi +.EX +set \-U __fish_user_dots_path /path/to/your/dots/fish +.EE .PP -Or use the interactive TUI \[em] run \f[V]config-settings\f[R] and +Or use the interactive TUI \[em] run \f[CR]config\-settings\f[R] and navigate to the \[lq]Dots Path\[rq] row (last row). Press Enter to type a new path, or ← / h to reset to the default. .PP @@ -4010,57 +3664,49 @@ config.fish sources local.fish from that directory on every interactive session. local.fish is responsible for sourcing its own secrets.fish: .IP -.nf -\f[C] +.EX $__fish_user_dots_path/ ├── secrets.fish API keys, tokens, passwords, personal identifiers -└── local.fish Machine-specific paths, env vars, and sourcing secrets -\f[R] -.fi +└── local.fish Machine\-specific paths, env vars, and sourcing secrets +.EE .PP -fish_variables (auto-managed by fish) is excluded from this repo via +fish_variables (auto\-managed by fish) is excluded from this repo via \&.gitignore. Do not commit it. .SS secrets.fish -.PP Store anything you would not commit to a public repo: API keys, auth tokens, passwords, and personal identifiers. .IP -.nf -\f[C] +.EX # secrets.fish -set -gx MY_NAME \[dq]Your Name\[dq] -set -gx MY_EMAIL \[dq]you\[at]example.com\[dq] -set -gx GPG_RECIPIENT \[dq]you\[at]example.com\[dq] -set -gx GITHUB_TOKEN ghp_yourTokenHere -set -gx OPENAI_API_KEY sk-proj-yourKeyHere -set -gx GITEA_TOKEN yourGiteaTokenHere -set -gx GITEA_CHOSEN_LOGIN your.gitea.instance -set -gx KOPIA_PASSWORD yourKopiaPassword -\f[R] -.fi +set \-gx MY_NAME \[dq]Your Name\[dq] +set \-gx MY_EMAIL \[dq]you\[at]example.com\[dq] +set \-gx GPG_RECIPIENT \[dq]you\[at]example.com\[dq] +set \-gx GITHUB_TOKEN ghp_yourTokenHere +set \-gx OPENAI_API_KEY sk\-proj\-yourKeyHere +set \-gx GITEA_TOKEN yourGiteaTokenHere +set \-gx GITEA_CHOSEN_LOGIN your.gitea.instance +set \-gx KOPIA_PASSWORD yourKopiaPassword +.EE .SS local.fish -.PP Store paths and variables specific to one machine \[em] things that would be wrong on any other system. .IP -.nf -\f[C] +.EX # CDPATH \[em] directories searched by cd -set -gx CDPATH . /home/youruser/projects /home/youruser +set \-gx CDPATH . /home/youruser/projects /home/youruser # Path to your shared .gitignore boilerplate -set -gx GITIGNORE_BOILERPLATE \[ti]/.config/git/gitignore_boilerplate +set \-gx GITIGNORE_BOILERPLATE \[ti]/.config/git/gitignore_boilerplate # SSH shortcuts -abbr -a sshr \[aq]ssh you\[at]your-server.local\[aq] -abbr -a sshw \[aq]ssh you\[at]work-server.example.com\[aq] +abbr \-a sshr \[aq]ssh you\[at]your\-server.local\[aq] +abbr \-a sshw \[aq]ssh you\[at]work\-server.example.com\[aq] # Docker context shortcuts -abbr -a dcr \[aq]docker context use my-remote-server\[aq] -abbr -a dcw \[aq]docker context use work-server\[aq] -\f[R] -.fi +abbr \-a dcr \[aq]docker context use my\-remote\-server\[aq] +abbr \-a dcw \[aq]docker context use work\-server\[aq] +.EE .PP local.fish is sourced at the end of config.fish with an existence check so the public config works cleanly on any machine without the private @@ -4069,84 +3715,70 @@ local.fish in turn sources secrets.fish when it exists. .PP * * * * * .SH 11. TROUBLESHOOTING -.PP This section covers common issues, their solutions, and how to safely revert changes or uninstall the configuration entirely. .SS Uninstalling / Reverting to Backup -.PP The installation step backs up any existing config to -\f[V]\[ti]/.config/fish.bak\f[R]. +\f[CR]\[ti]/.config/fish.bak\f[R]. To revert: .IP -.nf -\f[C] -rm -rf \[ti]/.config/fish +.EX +rm \-rf \[ti]/.config/fish mv \[ti]/.config/fish.bak \[ti]/.config/fish -\f[R] -.fi +.EE .PP If no backup exists, remove the directory and let Fish regenerate a default config on next launch: .IP -.nf -\f[C] -rm -rf \[ti]/.config/fish -fish -c \[aq]fish_config theme choose \[dq]Fish default\[dq]\[aq] -\f[R] -.fi +.EX +rm \-rf \[ti]/.config/fish +fish \-c \[aq]fish_config theme choose \[dq]Fish default\[dq]\[aq] +.EE .PP Clean up files generated outside the config directory: .IP -.nf -\f[C] -rm -f \[ti]/.local/bin/paru \[ti]/.local/bin/yay # AUR log wrappers -rm -f \[ti]/.local/share/man/man1/fish-config.1 # man page symlink -rm -f \[ti]/.config/fish/.logging_disabled # C5 sentinel -\f[R] -.fi +.EX +rm \-f \[ti]/.local/bin/paru \[ti]/.local/bin/yay # AUR log wrappers +rm \-f \[ti]/.local/share/man/man1/fish\-config.1 # man page symlink +rm \-f \[ti]/.config/fish/.logging_disabled # C5 sentinel +.EE .PP Erase universal variables set by this config: .IP -.nf -\f[C] -for v in (set -Un | string match \[aq]__fish_config*\[aq]) - set -Ue $v +.EX +for v in (set \-Un | string match \[aq]__fish_config*\[aq]) + set \-Ue $v end for v in __done_min_cmd_duration __done_notification_urgency_level - set -Ue $v + set \-Ue $v end -for v in (set -Un | string match \[aq]sponge_*\[aq]) - set -Ue $v +for v in (set \-Un | string match \[aq]sponge_*\[aq]) + set \-Ue $v end -\f[R] -.fi +.EE .PP -The \f[V]\[ti]/.terminal_history/\f[R] log directory contains your +The \f[CR]\[ti]/.terminal_history/\f[R] log directory contains your session logs. Remove it only if you do not want to keep them. .SS Fish Version Requirement -.PP This config requires Fish 4.x or newer. Check your version: .IP -.nf -\f[C] -fish --version -\f[R] -.fi +.EX +fish \-\-version +.EE .PP -Run \f[V]fish-deps\f[R] to see a status report \[em] an outdated Fish +Run \f[CR]fish\-deps\f[R] to see a status report \[em] an outdated Fish shows ⚠ with an upgrade message. .PP Upgrading Fish by distribution: .IP -.nf -\f[C] +.EX # Arch / AUR -pacman -S fish # or paru -S fish +pacman \-S fish # or paru \-S fish # Ubuntu / Debian (PPA) -sudo apt-add-repository ppa:fish-shell/release-4 +sudo apt\-add\-repository ppa:fish\-shell/release\-4 sudo apt update && sudo apt install fish # Fedora @@ -4154,140 +3786,115 @@ sudo dnf install fish # macOS brew install fish -\f[R] -.fi +.EE .PP For other systems or building from source, see https://fishshell.com. .SS Disable Session Logging -.PP Disable all logging and capture (scrollback, tmux/zellij pane logs, AUR helper wrappers, Kitty watcher): .IP -.nf -\f[C] -set -U __fish_config_op_logging off -\f[R] -.fi +.EX +set \-U __fish_config_op_logging off +.EE .PP -Or toggle it interactively: run \f[V]config-settings\f[R] and flip the +Or toggle it interactively: run \f[CR]config\-settings\f[R] and flip the Logging row. .PP This takes effect immediately in all running shells \[em] no restart needed. -The sentinel file, wrapper removal, and pipe-pane teardown happen +The sentinel file, wrapper removal, and pipe\-pane teardown happen automatically. .PP -Re-enable: +Re\-enable: .IP -.nf -\f[C] -set -Ue __fish_config_op_logging -\f[R] -.fi +.EX +set \-Ue __fish_config_op_logging +.EE .PP -See Section 7, \[lq]C5 \[em] Logging and Capture\[rq] for the full -component breakdown. +See C5 \[em] Logging and Capture for the full component breakdown. .SS Change or Disable the Greeting -.PP This config suppresses the distro greeting (e.g.\ CachyOS fastfetch) by default. To let the distro greeting through: .IP -.nf -\f[C] -set -U __fish_config_op_greeting off -\f[R] -.fi +.EX +set \-U __fish_config_op_greeting off +.EE .PP To set a custom greeting, define fish_greeting in your local.fish: .IP -.nf -\f[C] +.EX # in $__fish_user_dots_path/local.fish function fish_greeting echo \[dq]Hello, world!\[dq] end -\f[R] -.fi +.EE .PP -The first-run welcome banner runs exactly once. -To re-trigger it (e.g.\ for testing): +The first\-run welcome banner runs exactly once. +To re\-trigger it (e.g.\ for testing): .IP -.nf -\f[C] -set -Ue __fish_config_first_run_complete -\f[R] -.fi +.EX +set \-Ue __fish_config_first_run_complete +.EE .PP -See Section 7, \[lq]C6 \[em] Greeting and First-Run UI\[rq] for details. -.SS Secrets and Machine-Local Configuration -.PP -Machine-specific config goes in -\f[V]$__fish_user_dots_path/local.fish\f[R] (defaults to -\f[V]\[ti]/.config/.user-dots/fish/local.fish\f[R]). -Secrets go in \f[V]secrets.fish\f[R] in the same directory. +See C6 \[em] Greeting and First\-Run UI for details. +.SS Secrets and Machine\-Local Configuration +Machine\-specific config goes in +\f[CR]$__fish_user_dots_path/local.fish\f[R] (defaults to +\f[CR]\[ti]/.config/.user\-dots/fish/local.fish\f[R]). +Secrets go in \f[CR]secrets.fish\f[R] in the same directory. .PP If local.fish is not loading, verify the path: .IP -.nf -\f[C] +.EX echo $__fish_user_dots_path -test -f \[dq]$__fish_user_dots_path/local.fish\[dq]; and echo exists; or echo missing -\f[R] -.fi +test \-f \[dq]$__fish_user_dots_path/local.fish\[dq]; and echo exists; or echo missing +.EE .PP Change the path via variable or TUI: .IP -.nf -\f[C] -set -U __fish_user_dots_path /new/path/to/dots/fish -\f[R] -.fi +.EX +set \-U __fish_user_dots_path /new/path/to/dots/fish +.EE .PP -Or run \f[V]config-settings\f[R], navigate to the Paths page, and edit +Or run \f[CR]config\-settings\f[R], navigate to the Paths page, and edit \[lq]Dots path\[rq]. .PP -The \f[V]user-dots\f[R] convenience symlink in the config directory +The \f[CR]user\-dots\f[R] convenience symlink in the config directory tracks this path. Disable it with: .IP -.nf -\f[C] -set -U __fish_user_dots_symlink false -\f[R] -.fi +.EX +set \-U __fish_user_dots_symlink false +.EE .PP -See Section 10, \[lq]Personalization\[rq] for the full local.fish / -secrets.fish layout. +See Personalization for the full \f[CR]local.fish\f[R] / +\f[CR]secrets.fish\f[R] layout. .SS Tool Init Does Nothing (Return Sentinel) -.PP Symptom: you ran a tool\[cq]s setup command (e.g. -\f[V]starship init fish >> \[ti]/.config/fish/config.fish\f[R]) and +\f[CR]starship init fish >> \[ti]/.config/fish/config.fish\f[R]) and nothing changed. .PP -Cause: config.fish ends with a \f[V]return\f[R] guard. +Cause: \f[CR]config.fish\f[R] ends with a \f[CR]return\f[R] guard. Any lines appended after it are never executed. .PP -Fix: create a dedicated conf.d file instead of appending to config.fish: +Fix: create a dedicated \f[CR]conf.d/\f[R] file instead of appending to +\f[CR]config.fish\f[R]: .IP -.nf -\f[C] +.EX # \[ti]/.config/fish/conf.d/mytool.fish mytool init fish | source -\f[R] -.fi +.EE .PP All existing integrations (starship, zoxide, direnv) already have -conf.d/ files. -See Section 9, \[lq]Return Sentinel\[rq] for background. +\f[CR]conf.d/\f[R] files. +See Return Sentinel for background. .SS Missing Dependencies -.PP -Run \f[V]fish-deps\f[R] (defaults to \f[V]fish-deps status\f[R]) to see -what is installed and what is missing. +Run \f[CR]fish\-deps\f[R] (defaults to \f[CR]fish\-deps status\f[R]) to +see what is installed and what is missing. Common symptoms and their missing tools: .IP -.nf -\f[C] +.EX Symptom Missing tool ───────────────────────────────────────────────────── ls output has no icons or colors eza (or lsd) @@ -4295,177 +3902,147 @@ cd does not remember directories zoxide cat shows no syntax highlighting bat fzf keybindings do nothing fzf Starship prompt not appearing starship -\f[R] -.fi +.EE .PP Install missing dependencies interactively: .IP -.nf -\f[C] -fish-deps install -\f[R] -.fi +.EX +fish\-deps install +.EE .PP Or install everything missing and update what is installed: .IP -.nf -\f[C] -fish-deps sync -\f[R] -.fi +.EX +fish\-deps sync +.EE .PP -See Section 6, \[lq]Dependency Catalog\[rq] for the full list grouped by -tier (required, integrations, recommended). +See Dependency Catalog for the full list grouped by tier (required, +integrations, recommended). .SS Vi Mode Keybindings -.PP This config enables Vi mode by default (via C3 overrides), replacing the -standard Emacs-style bindings. -If Vi mode interferes with your workflow, override it in local.fish: +standard Emacs\-style bindings. +If Vi mode interferes with your workflow, override it in +\f[CR]local.fish\f[R]: .IP -.nf -\f[C] -# in $__fish_user_dots_path/local.fish +.EX +# $__fish_user_dots_path/local.fish fish_default_key_bindings -\f[R] -.fi +.EE .PP -This restores Emacs-style bindings without disabling the rest of C3 -(bang-bang, autopair, starship prompt, pager settings, etc.). +This restores Emacs\-style bindings without disabling the rest of C3 +(bang\-bang, autopair, starship prompt, pager settings, etc.). .PP To disable the entire C3 category (Vi mode and all other key/environment overrides): .IP -.nf -\f[C] -set -U __fish_config_op_overrides off -\f[R] -.fi +.EX +set \-U __fish_config_op_overrides off +.EE .PP -See Section 7, \[lq]C3 \[em] Key and Environment Overrides\[rq] for the -full list of what C3 controls. +See C3 \[em] Key and Environment Overrides for the full list of what C3 +controls. .SS Minimal Mode / Disabling Opinionated Features -.PP Disable all opinionated features at once: .IP -.nf -\f[C] -set -U __fish_config_opinionated 0 -\f[R] -.fi +.EX +set \-U __fish_config_opinionated 0 +.EE .PP -This turns off all six categories (aliases, auto-exec, overrides, +This turns off all six categories (aliases, auto\-exec, overrides, integrations, logging, greeting) \[em] leaving a clean shell with only PATH, XDG variables, and local.fish sourcing. .PP Disable a single category: .IP -.nf -\f[C] -set -U __fish_config_op_aliases off # C1 \[em] command shadows -set -U __fish_config_op_autoexec off # C2 \[em] startup side-effects -set -U __fish_config_op_overrides off # C3 \[em] key/env overrides -set -U __fish_config_op_integrations off # C4 \[em] terminal integrations -set -U __fish_config_op_logging off # C5 \[em] logging and capture -set -U __fish_config_op_greeting off # C6 \[em] greeting -\f[R] -.fi +.EX +set \-U __fish_config_op_aliases off # C1 \[em] command shadows +set \-U __fish_config_op_autoexec off # C2 \[em] startup side\-effects +set \-U __fish_config_op_overrides off # C3 \[em] key/env overrides +set \-U __fish_config_op_integrations off # C4 \[em] terminal integrations +set \-U __fish_config_op_logging off # C5 \[em] logging and capture +set \-U __fish_config_op_greeting off # C6 \[em] greeting +.EE .PP Keep one category active under a master disable: .IP -.nf -\f[C] -set -U __fish_config_opinionated 0 -set -U __fish_config_op_aliases 1 # only C1 stays on -\f[R] -.fi +.EX +set \-U __fish_config_opinionated 0 +set \-U __fish_config_op_aliases 1 # only C1 stays on +.EE .PP -Re-enable everything: +Re\-enable everything: .IP -.nf -\f[C] -set -Ue __fish_config_opinionated -\f[R] -.fi +.EX +set \-Ue __fish_config_opinionated +.EE .PP -Or use the interactive TUI: \f[V]config-settings\f[R]. +Or use the interactive TUI: \f[CR]config\-settings\f[R]. .PP -See Section 7, \[lq]Opinionated Components (Minimal Mode)\[rq] for the -full component reference tables. +See Opinionated Components (Minimal Mode) for the full component +reference tables. .PP * * * * * .SH 12. VIEWING THIS MANUAL -.PP There are four ways to read this manual. .SS The documentation website .IP -.nf -\f[C] -help config --html -\f[R] -.fi +.EX +help config \-\-html +.EE .PP Opens https://fish.rootiest.fyi/ in the default browser \[em] the -Starlight-powered site built from \f[V]docs/manual/**\f[R] on every push -to \f[V]main\f[R]. -It has a section sidebar and full-text search. +Starlight\-powered site built from \f[CR]docs/manual/**\f[R] on every +push to \f[CR]main\f[R]. +It has a section sidebar and full\-text search. Deep links to a specific section aren\[cq]t supported from the command line; once the site opens, use its search box to jump straight to what you need. .SS As a man page .IP -.nf -\f[C] -help config --man -help config pkg --man -\f[R] -.fi +.EX +help config \-\-man +help config pkg \-\-man +.EE .PP -Opens the compiled docs/fish-config.1 directly via man -l, bypassing the -pager fallback chain. +Opens the compiled docs/fish\-config.1 directly via man \-l, bypassing +the pager fallback chain. If a section keyword is given, the pager opens at the nearest matching heading. The symlink is created once on first run (like an install step) and MANPATH is set each session, enabling the standard invocation: .IP -.nf -\f[C] -man fish-config -\f[R] -.fi +.EX +man fish\-config +.EE .PP -NOTE: fish-config (hyphen) is this config\[cq]s man page. -fish_config (underscore) is fish\[cq]s built-in browser-based +NOTE: fish\-config (hyphen) is this config\[cq]s man page. +fish_config (underscore) is fish\[cq]s built\-in browser\-based configuration tool \[em] a completely separate command. Do not mix them up. .SS In the terminal .IP -.nf -\f[C] +.EX help config help config keybindings -\f[R] -.fi +.EE .PP Without a pager available beyond the basics, -\f[V]help config [SECTION]\f[R] opens the Markdown manual in the best +\f[CR]help config [SECTION]\f[R] opens the Markdown manual in the best available viewer, falling back through: .IP -.nf -\f[C] +.EX 1. ov + bat section navigation + syntax highlighting (best) 2. ov alone section navigation, raw Markdown 3. bat alone syntax highlighting, use / to search -4. man -l pre-compiled man page (if available) -5. less plain text with line-jump +4. man \-l pre\-compiled man page (if available) +5. less plain text with line\-jump 6. cat plain output -\f[R] -.fi +.EE .PP -With ov, the Markdown renders with syntax highlighting and section-based -navigation: +With ov, the Markdown renders with syntax highlighting and +section\-based navigation: .IP -.nf -\f[C] +.EX Space next section \[ha] previous section Alt+u toggle section list sidebar @@ -4474,51 +4051,44 @@ n / N next / previous search match g go to line number j interactive jump target (line, %, or \[aq]section\[aq]) q quit -\f[R] -.fi +.EE .PP If SECTION is given, the pager opens at the first heading that matches -the keyword (case-insensitive; checks \f[V]docs/fish-config.index\f[R] -aliases first, then falls back to a normalized heading scan): +the keyword (case\-insensitive; checks +\f[CR]docs/fish\-config.index\f[R] aliases first, then falls back to a +normalized heading scan): .IP -.nf -\f[C] +.EX help config keybindings help config abbreviations help config pkg help config logs -help config fish-deps -\f[R] -.fi +help config fish\-deps +.EE .SS Reading the source directly -.PP -\f[V]docs/manual/**\f[R] is the single source of truth this manual, the +\f[CR]docs/manual/**\f[R] is the single source of truth this manual, the man page, and the website are all generated from. Numbered files and directories correspond to the numbered sections in this manual \[em] browse them in any editor, or from a shell: .IP -.nf -\f[C] +.EX cd \[ti]/.config/fish/docs/manual -grep -rn \[dq]keybindings\[dq] . -\f[R] -.fi +grep \-rn \[dq]keybindings\[dq] . +.EE .PP Section 5 is the exception. -Function entries are generated from the man-page-style comment header -above each function in \f[V]functions/*.fish\f[R], so the documentation +Function entries are generated from the man\-page\-style comment header +above each function in \f[CR]functions/*.fish\f[R], so the documentation for a command lives beside the code that implements it and cannot drift from it. To read the source for a single function, or to correct its documentation, open the function itself: .IP -.nf -\f[C] -functions/git-clean.fish -\f[R] -.fi +.EX +functions/git\-clean.fish +.EE .PP -The files under \f[V]docs/manual/05-functions/\f[R] carry only the +The files under \f[CR]docs/manual/05\-functions/\f[R] carry only the category titles, ordering, and search keywords. .SH AUTHORS Rootiest. diff --git a/docs/fish-config.md b/docs/fish-config.md index f9178c3..096d3ac 100644 --- a/docs/fish-config.md +++ b/docs/fish-config.md @@ -47,7 +47,7 @@ output, file contents, and secrets printed to the terminal. Nothing leaves your machine, but the files persist locally. - Disable all logging with: `set -U __fish_config_op_logging off` - Prefer a menu? Run the interactive picker: `config-settings` -- See Section 7 (C5 - Logging and Capture) for the full breakdown. +- See C5 — Logging and Capture for the full breakdown. The configuration uses a structured file tree: @@ -3214,7 +3214,7 @@ Re-enable: set -Ue __fish_config_op_logging -See Section 7, "C5 — Logging and Capture" for the full component breakdown. +See C5 — Logging and Capture for the full component breakdown. ## Change or Disable the Greeting @@ -3235,7 +3235,7 @@ testing): set -Ue __fish_config_first_run_complete -See Section 7, "C6 — Greeting and First-Run UI" for details. +See C6 — Greeting and First-Run UI for details. ## Secrets and Machine-Local Configuration @@ -3259,7 +3259,7 @@ Disable it with: set -U __fish_user_dots_symlink false -See Section 10, "Personalization" for the full local.fish / secrets.fish +See Personalization for the full `local.fish` / `secrets.fish` layout. ## Tool Init Does Nothing (Return Sentinel) @@ -3267,16 +3267,16 @@ layout. Symptom: you ran a tool's setup command (e.g. `starship init fish >> ~/.config/fish/config.fish`) and nothing changed. -Cause: config.fish ends with a `return` guard. Any lines appended after it +Cause: `config.fish` ends with a `return` guard. Any lines appended after it are never executed. -Fix: create a dedicated conf.d file instead of appending to config.fish: +Fix: create a dedicated `conf.d/` file instead of appending to `config.fish`: # ~/.config/fish/conf.d/mytool.fish mytool init fish | source -All existing integrations (starship, zoxide, direnv) already have conf.d/ -files. See Section 9, "Return Sentinel" for background. +All existing integrations (starship, zoxide, direnv) already have `conf.d/` +files. See Return Sentinel for background. ## Missing Dependencies @@ -3299,16 +3299,16 @@ Or install everything missing and update what is installed: fish-deps sync -See Section 6, "Dependency Catalog" for the full list grouped by tier +See Dependency Catalog for the full list grouped by tier (required, integrations, recommended). ## Vi Mode Keybindings This config enables Vi mode by default (via C3 overrides), replacing the standard Emacs-style bindings. If Vi mode interferes with your workflow, -override it in local.fish: +override it in `local.fish`: - # in $__fish_user_dots_path/local.fish + # $__fish_user_dots_path/local.fish fish_default_key_bindings This restores Emacs-style bindings without disabling the rest of C3 @@ -3319,7 +3319,7 @@ overrides): set -U __fish_config_op_overrides off -See Section 7, "C3 — Key and Environment Overrides" for the full list of +See C3 — Key and Environment Overrides for the full list of what C3 controls. ## Minimal Mode / Disabling Opinionated Features @@ -3352,7 +3352,7 @@ Re-enable everything: Or use the interactive TUI: `config-settings`. -See Section 7, "Opinionated Components (Minimal Mode)" for the full +See Opinionated Components (Minimal Mode) for the full component reference tables. --- diff --git a/docs/manual/11-troubleshooting.md b/docs/manual/11-troubleshooting.md index ab5ae70..97e07f0 100644 --- a/docs/manual/11-troubleshooting.md +++ b/docs/manual/11-troubleshooting.md @@ -91,7 +91,7 @@ Re-enable: set -Ue __fish_config_op_logging -See Section 7, "C5 — Logging and Capture" for the full component breakdown. +See [C5 — Logging and Capture](/07-customization/#c5--logging-and-capture) for the full component breakdown. ## Change or Disable the Greeting @@ -112,7 +112,7 @@ testing): set -Ue __fish_config_first_run_complete -See Section 7, "C6 — Greeting and First-Run UI" for details. +See [C6 — Greeting and First-Run UI](/07-customization/#c6--greeting-and-first-run-ui) for details. ## Secrets and Machine-Local Configuration @@ -136,7 +136,7 @@ Disable it with: set -U __fish_user_dots_symlink false -See Section 10, "Personalization" for the full local.fish / secrets.fish +See [Personalization](/10-personalization/) for the full `local.fish` / `secrets.fish` layout. ## Tool Init Does Nothing (Return Sentinel) @@ -144,16 +144,16 @@ layout. Symptom: you ran a tool's setup command (e.g. `starship init fish >> ~/.config/fish/config.fish`) and nothing changed. -Cause: config.fish ends with a `return` guard. Any lines appended after it +Cause: `config.fish` ends with a `return` guard. Any lines appended after it are never executed. -Fix: create a dedicated conf.d file instead of appending to config.fish: +Fix: create a dedicated `conf.d/` file instead of appending to `config.fish`: # ~/.config/fish/conf.d/mytool.fish mytool init fish | source -All existing integrations (starship, zoxide, direnv) already have conf.d/ -files. See Section 9, "Return Sentinel" for background. +All existing integrations (starship, zoxide, direnv) already have `conf.d/` +files. See [Return Sentinel](/09-installation/#return-sentinel) for background. ## Missing Dependencies @@ -176,16 +176,16 @@ Or install everything missing and update what is installed: fish-deps sync -See Section 6, "Dependency Catalog" for the full list grouped by tier +See [Dependency Catalog](/06-dependency-catalog/) for the full list grouped by tier (required, integrations, recommended). ## Vi Mode Keybindings This config enables Vi mode by default (via C3 overrides), replacing the standard Emacs-style bindings. If Vi mode interferes with your workflow, -override it in local.fish: +override it in `local.fish`: - # in $__fish_user_dots_path/local.fish + # $__fish_user_dots_path/local.fish fish_default_key_bindings This restores Emacs-style bindings without disabling the rest of C3 @@ -196,7 +196,7 @@ overrides): set -U __fish_config_op_overrides off -See Section 7, "C3 — Key and Environment Overrides" for the full list of +See [C3 — Key and Environment Overrides](/07-customization/#c3--key-and-environment-overrides) for the full list of what C3 controls. ## Minimal Mode / Disabling Opinionated Features @@ -229,7 +229,7 @@ Re-enable everything: Or use the interactive TUI: `config-settings`. -See Section 7, "Opinionated Components (Minimal Mode)" for the full +See [Opinionated Components (Minimal Mode)](/07-customization/#opinionated-components-minimal-mode) for the full component reference tables. --- diff --git a/docs/manual/index.md b/docs/manual/index.md index 32c8daf..9b9fad0 100644 --- a/docs/manual/index.md +++ b/docs/manual/index.md @@ -35,7 +35,7 @@ output, file contents, and secrets printed to the terminal. Nothing leaves your machine, but the files persist locally. - Disable all logging with: `set -U __fish_config_op_logging off` - Prefer a menu? Run the interactive picker: `config-settings` -- See Section 7 (C5 - Logging and Capture) for the full breakdown. +- See [C5 — Logging and Capture](/07-customization/#c5--logging-and-capture) for the full breakdown. The configuration uses a structured file tree: