docs/fish-config.md — curated terminal-optimized manual covering every public function, all keybindings, all abbreviations, configuration variables, the dependency catalog, and the customization guide. Written specifically for terminal readability: no GitHub callouts, no hyperlinks, clean plain-text prose with fenced code examples. Pandoc-compatible YAML front matter so the same file compiles directly to a groff man page.
docs/fish-config.index — keyword-to-heading map with 100+ aliases (keybindings, abbr, git, fzf, fish-deps, etc.). config_help does an index lookup first, then falls back to a normalized heading scan (strips non-alphanumeric chars, lowercases both sides) for unknown terms. Line numbers are resolved at runtime via grep -F so the index only needs updating when a heading is renamed, not when surrounding content changes.
functions/config_help.fish — viewer with a full fallback chain: ov (syntax highlight + section navigation) → bat (syntax highlight, paging) → man -l (pre-compiled man page) → less → cat. Accepts an optional keyword argument to jump directly to the first matching section heading (config_help keybindings, config_help pkg, etc.). A persistent navigation hint is pinned at the top of the ov screen via --header 1. Pass --help or -h for full usage and key reference.
.gitea/workflows/man-page.yml — automatically compiles docs/fish-config.md → docs/fish-config.1 via pandoc on every push to main that touches the source doc, commits the result back to the repo.
.gitea/workflows/docs-drift.yml — opens a reminder issue whenever README.md changes on main without a corresponding change to docs/fish-config.md in the same push.
README.md — adds an "Offline Documentation" subsection documenting config_help and its fallback chain.
AGENTS.md — adds Convention 10 requiring the offline doc to be updated alongside any function, keybinding, abbreviation, or config change. Also documents the CI workflows.
ov Navigation Keys
Key
Action
Space
next section
^
previous section
Alt+u
toggle section list sidebar
/
search forward
n / N
next / previous search match
g
go to line number
q
quit
Manual Verification
Run config_help — confirm it opens in ov with syntax highlighting, a dim nav hint pinned at the top, and the section sidebar populated (press Alt+u)
Run config_help keybindings — confirm ov opens at the Key Bindings section (# 3. KEY BINDINGS) rather than the top of the file
Run config_help pkg — confirm it jumps to the pkg function entry
Run config_help fish-deps — confirm it jumps to the fish-deps entry
Press Space and ^ to navigate forward and backward through sections; confirm the section header pins correctly below the nav hint
Run config_help --help — confirm the usage, examples, navigation key reference, and fallback chain all print correctly
Temporarily alias ov to a nonexistent command and run config_help — confirm fallback to bat with a paged Markdown view
Check that docs/fish-config.md renders cleanly: bat --language=markdown docs/fish-config.md | head -60
After merge to main, confirm the man-page.yml workflow runs and commits docs/fish-config.1, then verify man -l ~/.config/fish/docs/fish-config.1 displays the man page
## Summary
- **`docs/fish-config.md`** — curated terminal-optimized manual covering every public function, all keybindings, all abbreviations, configuration variables, the dependency catalog, and the customization guide. Written specifically for terminal readability: no GitHub callouts, no hyperlinks, clean plain-text prose with fenced code examples. Pandoc-compatible YAML front matter so the same file compiles directly to a groff man page.
- **`docs/fish-config.index`** — keyword-to-heading map with 100+ aliases (`keybindings`, `abbr`, `git`, `fzf`, `fish-deps`, etc.). `config_help` does an index lookup first, then falls back to a normalized heading scan (strips non-alphanumeric chars, lowercases both sides) for unknown terms. Line numbers are resolved at runtime via `grep -F` so the index only needs updating when a heading is renamed, not when surrounding content changes.
- **`functions/config_help.fish`** — viewer with a full fallback chain: `ov` (syntax highlight + section navigation) → `bat` (syntax highlight, paging) → `man -l` (pre-compiled man page) → `less` → `cat`. Accepts an optional keyword argument to jump directly to the first matching section heading (`config_help keybindings`, `config_help pkg`, etc.). A persistent navigation hint is pinned at the top of the ov screen via `--header 1`. Pass `--help` or `-h` for full usage and key reference.
- **`.gitea/workflows/man-page.yml`** — automatically compiles `docs/fish-config.md` → `docs/fish-config.1` via pandoc on every push to `main` that touches the source doc, commits the result back to the repo.
- **`.gitea/workflows/docs-drift.yml`** — opens a reminder issue whenever `README.md` changes on `main` without a corresponding change to `docs/fish-config.md` in the same push.
- **`README.md`** — adds an "Offline Documentation" subsection documenting `config_help` and its fallback chain.
- **`AGENTS.md`** — adds Convention 10 requiring the offline doc to be updated alongside any function, keybinding, abbreviation, or config change. Also documents the CI workflows.
## ov Navigation Keys
| Key | Action |
|-----|--------|
| `Space` | next section |
| `^` | previous section |
| `Alt+u` | toggle section list sidebar |
| `/` | search forward |
| `n` / `N` | next / previous search match |
| `g` | go to line number |
| `q` | quit |
## Manual Verification
- [x] Run `config_help` — confirm it opens in ov with syntax highlighting, a dim nav hint pinned at the top, and the section sidebar populated (press `Alt+u`)
- [x] Run `config_help keybindings` — confirm ov opens at the Key Bindings section (`# 3. KEY BINDINGS`) rather than the top of the file
- [x] Run `config_help pkg` — confirm it jumps to the `pkg` function entry
- [x] Run `config_help fish-deps` — confirm it jumps to the `fish-deps` entry
- [x] Press `Space` and `^` to navigate forward and backward through sections; confirm the section header pins correctly below the nav hint
- [x] Run `config_help --help` — confirm the usage, examples, navigation key reference, and fallback chain all print correctly
- [x] Temporarily alias ov to a nonexistent command and run `config_help` — confirm fallback to bat with a paged Markdown view
- [x] Check that `docs/fish-config.md` renders cleanly: `bat --language=markdown docs/fish-config.md | head -60`
- [x] After merge to `main`, confirm the `man-page.yml` workflow runs and commits `docs/fish-config.1`, then verify `man -l ~/.config/fish/docs/fish-config.1` displays the man page
- docs/fish-config.md: curated terminal-optimized manual covering all
public functions, keybindings, abbreviations, configuration variables,
dependency catalog, and customization guide. Written for ov/bat/less
readability rather than browser rendering — no callouts, no hyperlinks.
Pandoc-compatible YAML front matter for man page compilation.
- functions/config_help.fish: viewer function with fallback chain
ov -> bat -> man -l -> less -> cat. Accepts an optional section
keyword to jump directly to the first matching heading.
- .gitea/workflows/man-page.yml: compiles docs/fish-config.md to
docs/fish-config.1 via pandoc on every push to main that touches the
source doc, then commits the result automatically.
- .gitea/workflows/docs-drift.yml: opens a reminder issue whenever
README.md changes without a corresponding docs/fish-config.md update
in the same push.
- README.md: documents config_help and the offline manual.
- AGENTS.md: adds Convention 10 requiring offline doc to be updated
alongside any function, keybinding, or config change.
- Add docs/fish-config.index mapping 100+ keyword aliases to exact heading
text; config_help looks up here first, falls back to normalized heading
scan (strips non-alphanumeric, lowercases both sides) for unknown terms.
- Resolve line numbers at runtime with grep -F so the index never goes
stale from doc edits — only heading renames require an update.
- Fix section jump: --section-header pins delimiter lines as sticky headers
removing them from ov pattern-search scope. Replace --pattern with
tail -n +$start_line piped before ov; the target section is the first
line so no search is needed and forward section nav still works.
- Fix empty sections sidebar: ov matches --section-delimiter against
logical (ANSI-stripped) text, so "^#" is correct for bat-colored output;
the previous ANSI escape-sequence regex never matched anything.
- config_help --help / -h prints full usage, section keyword examples,
ov navigation key reference, and the pager fallback chain.
- Prepend a dim nav hint line to the ov input stream and pin it with
--header 1 so "Space=next section ^=prev Alt+u=sections /=search
q=quit" is always visible at the top of the screen.
Section headers in bold blue, argument/flag names in yellow, command
examples in green, navigation keys in cyan, fallback chain numbers
dimmed. All reset to normal after each colored span.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
docs/fish-config.md— curated terminal-optimized manual covering every public function, all keybindings, all abbreviations, configuration variables, the dependency catalog, and the customization guide. Written specifically for terminal readability: no GitHub callouts, no hyperlinks, clean plain-text prose with fenced code examples. Pandoc-compatible YAML front matter so the same file compiles directly to a groff man page.docs/fish-config.index— keyword-to-heading map with 100+ aliases (keybindings,abbr,git,fzf,fish-deps, etc.).config_helpdoes an index lookup first, then falls back to a normalized heading scan (strips non-alphanumeric chars, lowercases both sides) for unknown terms. Line numbers are resolved at runtime viagrep -Fso the index only needs updating when a heading is renamed, not when surrounding content changes.functions/config_help.fish— viewer with a full fallback chain:ov(syntax highlight + section navigation) →bat(syntax highlight, paging) →man -l(pre-compiled man page) →less→cat. Accepts an optional keyword argument to jump directly to the first matching section heading (config_help keybindings,config_help pkg, etc.). A persistent navigation hint is pinned at the top of the ov screen via--header 1. Pass--helpor-hfor full usage and key reference..gitea/workflows/man-page.yml— automatically compilesdocs/fish-config.md→docs/fish-config.1via pandoc on every push tomainthat touches the source doc, commits the result back to the repo..gitea/workflows/docs-drift.yml— opens a reminder issue wheneverREADME.mdchanges onmainwithout a corresponding change todocs/fish-config.mdin the same push.README.md— adds an "Offline Documentation" subsection documentingconfig_helpand its fallback chain.AGENTS.md— adds Convention 10 requiring the offline doc to be updated alongside any function, keybinding, abbreviation, or config change. Also documents the CI workflows.ov Navigation Keys
Space^Alt+u/n/NgqManual Verification
config_help— confirm it opens in ov with syntax highlighting, a dim nav hint pinned at the top, and the section sidebar populated (pressAlt+u)config_help keybindings— confirm ov opens at the Key Bindings section (# 3. KEY BINDINGS) rather than the top of the fileconfig_help pkg— confirm it jumps to thepkgfunction entryconfig_help fish-deps— confirm it jumps to thefish-depsentrySpaceand^to navigate forward and backward through sections; confirm the section header pins correctly below the nav hintconfig_help --help— confirm the usage, examples, navigation key reference, and fallback chain all print correctlyconfig_help— confirm fallback to bat with a paged Markdown viewdocs/fish-config.mdrenders cleanly:bat --language=markdown docs/fish-config.md | head -60main, confirm theman-page.ymlworkflow runs and commitsdocs/fish-config.1, then verifyman -l ~/.config/fish/docs/fish-config.1displays the man paged21d685090to368b714a98a4e0c04de4toba92267a80