chore(docs): regenerate man page, HTML docs, and wiki

This commit is contained in:
Gitea Actions
2026-06-08 21:09:54 +00:00
parent 2f199066f8
commit 8ad10c41d7
14 changed files with 1605 additions and 52 deletions
+326 -13
View File
@@ -69,13 +69,31 @@ The configuration is split across:
.IP
.nf
\f[C]
config.fish Main entry point; sets env vars and PATH
conf.d/ Auto-sourced fragments: keybindings, abbreviations,
theme, starship, zoxide, wakatime
functions/ One function per file, autoloaded by Fish
completions/ Tab completion scripts
integrations/ FZF Catppuccin theme and bindings
docs/ This offline documentation and compiled man page
config.fish Main entry point; sets env vars and PATH
conf.d/
abbr.fish All abbreviations
cheat.fish cheat.sh completions
done.fish Desktop notifications for long commands
first_run.fish One-time init: Fisher bootstrap, theme, welcome
key_bindings.fish Custom key bindings and Vi mode
paru-wrapper.fish Auto-generates \[ti]/.local/bin/paru logging wrapper
starship.fish fish_prompt with OSC 133 shell-integration markers
tailscale.fish Tailscale CLI tab completions
theme.fish Catppuccin syntax highlight colors
tricks.fish PATH, bang-bang helpers, bat man pages, aliases
wakatime.fish WakaTime shell hook
yay-wrapper.fish Auto-generates \[ti]/.local/bin/yay logging wrapper
zoxide.fish Zoxide z/zi integration; overrides cd
functions/ Custom functions, one per file, autoloaded
completions/ Tab completion scripts
integrations/
fzf.fish FZF Catppuccin theme and key binding config
docs/ Offline documentation and compiled man page
fish-config.md Primary source manual (terminal-readable)
fish-config.1 Compiled man page (auto-generated by CI)
fish-config.index Section index for help config navigation
html/ Chunked HTML docs (auto-generated by CI)
wiki/ Markdown wiki (auto-generated by CI)
\f[R]
.fi
.PP
@@ -98,6 +116,7 @@ docs/ This offline documentation and compiled man page
4.8 AI Assistants
4.9 History Expansion
4.10 Miscellaneous
4.11 Shell Aliases
5. Functions Reference
5.1 File and Directory
5.2 Navigation
@@ -116,7 +135,9 @@ docs/ This offline documentation and compiled man page
6. Dependency Catalog
7. Customization
8. Fisher Plugins
9. Viewing This Manual
9. Installation
10. Personalization
11. Viewing This Manual
\f[R]
.fi
.PP
@@ -185,6 +206,88 @@ CLAUDE_CODE_NO_FLICKER 1 \[em] suppress terminal flicker in Claude Code
CDPATH . \[ti]/projects \[ti]
\f[R]
.fi
.SS Pager Hierarchy
.PP
$PAGER is set to ov when available, falling back to less.
The less wrapper function extends this into a full chain so anything
that calls less directly also benefits:
.IP
.nf
\f[C]
$PAGER → ov → less → more → cat
\f[R]
.fi
.PP
When bat is installed, man pages are rendered with syntax highlighting:
.IP
.nf
\f[C]
MANROFFOPT -c
MANPAGER sh -c \[aq]col -bx | bat -l man -p\[aq]
\f[R]
.fi
.SS Integrations
.SS Zoxide
.PP
cd, z, and cdi/zi are all mapped to zoxide-backed navigation.
Tab completions for cd and z blend standard directory entries (CWD and
CDPATH) with frecency results so both familiar and frequently-visited
paths appear in one list.
.SS DirEnv
.PP
Automatically loads .envrc files on directory change.
Takes priority over the auto-venv logic \[em] if a directory is managed
by direnv, the auto-venv activation is skipped entirely.
.SS Auto Python Venv
.PP
When entering a directory that contains a .venv/, 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 FISH_WAKATIME_DISABLED=1 to disable without removing the plugin.
.SS Tailscale
.PP
Full tab completion for the tailscale CLI is provided via
conf.d/tailscale.fish.
.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:
.IP
.nf
\f[C]
__done_min_cmd_duration 10000 ms
__done_notification_urgency_level low
\f[R]
.fi
.SS Scrollback History
.PP
When running inside Kitty, closing a shell session via exit saves a
timestamped scrollback snapshot to SCROLLBACK_HISTORY_DIR.
Files are named:
.IP
.nf
\f[C]
scrollback_YYYY-MM-DD_HH-MM-SS.log
\f[R]
.fi
.PP
The paru and yay wrappers (auto-generated in \[ti]/.local/bin/) tee all
output to:
.IP
.nf
\f[C]
paru_YYYY-MM-DD_HH-MM-SS.log
yay_YYYY-MM-DD_HH-MM-SS.log
\f[R]
.fi
.PP
Before pruning, _scrollback_prune_junk silently removes empty files,
files with only a single meaningful line (e.g.\ bare [exited] captures),
and Kitty tab-rename prompt captures.
Use exit \[en]no-log (or exit -n) to skip capture.
.PP
* * * * *
.SH 2. PATH SETUP
@@ -251,13 +354,16 @@ Ctrl+Enter Smart execute: runs commands instantly without
at the cursor position.
\f[R]
.fi
.SS FZF Bindings (from fzf \[en]fish integration)
.SS FZF Bindings (from PatrickF1/fzf.fish)
.IP
.nf
\f[C]
Ctrl+R Search shell history with fzf
Ctrl+T Insert a file path from fzf
Alt+C cd into a directory chosen with fzf
Ctrl+R Search command history
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
.PP
@@ -442,6 +548,63 @@ bsh bd show
lb lazybeads
\f[R]
.fi
.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]
\&.. cd ..
\&... cd ../..
\&.... cd ../../..
\&..... cd ../../../..
\&...... cd ../../../../..
\f[R]
.fi
.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
.SS Safety Wrappers
.PP
Add -i (interactive confirmation) to destructive commands:
.IP
.nf
\f[C]
cp cp -i
mv mv -i
\f[R]
.fi
.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
tb nc termbin.com 9999 Pipe content to termbin.com for quick sharing
\f[R]
.fi
.SS System Logs
.IP
.nf
\f[C]
jctl journalctl -p 3 -xb Show priority-3 (error) journal entries
from the current boot
\f[R]
.fi
.PP
* * * * *
.SH 5. FUNCTIONS REFERENCE
@@ -1600,6 +1763,48 @@ Some settings (fzf colors, theme) are stored in fish_variables via
\f[V]set -U\f[R].
These are machine-local and git-ignored.
Do not commit fish_variables.
.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
conf.d/starship.fish defines a fish_prompt wrapper that only activates
when starship is in PATH.
It emits OSC 133;A (prompt start) immediately before Starship renders
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
automatically.
.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]
Background: #1E1E2E (base) #313244 (surface0)
Foreground: #CDD6F4 (text)
Highlights: #F38BA8 (red) #CBA6F7 (mauve) #B4BEFE (lavender)
\f[R]
.fi
.PP
To customize, override FZF_DEFAULT_OPTS in local.fish.
.SS Catppuccin Mocha Syntax Highlighting
.PP
The catppuccin/fish plugin applies syntax highlight colors on first run.
Colors are stored in fish_variables (universal).
To switch variants, install a different theme from the themes/
directory:
.IP
.nf
\f[C]
fish_config theme save \[dq]Catppuccin Latte\[dq]
\f[R]
.fi
.PP
* * * * *
.SH 8. FISHER PLUGINS
@@ -1639,7 +1844,115 @@ Run \f[V]fisher update\f[R] to update all plugins, or
\f[V]fish-deps update\f[R] which calls fisher update as its first step.
.PP
* * * * *
.SH 9. VIEWING THIS MANUAL
.SH 9. INSTALLATION
.PP
This configuration is managed as a git repository.
To deploy on a new machine:
.IP
.nf
\f[C]
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
.PP
Then open a new Fish shell.
Fisher and all plugins install automatically on first launch and the
Catppuccin Mocha theme is applied.
.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.)
will have no effect.
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 conf.d/.fish 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
.PP
The remote URL (https://git.rootiest.dev/rootiest/fish-config.git) is
hard-coded, so this works on a fresh clone with no origin configured.
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
version control in a private directory at
\[ti]/.config/.user-dots/fish/.
Two files are sourced automatically by config.fish if they exist:
.IP
.nf
\f[C]
\[ti]/.config/.user-dots/fish/
├── secrets.fish API keys, tokens, passwords, personal identifiers
└── local.fish Machine-specific paths and environment variables
\f[R]
.fi
.PP
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]
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
.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]
# CDPATH \[em] directories searched by cd
set -gx CDPATH . /home/youruser/projects /home/youruser
# Path to your shared .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]
# 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
.PP
Both files are sourced at the end of config.fish with an existence check
so the public config works cleanly on any machine without the private
repo.
.PP
* * * * *
.SH 11. VIEWING THIS MANUAL
.SS With ov (recommended)
.IP
.nf
+1 -1
View File
@@ -503,7 +503,7 @@ zoxide Smart cd with frecency
direnv Per-directory environment loading
paru AUR helper (Arch only; preferred)
yay AUR helper (Arch only; fallback)</code></pre>
<h2 data-number="10.2" id="integrations">Integrations</h2>
<h2 data-number="10.2" id="integrations-1">Integrations</h2>
<pre><code>wakatime Developer time tracking
tailscale Mesh VPN client</code></pre>
<h2 data-number="10.3" id="recommended">Recommended</h2>
+25
View File
@@ -515,6 +515,31 @@ Variables</h2>
<p>Some settings (fzf colors, theme) are stored in fish_variables via
<code>set -U</code>. These are machine-local and git-ignored. Do not
commit fish_variables.</p>
<h2 data-number="11.5" id="prompt-and-theme">Prompt and Theme</h2>
<h3 data-number="11.5.1" id="starship">Starship</h3>
<p>The primary prompt is Starship, initialized by conf.d/starship.fish.
Configure it via ~/.config/starship.toml.</p>
<p>conf.d/starship.fish defines a fish_prompt wrapper that only
activates when starship is in PATH. It emits OSC 133;A (prompt start)
immediately before Starship renders 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's built-in prompt handles these markers
automatically.</p>
<h3 data-number="11.5.2" id="fzf">FZF</h3>
<p>FZF is themed to Catppuccin Mocha via FZF_DEFAULT_OPTS set in
integrations/fzf.fish. The colors applied:</p>
<pre><code>Background: #1E1E2E (base) #313244 (surface0)
Foreground: #CDD6F4 (text)
Highlights: #F38BA8 (red) #CBA6F7 (mauve) #B4BEFE (lavender)</code></pre>
<p>To customize, override FZF_DEFAULT_OPTS in local.fish.</p>
<h3 data-number="11.5.3"
id="catppuccin-mocha-syntax-highlighting">Catppuccin Mocha Syntax
Highlighting</h3>
<p>The catppuccin/fish plugin applies syntax highlight colors on first
run. Colors are stored in fish_variables (universal). To switch
variants, install a different theme from the themes/ directory:</p>
<pre><code>fish_config theme save &quot;Catppuccin Latte&quot;</code></pre>
<hr />
</body>
</html>
+1 -1
View File
@@ -481,7 +481,7 @@
</div>
<div class="sitenav">
<span class="navlink">
<span class="navlink-label">Next:</span> <a href="13-9-viewing-this-manual.html" accesskey="n" rel="next">9. VIEWING THIS MANUAL</a>
<span class="navlink-label">Next:</span> <a href="13-9-installation.html" accesskey="n" rel="next">9. INSTALLATION</a>
</span>
<span class="navlink">
<span class="navlink-label">Previous:</span> <a href="11-7-customization.html" accesskey="p" rel="previous">7. CUSTOMIZATION</a>
+520
View File
@@ -0,0 +1,520 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Rootiest" />
<title>9. INSTALLATION</title>
<style>
div.sitenav { display: flex; flex-direction: row; flex-wrap: wrap; }
span.navlink { flex: 1; }
span.navlink-label { display: inline-block; min-width: 4em; }
html {
color: #1a1a1a;
background-color: #fdfdfd;
}
body {
margin: 0 auto;
max-width: 36em;
padding-left: 50px;
padding-right: 50px;
padding-top: 50px;
padding-bottom: 50px;
hyphens: auto;
overflow-wrap: break-word;
text-rendering: optimizeLegibility;
font-kerning: normal;
}
@media (max-width: 600px) {
body {
font-size: 0.9em;
padding: 12px;
}
h1 {
font-size: 1.8em;
}
}
@media print {
html {
background-color: white;
}
body {
background-color: transparent;
color: black;
font-size: 12pt;
}
p, h2, h3 {
orphans: 3;
widows: 3;
}
h2, h3, h4 {
page-break-after: avoid;
}
}
p {
margin: 1em 0;
}
a {
color: #1a1a1a;
}
a:visited {
color: #1a1a1a;
}
img {
max-width: 100%;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 1.4em;
}
h5, h6 {
font-size: 1em;
font-style: italic;
}
h6 {
font-weight: normal;
}
ol, ul {
padding-left: 1.7em;
margin-top: 1em;
}
li > ol, li > ul {
margin-top: 0;
}
blockquote {
margin: 1em 0 1em 1.7em;
padding-left: 1em;
border-left: 2px solid #e6e6e6;
color: #606060;
}
code {
font-family: Menlo, Monaco, Consolas, 'Lucida Console', monospace;
font-size: 85%;
margin: 0;
hyphens: manual;
}
pre {
margin: 1em 0;
overflow: auto;
}
pre code {
padding: 0;
overflow: visible;
overflow-wrap: normal;
}
.sourceCode {
background-color: transparent;
overflow: visible;
}
hr {
background-color: #1a1a1a;
border: none;
height: 1px;
margin: 1em 0;
}
table {
margin: 1em 0;
border-collapse: collapse;
width: 100%;
overflow-x: auto;
display: block;
font-variant-numeric: lining-nums tabular-nums;
}
table caption {
margin-bottom: 0.75em;
}
tbody {
margin-top: 0.5em;
border-top: 1px solid #1a1a1a;
border-bottom: 1px solid #1a1a1a;
}
th {
border-top: 1px solid #1a1a1a;
padding: 0.25em 0.5em 0.25em 0.5em;
}
td {
padding: 0.125em 0.5em 0.25em 0.5em;
}
header {
margin-bottom: 4em;
text-align: center;
}
#TOC li {
list-style: none;
}
#TOC ul {
padding-left: 1.3em;
}
#TOC > ul {
padding-left: 0;
}
#TOC a:not(:hover) {
text-decoration: none;
}
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<style>
/* ── Catppuccin Latte (light) / Mocha (dark) ─────────────────── */
:root {
color-scheme: light dark;
--bg: #eff1f5;
--surface: #e6e9ef;
--overlay: #ccd0da;
--text: #4c4f69;
--sub1: #6c6f85;
--sub0: #8c8fa1;
--blue: #1e66f5;
--lavender: #7287fd;
--sapphire: #209fb5;
--green: #40a02b;
--yellow: #df8e1d;
--peach: #fe640b;
--mauve: #8839ef;
--code-bg: #dce0e8;
--border: #bcc0cc;
--glow1: rgba(30, 102, 245, 0.05);
--glow2: rgba(136, 57, 239, 0.04);
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #1e1e2e;
--surface: #313244;
--overlay: #45475a;
--text: #cdd6f4;
--sub1: #bac2de;
--sub0: #a6adc8;
--blue: #89b4fa;
--lavender: #b4befe;
--sapphire: #74c7ec;
--green: #a6e3a1;
--yellow: #f9e2af;
--peach: #fab387;
--mauve: #cba6f7;
--code-bg: #181825;
--border: #45475a;
--glow1: rgba(137, 180, 250, 0.06);
--glow2: rgba(203, 166, 247, 0.05);
}
}
*, *::before, *::after { box-sizing: border-box; }
html {
background-color: var(--bg);
background-image:
radial-gradient(ellipse 55% 40% at 10% 5%, var(--glow1) 0%, transparent 100%),
radial-gradient(ellipse 45% 45% at 90% 95%, var(--glow2) 0%, transparent 100%);
min-height: 100%;
}
body {
color: var(--text);
font-family: system-ui, -apple-system, "Segoe UI", Helvetica, sans-serif;
font-size: 16px;
line-height: 1.75;
max-width: 880px;
margin: 0 auto;
padding: 2rem 2.5rem 5rem;
min-height: 100vh;
}
/* ── Links ─────────────────────────────────────────────────── */
a { color: var(--blue); text-decoration: none; }
a:hover { color: var(--lavender); text-decoration: underline; }
a:visited { color: var(--lavender); }
/* ── Headings ──────────────────────────────────────────────── */
h1, h2, h3, h4, h5, h6 {
font-family: "JetBrains Mono", "Fira Code", ui-monospace, monospace;
color: var(--lavender);
line-height: 1.3;
margin-top: 2em;
margin-bottom: 0.5em;
}
h1 {
font-size: 1.9rem;
color: var(--text);
border-bottom: 1px solid var(--border);
padding-bottom: 0.4em;
margin-top: 1.2em;
}
h2 {
font-size: 1.35rem;
border-bottom: 1px solid var(--border);
padding-bottom: 0.2em;
}
h3 { font-size: 1.1rem; color: var(--sapphire); }
h4 { font-size: 0.95rem; color: var(--sub1); }
p { margin: 0.8em 0; }
/* ── Title block (pandoc-generated cover) ──────────────────── */
#title-block-header {
text-align: center;
padding: 2.5rem 0 2rem;
margin-bottom: 1.5rem;
border-bottom: 1px solid var(--border);
}
#title-block-header .title {
font-family: "JetBrains Mono", "Fira Code", ui-monospace, monospace;
font-size: 2.6rem;
letter-spacing: 0.12em;
color: var(--lavender);
border: none;
margin: 0 0 0.75rem;
}
#title-block-header .author,
#title-block-header .date {
color: var(--sub0);
font-size: 0.875rem;
margin: 0.2rem 0;
}
/* ── Inline code ───────────────────────────────────────────── */
code {
font-family: "JetBrains Mono", "Fira Code", ui-monospace, monospace;
background: var(--code-bg);
color: var(--peach);
padding: 0.15em 0.4em;
border-radius: 4px;
font-size: 0.875em;
}
/* ── Code blocks ───────────────────────────────────────────── */
pre {
background: var(--code-bg);
border: 1px solid var(--border);
border-left: 3px solid var(--sapphire);
border-radius: 0 8px 8px 0;
padding: 1.1em 1.4em;
overflow-x: auto;
line-height: 1.55;
margin: 1.2em 0;
}
pre code {
background: none;
color: var(--text);
padding: 0;
font-size: 0.88em;
}
/* ── Blockquotes ───────────────────────────────────────────── */
blockquote {
border-left: 3px solid var(--yellow);
margin: 1.5em 0;
padding: 0.75em 1.25em;
background: var(--surface);
color: var(--sub1);
border-radius: 0 6px 6px 0;
}
blockquote p { margin: 0.3em 0; }
/* ── Tables ────────────────────────────────────────────────── */
table {
border-collapse: collapse;
width: 100%;
margin: 1.4em 0;
font-size: 0.93em;
}
th, td {
border: 1px solid var(--border);
padding: 0.55em 0.9em;
text-align: left;
}
th {
background: var(--surface);
color: var(--lavender);
font-weight: 600;
font-family: "JetBrains Mono", "Fira Code", ui-monospace, monospace;
font-size: 0.82em;
letter-spacing: 0.06em;
text-transform: uppercase;
}
tr:nth-child(even) { background: var(--surface); }
tr:hover { background: var(--overlay); }
/* ── HR ────────────────────────────────────────────────────── */
hr { border: none; border-top: 1px solid var(--border); margin: 2.5em 0; }
/* ── Lists ─────────────────────────────────────────────────── */
ul, ol { padding-left: 1.6em; }
li { margin: 0.35em 0; }
/* ── Chunk navigation bar (prev / up / next) ───────────────── */
nav:not(#TOC):not([role="doc-toc"]) {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 8px;
margin: 1.5em 0;
font-size: 0.875em;
overflow: hidden;
}
nav:not(#TOC):not([role="doc-toc"]) p {
margin: 0;
padding: 0.65em 1.2em;
display: flex;
gap: 0.4em 1.75em;
flex-wrap: wrap;
align-items: center;
}
/* JS wraps each "Label: <a>" pair in .nav-item so they flex as a unit */
.nav-item {
display: inline-flex;
align-items: center;
gap: 0.3em;
white-space: nowrap;
}
.nav-item a { color: var(--blue); }
.nav-item a:hover { color: var(--lavender); }
/* ── Table of contents panel ───────────────────────────────── */
nav#TOC, nav[role="doc-toc"] {
display: block;
background: var(--surface);
border: 1px solid var(--border);
border-left: 3px solid var(--lavender);
border-radius: 0 8px 8px 0;
padding: 1.2em 1.5em;
margin: 1.5em 0;
}
nav#TOC > h2,
nav[role="doc-toc"] > h2 {
font-size: 0.7rem;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--sub0);
border: none;
margin: 0 0 0.9em;
padding: 0;
}
nav#TOC ul, nav[role="doc-toc"] ul {
list-style: none;
padding-left: 1em;
margin: 0.25em 0;
}
nav#TOC > ul, nav[role="doc-toc"] > ul { padding-left: 0; }
nav#TOC li, nav[role="doc-toc"] li {
margin: 0.3em 0;
padding-left: 0.75em;
border-left: 1px solid transparent;
transition: border-color 0.12s;
}
nav#TOC li:hover, nav[role="doc-toc"] li:hover {
border-left-color: var(--lavender);
}
nav#TOC a, nav[role="doc-toc"] a {
color: var(--sub1);
font-size: 0.9em;
}
nav#TOC a:hover, nav[role="doc-toc"] a:hover {
color: var(--lavender);
text-decoration: none;
}
</style>
<script>
document.addEventListener('DOMContentLoaded', function () {
/* ── Hide ToC on every page except index.html ───────────── */
var path = location.pathname;
var onIndex = path === '/' || path === '' || /\/index\.html(\?.*)?$/.test(path);
if (!onIndex) {
var toc = document.getElementById('TOC') ||
document.querySelector('[role="doc-toc"]');
if (toc) toc.remove();
}
/* ── Wrap each "Label: <a>" pair in a .nav-item span ───────
Pandoc emits label text nodes and anchors as siblings;
flex sees them as separate items, causing labels to split
from their links when wrapping. Grouping them in a span
keeps each label+link as a single flex unit. */
document.querySelectorAll('nav:not(#TOC):not([role="doc-toc"])').forEach(function (nav) {
var p = nav.querySelector('p');
if (!p) return;
var children = Array.from(p.childNodes);
var pairs = [];
for (var i = 0; i + 1 < children.length; i++) {
var cur = children[i];
var nxt = children[i + 1];
if (cur.nodeType === Node.TEXT_NODE &&
/[A-Z][a-z]*:\s*/.test(cur.textContent) &&
nxt.nodeType === Node.ELEMENT_NODE &&
nxt.tagName === 'A') {
pairs.push([cur, nxt]);
i++; // skip the anchor on the next iteration
}
}
pairs.forEach(function (pair) {
var span = document.createElement('span');
span.className = 'nav-item';
p.insertBefore(span, pair[0]);
span.appendChild(pair[0]);
span.appendChild(pair[1]);
});
});
});
</script>
</head>
<body>
<nav id="sitenav">
<div class="sitenav">
<span class="navlink">
<span class="navlink-label">Up:</span> <a href="index.html" accesskey="u" rel="up">FISH-CONFIG</a>
</span>
<span class="navlink">
<span class="navlink-label">Top:</span> <a href="index.html" accesskey="t" rel="top">FISH-CONFIG</a>
</span>
</div>
<div class="sitenav">
<span class="navlink">
<span class="navlink-label">Next:</span> <a href="14-10-personalization.html" accesskey="n" rel="next">10. PERSONALIZATION</a>
</span>
<span class="navlink">
<span class="navlink-label">Previous:</span> <a href="12-8-fisher-plugins.html" accesskey="p" rel="previous">8. FISHER PLUGINS</a>
</span>
</div>
</nav>
<h1 data-number="13" id="9-installation">9. INSTALLATION</h1>
<p>This configuration is managed as a git repository. To deploy on a new
machine:</p>
<pre><code>mv ~/.config/fish ~/.config/fish.bak # back up any existing config
git clone https://git.rootiest.dev/rootiest/fish-config.git ~/.config/fish</code></pre>
<p>Then open a new Fish shell. Fisher and all plugins install
automatically on first launch and the Catppuccin Mocha theme is
applied.</p>
<h2 data-number="13.1" id="return-sentinel">Return Sentinel</h2>
<p>config.fish ends with a return sentinel guard. Any lines appended
after it by a tool's setup command (starship init fish | source, zoxide
init fish | source, etc.) will have no effect. All integrations are
managed via conf.d/ files.</p>
<p>If a new tool's shell integration appears to do nothing, check
whether its setup command appended an init line below the sentinel and
create a dedicated conf.d/<tool>.fish instead.</p>
<h2 data-number="13.2" id="updating">Updating</h2>
<p>Pull the latest changes from the upstream repository without needing
a configured git remote:</p>
<pre><code>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</code></pre>
<p>The remote URL (<a
href="https://git.rootiest.dev/rootiest/fish-config.git">https://git.rootiest.dev/rootiest/fish-config.git</a>)
is hard-coded, so this works on a fresh clone with no origin configured.
All git output is suppressed. Run exec fish after a successful update to
reload.</p>
<hr />
</body>
</html>
+532
View File
@@ -0,0 +1,532 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Rootiest" />
<title>10. PERSONALIZATION</title>
<style>
div.sitenav { display: flex; flex-direction: row; flex-wrap: wrap; }
span.navlink { flex: 1; }
span.navlink-label { display: inline-block; min-width: 4em; }
html {
color: #1a1a1a;
background-color: #fdfdfd;
}
body {
margin: 0 auto;
max-width: 36em;
padding-left: 50px;
padding-right: 50px;
padding-top: 50px;
padding-bottom: 50px;
hyphens: auto;
overflow-wrap: break-word;
text-rendering: optimizeLegibility;
font-kerning: normal;
}
@media (max-width: 600px) {
body {
font-size: 0.9em;
padding: 12px;
}
h1 {
font-size: 1.8em;
}
}
@media print {
html {
background-color: white;
}
body {
background-color: transparent;
color: black;
font-size: 12pt;
}
p, h2, h3 {
orphans: 3;
widows: 3;
}
h2, h3, h4 {
page-break-after: avoid;
}
}
p {
margin: 1em 0;
}
a {
color: #1a1a1a;
}
a:visited {
color: #1a1a1a;
}
img {
max-width: 100%;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 1.4em;
}
h5, h6 {
font-size: 1em;
font-style: italic;
}
h6 {
font-weight: normal;
}
ol, ul {
padding-left: 1.7em;
margin-top: 1em;
}
li > ol, li > ul {
margin-top: 0;
}
blockquote {
margin: 1em 0 1em 1.7em;
padding-left: 1em;
border-left: 2px solid #e6e6e6;
color: #606060;
}
code {
font-family: Menlo, Monaco, Consolas, 'Lucida Console', monospace;
font-size: 85%;
margin: 0;
hyphens: manual;
}
pre {
margin: 1em 0;
overflow: auto;
}
pre code {
padding: 0;
overflow: visible;
overflow-wrap: normal;
}
.sourceCode {
background-color: transparent;
overflow: visible;
}
hr {
background-color: #1a1a1a;
border: none;
height: 1px;
margin: 1em 0;
}
table {
margin: 1em 0;
border-collapse: collapse;
width: 100%;
overflow-x: auto;
display: block;
font-variant-numeric: lining-nums tabular-nums;
}
table caption {
margin-bottom: 0.75em;
}
tbody {
margin-top: 0.5em;
border-top: 1px solid #1a1a1a;
border-bottom: 1px solid #1a1a1a;
}
th {
border-top: 1px solid #1a1a1a;
padding: 0.25em 0.5em 0.25em 0.5em;
}
td {
padding: 0.125em 0.5em 0.25em 0.5em;
}
header {
margin-bottom: 4em;
text-align: center;
}
#TOC li {
list-style: none;
}
#TOC ul {
padding-left: 1.3em;
}
#TOC > ul {
padding-left: 0;
}
#TOC a:not(:hover) {
text-decoration: none;
}
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<style>
/* ── Catppuccin Latte (light) / Mocha (dark) ─────────────────── */
:root {
color-scheme: light dark;
--bg: #eff1f5;
--surface: #e6e9ef;
--overlay: #ccd0da;
--text: #4c4f69;
--sub1: #6c6f85;
--sub0: #8c8fa1;
--blue: #1e66f5;
--lavender: #7287fd;
--sapphire: #209fb5;
--green: #40a02b;
--yellow: #df8e1d;
--peach: #fe640b;
--mauve: #8839ef;
--code-bg: #dce0e8;
--border: #bcc0cc;
--glow1: rgba(30, 102, 245, 0.05);
--glow2: rgba(136, 57, 239, 0.04);
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #1e1e2e;
--surface: #313244;
--overlay: #45475a;
--text: #cdd6f4;
--sub1: #bac2de;
--sub0: #a6adc8;
--blue: #89b4fa;
--lavender: #b4befe;
--sapphire: #74c7ec;
--green: #a6e3a1;
--yellow: #f9e2af;
--peach: #fab387;
--mauve: #cba6f7;
--code-bg: #181825;
--border: #45475a;
--glow1: rgba(137, 180, 250, 0.06);
--glow2: rgba(203, 166, 247, 0.05);
}
}
*, *::before, *::after { box-sizing: border-box; }
html {
background-color: var(--bg);
background-image:
radial-gradient(ellipse 55% 40% at 10% 5%, var(--glow1) 0%, transparent 100%),
radial-gradient(ellipse 45% 45% at 90% 95%, var(--glow2) 0%, transparent 100%);
min-height: 100%;
}
body {
color: var(--text);
font-family: system-ui, -apple-system, "Segoe UI", Helvetica, sans-serif;
font-size: 16px;
line-height: 1.75;
max-width: 880px;
margin: 0 auto;
padding: 2rem 2.5rem 5rem;
min-height: 100vh;
}
/* ── Links ─────────────────────────────────────────────────── */
a { color: var(--blue); text-decoration: none; }
a:hover { color: var(--lavender); text-decoration: underline; }
a:visited { color: var(--lavender); }
/* ── Headings ──────────────────────────────────────────────── */
h1, h2, h3, h4, h5, h6 {
font-family: "JetBrains Mono", "Fira Code", ui-monospace, monospace;
color: var(--lavender);
line-height: 1.3;
margin-top: 2em;
margin-bottom: 0.5em;
}
h1 {
font-size: 1.9rem;
color: var(--text);
border-bottom: 1px solid var(--border);
padding-bottom: 0.4em;
margin-top: 1.2em;
}
h2 {
font-size: 1.35rem;
border-bottom: 1px solid var(--border);
padding-bottom: 0.2em;
}
h3 { font-size: 1.1rem; color: var(--sapphire); }
h4 { font-size: 0.95rem; color: var(--sub1); }
p { margin: 0.8em 0; }
/* ── Title block (pandoc-generated cover) ──────────────────── */
#title-block-header {
text-align: center;
padding: 2.5rem 0 2rem;
margin-bottom: 1.5rem;
border-bottom: 1px solid var(--border);
}
#title-block-header .title {
font-family: "JetBrains Mono", "Fira Code", ui-monospace, monospace;
font-size: 2.6rem;
letter-spacing: 0.12em;
color: var(--lavender);
border: none;
margin: 0 0 0.75rem;
}
#title-block-header .author,
#title-block-header .date {
color: var(--sub0);
font-size: 0.875rem;
margin: 0.2rem 0;
}
/* ── Inline code ───────────────────────────────────────────── */
code {
font-family: "JetBrains Mono", "Fira Code", ui-monospace, monospace;
background: var(--code-bg);
color: var(--peach);
padding: 0.15em 0.4em;
border-radius: 4px;
font-size: 0.875em;
}
/* ── Code blocks ───────────────────────────────────────────── */
pre {
background: var(--code-bg);
border: 1px solid var(--border);
border-left: 3px solid var(--sapphire);
border-radius: 0 8px 8px 0;
padding: 1.1em 1.4em;
overflow-x: auto;
line-height: 1.55;
margin: 1.2em 0;
}
pre code {
background: none;
color: var(--text);
padding: 0;
font-size: 0.88em;
}
/* ── Blockquotes ───────────────────────────────────────────── */
blockquote {
border-left: 3px solid var(--yellow);
margin: 1.5em 0;
padding: 0.75em 1.25em;
background: var(--surface);
color: var(--sub1);
border-radius: 0 6px 6px 0;
}
blockquote p { margin: 0.3em 0; }
/* ── Tables ────────────────────────────────────────────────── */
table {
border-collapse: collapse;
width: 100%;
margin: 1.4em 0;
font-size: 0.93em;
}
th, td {
border: 1px solid var(--border);
padding: 0.55em 0.9em;
text-align: left;
}
th {
background: var(--surface);
color: var(--lavender);
font-weight: 600;
font-family: "JetBrains Mono", "Fira Code", ui-monospace, monospace;
font-size: 0.82em;
letter-spacing: 0.06em;
text-transform: uppercase;
}
tr:nth-child(even) { background: var(--surface); }
tr:hover { background: var(--overlay); }
/* ── HR ────────────────────────────────────────────────────── */
hr { border: none; border-top: 1px solid var(--border); margin: 2.5em 0; }
/* ── Lists ─────────────────────────────────────────────────── */
ul, ol { padding-left: 1.6em; }
li { margin: 0.35em 0; }
/* ── Chunk navigation bar (prev / up / next) ───────────────── */
nav:not(#TOC):not([role="doc-toc"]) {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 8px;
margin: 1.5em 0;
font-size: 0.875em;
overflow: hidden;
}
nav:not(#TOC):not([role="doc-toc"]) p {
margin: 0;
padding: 0.65em 1.2em;
display: flex;
gap: 0.4em 1.75em;
flex-wrap: wrap;
align-items: center;
}
/* JS wraps each "Label: <a>" pair in .nav-item so they flex as a unit */
.nav-item {
display: inline-flex;
align-items: center;
gap: 0.3em;
white-space: nowrap;
}
.nav-item a { color: var(--blue); }
.nav-item a:hover { color: var(--lavender); }
/* ── Table of contents panel ───────────────────────────────── */
nav#TOC, nav[role="doc-toc"] {
display: block;
background: var(--surface);
border: 1px solid var(--border);
border-left: 3px solid var(--lavender);
border-radius: 0 8px 8px 0;
padding: 1.2em 1.5em;
margin: 1.5em 0;
}
nav#TOC > h2,
nav[role="doc-toc"] > h2 {
font-size: 0.7rem;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--sub0);
border: none;
margin: 0 0 0.9em;
padding: 0;
}
nav#TOC ul, nav[role="doc-toc"] ul {
list-style: none;
padding-left: 1em;
margin: 0.25em 0;
}
nav#TOC > ul, nav[role="doc-toc"] > ul { padding-left: 0; }
nav#TOC li, nav[role="doc-toc"] li {
margin: 0.3em 0;
padding-left: 0.75em;
border-left: 1px solid transparent;
transition: border-color 0.12s;
}
nav#TOC li:hover, nav[role="doc-toc"] li:hover {
border-left-color: var(--lavender);
}
nav#TOC a, nav[role="doc-toc"] a {
color: var(--sub1);
font-size: 0.9em;
}
nav#TOC a:hover, nav[role="doc-toc"] a:hover {
color: var(--lavender);
text-decoration: none;
}
</style>
<script>
document.addEventListener('DOMContentLoaded', function () {
/* ── Hide ToC on every page except index.html ───────────── */
var path = location.pathname;
var onIndex = path === '/' || path === '' || /\/index\.html(\?.*)?$/.test(path);
if (!onIndex) {
var toc = document.getElementById('TOC') ||
document.querySelector('[role="doc-toc"]');
if (toc) toc.remove();
}
/* ── Wrap each "Label: <a>" pair in a .nav-item span ───────
Pandoc emits label text nodes and anchors as siblings;
flex sees them as separate items, causing labels to split
from their links when wrapping. Grouping them in a span
keeps each label+link as a single flex unit. */
document.querySelectorAll('nav:not(#TOC):not([role="doc-toc"])').forEach(function (nav) {
var p = nav.querySelector('p');
if (!p) return;
var children = Array.from(p.childNodes);
var pairs = [];
for (var i = 0; i + 1 < children.length; i++) {
var cur = children[i];
var nxt = children[i + 1];
if (cur.nodeType === Node.TEXT_NODE &&
/[A-Z][a-z]*:\s*/.test(cur.textContent) &&
nxt.nodeType === Node.ELEMENT_NODE &&
nxt.tagName === 'A') {
pairs.push([cur, nxt]);
i++; // skip the anchor on the next iteration
}
}
pairs.forEach(function (pair) {
var span = document.createElement('span');
span.className = 'nav-item';
p.insertBefore(span, pair[0]);
span.appendChild(pair[0]);
span.appendChild(pair[1]);
});
});
});
</script>
</head>
<body>
<nav id="sitenav">
<div class="sitenav">
<span class="navlink">
<span class="navlink-label">Up:</span> <a href="index.html" accesskey="u" rel="up">FISH-CONFIG</a>
</span>
<span class="navlink">
<span class="navlink-label">Top:</span> <a href="index.html" accesskey="t" rel="top">FISH-CONFIG</a>
</span>
</div>
<div class="sitenav">
<span class="navlink">
<span class="navlink-label">Next:</span> <a href="15-11-viewing-this-manual.html" accesskey="n" rel="next">11. VIEWING THIS MANUAL</a>
</span>
<span class="navlink">
<span class="navlink-label">Previous:</span> <a href="13-9-installation.html" accesskey="p" rel="previous">9. INSTALLATION</a>
</span>
</div>
</nav>
<h1 data-number="14" id="10-personalization">10. PERSONALIZATION</h1>
<p>Sensitive credentials and machine-specific settings are kept out of
version control in a private directory at ~/.config/.user-dots/fish/.
Two files are sourced automatically by config.fish if they exist:</p>
<pre><code>~/.config/.user-dots/fish/
├── secrets.fish API keys, tokens, passwords, personal identifiers
└── local.fish Machine-specific paths and environment variables</code></pre>
<p>fish_variables (auto-managed by fish) is excluded from this repo via
.gitignore. Do not commit it.</p>
<h2 data-number="14.1" id="secretsfish">secrets.fish</h2>
<p>Store anything you would not commit to a public repo: API keys, auth
tokens, passwords, and personal identifiers.</p>
<pre><code>set -gx MY_NAME &quot;Your Name&quot;
set -gx MY_EMAIL &quot;you@example.com&quot;
set -gx GPG_RECIPIENT &quot;you@example.com&quot;
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</code></pre>
<h2 data-number="14.2" id="localfish">local.fish</h2>
<p>Store paths and variables specific to one machine — things that would
be wrong on any other system.</p>
<pre><code># CDPATH — directories searched by cd
set -gx CDPATH . /home/youruser/projects /home/youruser
# Path to your shared .gitignore boilerplate
set -gx GITIGNORE_BOILERPLATE ~/.config/git/gitignore_boilerplate
# SSH shortcuts
abbr -a sshr &#39;ssh you@your-server.local&#39;
abbr -a sshw &#39;ssh you@work-server.example.com&#39;
# Docker context shortcuts
abbr -a dcr &#39;docker context use my-remote-server&#39;
abbr -a dcw &#39;docker context use work-server&#39;</code></pre>
<p>Both files are sourced at the end of config.fish with an existence
check so the public config works cleanly on any machine without the
private repo.</p>
<hr />
</body>
</html>
@@ -5,7 +5,7 @@
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Rootiest" />
<title>9. VIEWING THIS MANUAL</title>
<title>11. VIEWING THIS MANUAL</title>
<style>
div.sitenav { display: flex; flex-direction: row; flex-wrap: wrap; }
span.navlink { flex: 1; }
@@ -483,13 +483,13 @@
<span class="navlink">
</span>
<span class="navlink">
<span class="navlink-label">Previous:</span> <a href="12-8-fisher-plugins.html" accesskey="p" rel="previous">8. FISHER PLUGINS</a>
<span class="navlink-label">Previous:</span> <a href="14-10-personalization.html" accesskey="p" rel="previous">10. PERSONALIZATION</a>
</span>
</div>
</nav>
<h1 data-number="13" id="9-viewing-this-manual">9. VIEWING THIS
<h1 data-number="15" id="11-viewing-this-manual">11. VIEWING THIS
MANUAL</h1>
<h2 data-number="13.1" id="with-ov-recommended">With ov
<h2 data-number="15.1" id="with-ov-recommended">With ov
(recommended)</h2>
<pre><code>help config</code></pre>
<p>ov renders the Markdown with syntax highlighting and section-based
@@ -502,9 +502,9 @@ n / N next / previous search match
g go to line number
j interactive jump target (line, %, or &#39;section&#39;)
q quit</code></pre>
<h2 data-number="13.2" id="with-bat">With bat</h2>
<h2 data-number="15.2" id="with-bat">With bat</h2>
<pre><code>bat --language=markdown --paging=always ~/.config/fish/docs/fish-config.md</code></pre>
<h2 data-number="13.3" id="as-a-man-page">As a man page</h2>
<h2 data-number="15.3" id="as-a-man-page">As a man page</h2>
<pre><code>config-help --man</code></pre>
<p>Opens the compiled docs/fish-config.1 directly via man -l, bypassing
the pager fallback chain. The symlink and MANPATH are also configured
@@ -513,7 +513,7 @@ automatically on shell start for the standard invocation:</p>
<p>NOTE: fish-config (hyphen) is this config's man page. fish_config
(underscore) is fish's built-in browser-based configuration tool — a
completely separate command. Do not mix them up.</p>
<h2 data-number="13.4" id="in-the-browser-html">In the browser
<h2 data-number="15.4" id="in-the-browser-html">In the browser
(HTML)</h2>
<pre><code>config-help --html</code></pre>
<p>Opens docs/html/index.html in the default web browser. Browser
@@ -522,13 +522,13 @@ xdg-mime) to find the real browser binary, then falls back through known
browser binaries (firefox, chromium, vivaldi, etc.), and finally
xdg-open as a last resort. Set $fish_help_browser or $BROWSER to
override.</p>
<h2 data-number="13.5" id="as-a-wiki">As a wiki</h2>
<h2 data-number="15.5" id="as-a-wiki">As a wiki</h2>
<p>The generated Markdown wiki lives in docs/wiki/. index.md provides
the project overview and a full table of contents. Each section page has
a navigation bar at the top linking to every other section.</p>
<p>The wiki is auto-generated from this file by the CI pipeline on every
push to main that changes docs/fish-config.md.</p>
<h2 data-number="13.6" id="jumping-to-a-section">Jumping to a
<h2 data-number="15.6" id="jumping-to-a-section">Jumping to a
section</h2>
<pre><code>help config keybindings
help config abbreviations
+25 -7
View File
@@ -504,13 +504,31 @@ exit</li>
<li>Catppuccin Mocha color theme throughout</li>
</ul>
<p>The configuration is split across:</p>
<pre><code>config.fish Main entry point; sets env vars and PATH
conf.d/ Auto-sourced fragments: keybindings, abbreviations,
theme, starship, zoxide, wakatime
functions/ One function per file, autoloaded by Fish
completions/ Tab completion scripts
integrations/ FZF Catppuccin theme and bindings
docs/ This offline documentation and compiled man page</code></pre>
<pre><code>config.fish Main entry point; sets env vars and PATH
conf.d/
abbr.fish All abbreviations
cheat.fish cheat.sh completions
done.fish Desktop notifications for long commands
first_run.fish One-time init: Fisher bootstrap, theme, welcome
key_bindings.fish Custom key bindings and Vi mode
paru-wrapper.fish Auto-generates ~/.local/bin/paru logging wrapper
starship.fish fish_prompt with OSC 133 shell-integration markers
tailscale.fish Tailscale CLI tab completions
theme.fish Catppuccin syntax highlight colors
tricks.fish PATH, bang-bang helpers, bat man pages, aliases
wakatime.fish WakaTime shell hook
yay-wrapper.fish Auto-generates ~/.local/bin/yay logging wrapper
zoxide.fish Zoxide z/zi integration; overrides cd
functions/ Custom functions, one per file, autoloaded
completions/ Tab completion scripts
integrations/
fzf.fish FZF Catppuccin theme and key binding config
docs/ Offline documentation and compiled man page
fish-config.md Primary source manual (terminal-readable)
fish-config.1 Compiled man page (auto-generated by CI)
fish-config.index Section index for help config navigation
html/ Chunked HTML docs (auto-generated by CI)
wiki/ Markdown wiki (auto-generated by CI)</code></pre>
<hr />
</body>
</html>
+4 -1
View File
@@ -503,6 +503,7 @@
4.8 AI Assistants
4.9 History Expansion
4.10 Miscellaneous
4.11 Shell Aliases
5. Functions Reference
5.1 File and Directory
5.2 Navigation
@@ -521,7 +522,9 @@
6. Dependency Catalog
7. Customization
8. Fisher Plugins
9. Viewing This Manual</code></pre>
9. Installation
10. Personalization
11. Viewing This Manual</code></pre>
<hr />
</body>
</html>
@@ -525,6 +525,55 @@ interactively.</p>
<pre><code>GPG_TTY $(tty) — ensures GPG passphrase prompts work
CLAUDE_CODE_NO_FLICKER 1 — suppress terminal flicker in Claude Code
CDPATH . ~/projects ~</code></pre>
<h2 data-number="5.6" id="pager-hierarchy">Pager Hierarchy</h2>
<p>$PAGER is set to ov when available, falling back to less. The less
wrapper function extends this into a full chain so anything that calls
less directly also benefits:</p>
<pre><code>$PAGER → ov → less → more → cat</code></pre>
<p>When bat is installed, man pages are rendered with syntax
highlighting:</p>
<pre><code>MANROFFOPT -c
MANPAGER sh -c &#39;col -bx | bat -l man -p&#39;</code></pre>
<h2 data-number="5.7" id="integrations">Integrations</h2>
<h3 data-number="5.7.1" id="zoxide">Zoxide</h3>
<p>cd, z, and cdi/zi are all mapped to zoxide-backed navigation. Tab
completions for cd and z blend standard directory entries (CWD and
CDPATH) with frecency results so both familiar and frequently-visited
paths appear in one list.</p>
<h3 data-number="5.7.2" id="direnv">DirEnv</h3>
<p>Automatically loads .envrc files on directory change. Takes priority
over the auto-venv logic — if a directory is managed by direnv, the
auto-venv activation is skipped entirely.</p>
<h3 data-number="5.7.3" id="auto-python-venv">Auto Python Venv</h3>
<p>When entering a directory that contains a .venv/, the virtualenv is
activated automatically and deactivated when you leave the project
tree.</p>
<h3 data-number="5.7.4" id="wakatime">WakaTime</h3>
<p>Every shell command is reported to WakaTime for time-tracking. Set
FISH_WAKATIME_DISABLED=1 to disable without removing the plugin.</p>
<h3 data-number="5.7.5" id="tailscale">Tailscale</h3>
<p>Full tab completion for the tailscale CLI is provided via
conf.d/tailscale.fish.</p>
<h3 data-number="5.7.6" id="done-notifications">Done Notifications</h3>
<p>Desktop notifications fire when a command takes longer than 10
seconds and the terminal window is not focused. Configured via fish
universal variables:</p>
<pre><code>__done_min_cmd_duration 10000 ms
__done_notification_urgency_level low</code></pre>
<h3 data-number="5.7.7" id="scrollback-history-1">Scrollback
History</h3>
<p>When running inside Kitty, closing a shell session via exit saves a
timestamped scrollback snapshot to SCROLLBACK_HISTORY_DIR. Files are
named:</p>
<pre><code>scrollback_YYYY-MM-DD_HH-MM-SS.log</code></pre>
<p>The paru and yay wrappers (auto-generated in ~/.local/bin/) tee all
output to:</p>
<pre><code>paru_YYYY-MM-DD_HH-MM-SS.log
yay_YYYY-MM-DD_HH-MM-SS.log</code></pre>
<p>Before pruning, _scrollback_prune_junk silently removes empty files,
files with only a single meaningful line (e.g. bare [exited] captures),
and Kitty tab-rename prompt captures. Use exit --no-log (or exit -n) to
skip capture.</p>
<hr />
</body>
</html>
+8 -5
View File
@@ -524,11 +524,14 @@ Ctrl+Enter Smart execute: runs commands instantly without
@@ FZF inline picker. Type @@ anywhere on the command
line to open an fzf picker and insert a selection
at the cursor position.</code></pre>
<h2 data-number="7.1" id="fzf-bindings-from-fzf---fish-integration">FZF
Bindings (from fzf --fish integration)</h2>
<pre><code>Ctrl+R Search shell history with fzf
Ctrl+T Insert a file path from fzf
Alt+C cd into a directory chosen with fzf</code></pre>
<h2 data-number="7.1" id="fzf-bindings-from-patrickf1fzffish">FZF
Bindings (from PatrickF1/fzf.fish)</h2>
<pre><code>Ctrl+R Search command history
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</code></pre>
<hr />
</body>
</html>
+30
View File
@@ -606,6 +606,36 @@ bs bd sync
bC bd create --title
bsh bd show
lb lazybeads</code></pre>
<h2 data-number="8.11" id="411-shell-aliases">4.11 Shell Aliases</h2>
<p>These aliases are defined in conf.d/tricks.fish via alias (which
creates Fish functions). They are active in all interactive
sessions.</p>
<h3 data-number="8.11.1" id="navigation">Navigation</h3>
<pre><code>.. cd ..
... cd ../..
.... cd ../../..
..... cd ../../../..
...... cd ../../../../..</code></pre>
<h3 data-number="8.11.2" id="color-overrides">Color Overrides</h3>
<p>Force color output for common tools:</p>
<pre><code>grep grep --color=auto
fgrep fgrep --color=auto
egrep egrep --color=auto
dir dir --color=auto
vdir vdir --color=auto</code></pre>
<h3 data-number="8.11.3" id="safety-wrappers">Safety Wrappers</h3>
<p>Add -i (interactive confirmation) to destructive commands:</p>
<pre><code>cp cp -i
mv mv -i</code></pre>
<h3 data-number="8.11.4" id="archives-and-networking">Archives and
Networking</h3>
<pre><code>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</code></pre>
<h3 data-number="8.11.5" id="system-logs">System Logs</h3>
<pre><code>jctl journalctl -p 3 -xb Show priority-3 (error) journal entries
from the current boot</code></pre>
<hr />
</body>
</html>
+74 -14
View File
@@ -513,16 +513,35 @@ id="toc-editor-and-pager">Editor and Pager</a></li>
id="toc-scrollback-history">Scrollback History</a></li>
<li><a href="5-1-configuration-variables.html#other"
id="toc-other">Other</a></li>
<li><a href="5-1-configuration-variables.html#pager-hierarchy"
id="toc-pager-hierarchy">Pager Hierarchy</a></li>
<li><a href="5-1-configuration-variables.html#integrations"
id="toc-integrations">Integrations</a>
<ul>
<li><a href="5-1-configuration-variables.html#zoxide"
id="toc-zoxide">Zoxide</a></li>
<li><a href="5-1-configuration-variables.html#direnv"
id="toc-direnv">DirEnv</a></li>
<li><a href="5-1-configuration-variables.html#auto-python-venv"
id="toc-auto-python-venv">Auto Python Venv</a></li>
<li><a href="5-1-configuration-variables.html#wakatime"
id="toc-wakatime">WakaTime</a></li>
<li><a href="5-1-configuration-variables.html#tailscale"
id="toc-tailscale">Tailscale</a></li>
<li><a href="5-1-configuration-variables.html#done-notifications"
id="toc-done-notifications">Done Notifications</a></li>
<li><a href="5-1-configuration-variables.html#scrollback-history-1"
id="toc-scrollback-history-1">Scrollback History</a></li>
</ul></li>
</ul></li>
<li><a href="6-2-path-setup.html" id="toc-2-path-setup">2. PATH
SETUP</a></li>
<li><a href="7-3-key-bindings.html" id="toc-3-key-bindings">3. KEY
BINDINGS</a>
<ul>
<li><a
href="7-3-key-bindings.html#fzf-bindings-from-fzf---fish-integration"
id="toc-fzf-bindings-from-fzf---fish-integration">FZF Bindings (from fzf
--fish integration)</a></li>
<li><a href="7-3-key-bindings.html#fzf-bindings-from-patrickf1fzffish"
id="toc-fzf-bindings-from-patrickf1fzffish">FZF Bindings (from
PatrickF1/fzf.fish)</a></li>
</ul></li>
<li><a href="8-4-abbreviations.html" id="toc-4-abbreviations">4.
ABBREVIATIONS</a>
@@ -548,6 +567,20 @@ id="toc-48-ai-assistants">4.8 AI Assistants</a></li>
id="toc-49-history-expansion">4.9 History Expansion</a></li>
<li><a href="8-4-abbreviations.html#410-miscellaneous"
id="toc-410-miscellaneous">4.10 Miscellaneous</a></li>
<li><a href="8-4-abbreviations.html#411-shell-aliases"
id="toc-411-shell-aliases">4.11 Shell Aliases</a>
<ul>
<li><a href="8-4-abbreviations.html#navigation"
id="toc-navigation">Navigation</a></li>
<li><a href="8-4-abbreviations.html#color-overrides"
id="toc-color-overrides">Color Overrides</a></li>
<li><a href="8-4-abbreviations.html#safety-wrappers"
id="toc-safety-wrappers">Safety Wrappers</a></li>
<li><a href="8-4-abbreviations.html#archives-and-networking"
id="toc-archives-and-networking">Archives and Networking</a></li>
<li><a href="8-4-abbreviations.html#system-logs"
id="toc-system-logs">System Logs</a></li>
</ul></li>
</ul></li>
<li><a href="9-5-functions-reference.html"
id="toc-5-functions-reference">5. FUNCTIONS REFERENCE</a>
@@ -764,8 +797,8 @@ id="toc-6-dependency-catalog">6. DEPENDENCY CATALOG</a>
<ul>
<li><a href="10-6-dependency-catalog.html#required"
id="toc-required">Required</a></li>
<li><a href="10-6-dependency-catalog.html#integrations"
id="toc-integrations">Integrations</a></li>
<li><a href="10-6-dependency-catalog.html#integrations-1"
id="toc-integrations-1">Integrations</a></li>
<li><a href="10-6-dependency-catalog.html#recommended"
id="toc-recommended">Recommended</a></li>
<li><a href="10-6-dependency-catalog.html#install-methods"
@@ -784,23 +817,50 @@ id="toc-overriding-configuration-variables">Overriding Configuration
Variables</a></li>
<li><a href="11-7-customization.html#fish-universal-variables"
id="toc-fish-universal-variables">Fish Universal Variables</a></li>
<li><a href="11-7-customization.html#prompt-and-theme"
id="toc-prompt-and-theme">Prompt and Theme</a>
<ul>
<li><a href="11-7-customization.html#starship"
id="toc-starship">Starship</a></li>
<li><a href="11-7-customization.html#fzf" id="toc-fzf">FZF</a></li>
<li><a
href="11-7-customization.html#catppuccin-mocha-syntax-highlighting"
id="toc-catppuccin-mocha-syntax-highlighting">Catppuccin Mocha Syntax
Highlighting</a></li>
</ul></li>
</ul></li>
<li><a href="12-8-fisher-plugins.html" id="toc-8-fisher-plugins">8.
FISHER PLUGINS</a></li>
<li><a href="13-9-viewing-this-manual.html"
id="toc-9-viewing-this-manual">9. VIEWING THIS MANUAL</a>
<li><a href="13-9-installation.html" id="toc-9-installation">9.
INSTALLATION</a>
<ul>
<li><a href="13-9-viewing-this-manual.html#with-ov-recommended"
<li><a href="13-9-installation.html#return-sentinel"
id="toc-return-sentinel">Return Sentinel</a></li>
<li><a href="13-9-installation.html#updating"
id="toc-updating">Updating</a></li>
</ul></li>
<li><a href="14-10-personalization.html" id="toc-10-personalization">10.
PERSONALIZATION</a>
<ul>
<li><a href="14-10-personalization.html#secretsfish"
id="toc-secretsfish">secrets.fish</a></li>
<li><a href="14-10-personalization.html#localfish"
id="toc-localfish">local.fish</a></li>
</ul></li>
<li><a href="15-11-viewing-this-manual.html"
id="toc-11-viewing-this-manual">11. VIEWING THIS MANUAL</a>
<ul>
<li><a href="15-11-viewing-this-manual.html#with-ov-recommended"
id="toc-with-ov-recommended">With ov (recommended)</a></li>
<li><a href="13-9-viewing-this-manual.html#with-bat"
<li><a href="15-11-viewing-this-manual.html#with-bat"
id="toc-with-bat">With bat</a></li>
<li><a href="13-9-viewing-this-manual.html#as-a-man-page"
<li><a href="15-11-viewing-this-manual.html#as-a-man-page"
id="toc-as-a-man-page">As a man page</a></li>
<li><a href="13-9-viewing-this-manual.html#in-the-browser-html"
<li><a href="15-11-viewing-this-manual.html#in-the-browser-html"
id="toc-in-the-browser-html">In the browser (HTML)</a></li>
<li><a href="13-9-viewing-this-manual.html#as-a-wiki"
<li><a href="15-11-viewing-this-manual.html#as-a-wiki"
id="toc-as-a-wiki">As a wiki</a></li>
<li><a href="13-9-viewing-this-manual.html#jumping-to-a-section"
<li><a href="15-11-viewing-this-manual.html#jumping-to-a-section"
id="toc-jumping-to-a-section">Jumping to a section</a></li>
</ul></li>
</ul>
File diff suppressed because one or more lines are too long