chore(docs): regenerate man page, HTML docs, and wiki
This commit is contained in:
+326
-13
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 "Catppuccin Latte"</code></pre>
|
||||
<hr />
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
@@ -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 "Your Name"
|
||||
set -gx MY_EMAIL "you@example.com"
|
||||
set -gx GPG_RECIPIENT "you@example.com"
|
||||
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 'ssh you@your-server.local'
|
||||
abbr -a sshw 'ssh you@work-server.example.com'
|
||||
|
||||
# Docker context shortcuts
|
||||
abbr -a dcr 'docker context use my-remote-server'
|
||||
abbr -a dcw 'docker context use work-server'</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 'section')
|
||||
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
|
||||
@@ -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>
|
||||
|
||||
@@ -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 'col -bx | bat -l man -p'</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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
@@ -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
Reference in New Issue
Block a user