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
+324 -11
View File
@@ -70,12 +70,30 @@ The configuration is split across:
.nf .nf
\f[C] \f[C]
config.fish Main entry point; sets env vars and PATH config.fish Main entry point; sets env vars and PATH
conf.d/ Auto-sourced fragments: keybindings, abbreviations, conf.d/
theme, starship, zoxide, wakatime abbr.fish All abbreviations
functions/ One function per file, autoloaded by Fish 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 completions/ Tab completion scripts
integrations/ FZF Catppuccin theme and bindings integrations/
docs/ This offline documentation and compiled man page 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] \f[R]
.fi .fi
.PP .PP
@@ -98,6 +116,7 @@ docs/ This offline documentation and compiled man page
4.8 AI Assistants 4.8 AI Assistants
4.9 History Expansion 4.9 History Expansion
4.10 Miscellaneous 4.10 Miscellaneous
4.11 Shell Aliases
5. Functions Reference 5. Functions Reference
5.1 File and Directory 5.1 File and Directory
5.2 Navigation 5.2 Navigation
@@ -116,7 +135,9 @@ docs/ This offline documentation and compiled man page
6. Dependency Catalog 6. Dependency Catalog
7. Customization 7. Customization
8. Fisher Plugins 8. Fisher Plugins
9. Viewing This Manual 9. Installation
10. Personalization
11. Viewing This Manual
\f[R] \f[R]
.fi .fi
.PP .PP
@@ -185,6 +206,88 @@ CLAUDE_CODE_NO_FLICKER 1 \[em] suppress terminal flicker in Claude Code
CDPATH . \[ti]/projects \[ti] CDPATH . \[ti]/projects \[ti]
\f[R] \f[R]
.fi .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 .PP
* * * * * * * * * *
.SH 2. PATH SETUP .SH 2. PATH SETUP
@@ -251,13 +354,16 @@ Ctrl+Enter Smart execute: runs commands instantly without
at the cursor position. at the cursor position.
\f[R] \f[R]
.fi .fi
.SS FZF Bindings (from fzf \[en]fish integration) .SS FZF Bindings (from PatrickF1/fzf.fish)
.IP .IP
.nf .nf
\f[C] \f[C]
Ctrl+R Search shell history with fzf Ctrl+R Search command history
Ctrl+T Insert a file path from fzf Ctrl+Alt+F Search git-tracked files
Alt+C cd into a directory chosen with fzf 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] \f[R]
.fi .fi
.PP .PP
@@ -442,6 +548,63 @@ bsh bd show
lb lazybeads lb lazybeads
\f[R] \f[R]
.fi .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 .PP
* * * * * * * * * *
.SH 5. FUNCTIONS REFERENCE .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]. \f[V]set -U\f[R].
These are machine-local and git-ignored. These are machine-local and git-ignored.
Do not commit fish_variables. 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 .PP
* * * * * * * * * *
.SH 8. FISHER PLUGINS .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. \f[V]fish-deps update\f[R] which calls fisher update as its first step.
.PP .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) .SS With ov (recommended)
.IP .IP
.nf .nf
+1 -1
View File
@@ -503,7 +503,7 @@ zoxide Smart cd with frecency
direnv Per-directory environment loading direnv Per-directory environment loading
paru AUR helper (Arch only; preferred) paru AUR helper (Arch only; preferred)
yay AUR helper (Arch only; fallback)</code></pre> 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 <pre><code>wakatime Developer time tracking
tailscale Mesh VPN client</code></pre> tailscale Mesh VPN client</code></pre>
<h2 data-number="10.3" id="recommended">Recommended</h2> <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 <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 <code>set -U</code>. These are machine-local and git-ignored. Do not
commit fish_variables.</p> 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 /> <hr />
</body> </body>
</html> </html>
+1 -1
View File
@@ -481,7 +481,7 @@
</div> </div>
<div class="sitenav"> <div class="sitenav">
<span class="navlink"> <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>
<span class="navlink"> <span class="navlink">
<span class="navlink-label">Previous:</span> <a href="11-7-customization.html" accesskey="p" rel="previous">7. CUSTOMIZATION</a> <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="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Rootiest" /> <meta name="author" content="Rootiest" />
<title>9. VIEWING THIS MANUAL</title> <title>11. VIEWING THIS MANUAL</title>
<style> <style>
div.sitenav { display: flex; flex-direction: row; flex-wrap: wrap; } div.sitenav { display: flex; flex-direction: row; flex-wrap: wrap; }
span.navlink { flex: 1; } span.navlink { flex: 1; }
@@ -483,13 +483,13 @@
<span class="navlink"> <span class="navlink">
</span> </span>
<span class="navlink"> <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> </span>
</div> </div>
</nav> </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> 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> (recommended)</h2>
<pre><code>help config</code></pre> <pre><code>help config</code></pre>
<p>ov renders the Markdown with syntax highlighting and section-based <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 g go to line number
j interactive jump target (line, %, or &#39;section&#39;) j interactive jump target (line, %, or &#39;section&#39;)
q quit</code></pre> 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> <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> <pre><code>config-help --man</code></pre>
<p>Opens the compiled docs/fish-config.1 directly via man -l, bypassing <p>Opens the compiled docs/fish-config.1 directly via man -l, bypassing
the pager fallback chain. The symlink and MANPATH are also configured 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 <p>NOTE: fish-config (hyphen) is this config's man page. fish_config
(underscore) is fish's built-in browser-based configuration tool — a (underscore) is fish's built-in browser-based configuration tool — a
completely separate command. Do not mix them up.</p> 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> (HTML)</h2>
<pre><code>config-help --html</code></pre> <pre><code>config-help --html</code></pre>
<p>Opens docs/html/index.html in the default web browser. Browser <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 browser binaries (firefox, chromium, vivaldi, etc.), and finally
xdg-open as a last resort. Set $fish_help_browser or $BROWSER to xdg-open as a last resort. Set $fish_help_browser or $BROWSER to
override.</p> 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 <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 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> 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 <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> 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> section</h2>
<pre><code>help config keybindings <pre><code>help config keybindings
help config abbreviations help config abbreviations
+23 -5
View File
@@ -505,12 +505,30 @@ exit</li>
</ul> </ul>
<p>The configuration is split across:</p> <p>The configuration is split across:</p>
<pre><code>config.fish Main entry point; sets env vars and PATH <pre><code>config.fish Main entry point; sets env vars and PATH
conf.d/ Auto-sourced fragments: keybindings, abbreviations, conf.d/
theme, starship, zoxide, wakatime abbr.fish All abbreviations
functions/ One function per file, autoloaded by Fish 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 completions/ Tab completion scripts
integrations/ FZF Catppuccin theme and bindings integrations/
docs/ This offline documentation and compiled man page</code></pre> 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 /> <hr />
</body> </body>
</html> </html>
+4 -1
View File
@@ -503,6 +503,7 @@
4.8 AI Assistants 4.8 AI Assistants
4.9 History Expansion 4.9 History Expansion
4.10 Miscellaneous 4.10 Miscellaneous
4.11 Shell Aliases
5. Functions Reference 5. Functions Reference
5.1 File and Directory 5.1 File and Directory
5.2 Navigation 5.2 Navigation
@@ -521,7 +522,9 @@
6. Dependency Catalog 6. Dependency Catalog
7. Customization 7. Customization
8. Fisher Plugins 8. Fisher Plugins
9. Viewing This Manual</code></pre> 9. Installation
10. Personalization
11. Viewing This Manual</code></pre>
<hr /> <hr />
</body> </body>
</html> </html>
@@ -525,6 +525,55 @@ interactively.</p>
<pre><code>GPG_TTY $(tty) — ensures GPG passphrase prompts work <pre><code>GPG_TTY $(tty) — ensures GPG passphrase prompts work
CLAUDE_CODE_NO_FLICKER 1 — suppress terminal flicker in Claude Code CLAUDE_CODE_NO_FLICKER 1 — suppress terminal flicker in Claude Code
CDPATH . ~/projects ~</code></pre> 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 /> <hr />
</body> </body>
</html> </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 @@ FZF inline picker. Type @@ anywhere on the command
line to open an fzf picker and insert a selection line to open an fzf picker and insert a selection
at the cursor position.</code></pre> at the cursor position.</code></pre>
<h2 data-number="7.1" id="fzf-bindings-from-fzf---fish-integration">FZF <h2 data-number="7.1" id="fzf-bindings-from-patrickf1fzffish">FZF
Bindings (from fzf --fish integration)</h2> Bindings (from PatrickF1/fzf.fish)</h2>
<pre><code>Ctrl+R Search shell history with fzf <pre><code>Ctrl+R Search command history
Ctrl+T Insert a file path from fzf Ctrl+Alt+F Search git-tracked files
Alt+C cd into a directory chosen with fzf</code></pre> 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 /> <hr />
</body> </body>
</html> </html>
+30
View File
@@ -606,6 +606,36 @@ bs bd sync
bC bd create --title bC bd create --title
bsh bd show bsh bd show
lb lazybeads</code></pre> 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 /> <hr />
</body> </body>
</html> </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> id="toc-scrollback-history">Scrollback History</a></li>
<li><a href="5-1-configuration-variables.html#other" <li><a href="5-1-configuration-variables.html#other"
id="toc-other">Other</a></li> 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> </ul></li>
<li><a href="6-2-path-setup.html" id="toc-2-path-setup">2. PATH <li><a href="6-2-path-setup.html" id="toc-2-path-setup">2. PATH
SETUP</a></li> SETUP</a></li>
<li><a href="7-3-key-bindings.html" id="toc-3-key-bindings">3. KEY <li><a href="7-3-key-bindings.html" id="toc-3-key-bindings">3. KEY
BINDINGS</a> BINDINGS</a>
<ul> <ul>
<li><a <li><a href="7-3-key-bindings.html#fzf-bindings-from-patrickf1fzffish"
href="7-3-key-bindings.html#fzf-bindings-from-fzf---fish-integration" id="toc-fzf-bindings-from-patrickf1fzffish">FZF Bindings (from
id="toc-fzf-bindings-from-fzf---fish-integration">FZF Bindings (from fzf PatrickF1/fzf.fish)</a></li>
--fish integration)</a></li>
</ul></li> </ul></li>
<li><a href="8-4-abbreviations.html" id="toc-4-abbreviations">4. <li><a href="8-4-abbreviations.html" id="toc-4-abbreviations">4.
ABBREVIATIONS</a> 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> id="toc-49-history-expansion">4.9 History Expansion</a></li>
<li><a href="8-4-abbreviations.html#410-miscellaneous" <li><a href="8-4-abbreviations.html#410-miscellaneous"
id="toc-410-miscellaneous">4.10 Miscellaneous</a></li> 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> </ul></li>
<li><a href="9-5-functions-reference.html" <li><a href="9-5-functions-reference.html"
id="toc-5-functions-reference">5. FUNCTIONS REFERENCE</a> id="toc-5-functions-reference">5. FUNCTIONS REFERENCE</a>
@@ -764,8 +797,8 @@ id="toc-6-dependency-catalog">6. DEPENDENCY CATALOG</a>
<ul> <ul>
<li><a href="10-6-dependency-catalog.html#required" <li><a href="10-6-dependency-catalog.html#required"
id="toc-required">Required</a></li> id="toc-required">Required</a></li>
<li><a href="10-6-dependency-catalog.html#integrations" <li><a href="10-6-dependency-catalog.html#integrations-1"
id="toc-integrations">Integrations</a></li> id="toc-integrations-1">Integrations</a></li>
<li><a href="10-6-dependency-catalog.html#recommended" <li><a href="10-6-dependency-catalog.html#recommended"
id="toc-recommended">Recommended</a></li> id="toc-recommended">Recommended</a></li>
<li><a href="10-6-dependency-catalog.html#install-methods" <li><a href="10-6-dependency-catalog.html#install-methods"
@@ -784,23 +817,50 @@ id="toc-overriding-configuration-variables">Overriding Configuration
Variables</a></li> Variables</a></li>
<li><a href="11-7-customization.html#fish-universal-variables" <li><a href="11-7-customization.html#fish-universal-variables"
id="toc-fish-universal-variables">Fish Universal Variables</a></li> 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> </ul></li>
<li><a href="12-8-fisher-plugins.html" id="toc-8-fisher-plugins">8. <li><a href="12-8-fisher-plugins.html" id="toc-8-fisher-plugins">8.
FISHER PLUGINS</a></li> FISHER PLUGINS</a></li>
<li><a href="13-9-viewing-this-manual.html" <li><a href="13-9-installation.html" id="toc-9-installation">9.
id="toc-9-viewing-this-manual">9. VIEWING THIS MANUAL</a> INSTALLATION</a>
<ul> <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> 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> 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> 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> 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> 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> id="toc-jumping-to-a-section">Jumping to a section</a></li>
</ul></li> </ul></li>
</ul> </ul>
File diff suppressed because one or more lines are too long