Files
fish-config/docs/html/9-5-functions-reference.html
T
2026-07-04 06:13:06 +00:00

1356 lines
50 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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>5. FUNCTIONS REFERENCE</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="10-6-dependency-catalog.html" accesskey="n" rel="next">6. DEPENDENCY CATALOG</a>
</span>
<span class="navlink">
<span class="navlink-label">Previous:</span> <a href="8-4-abbreviations.html" accesskey="p" rel="previous">4. ABBREVIATIONS</a>
</span>
</div>
</nav>
<h1 data-number="9" id="5-functions-reference">5. FUNCTIONS
REFERENCE</h1>
<h2 data-number="9.1" id="51-file-and-directory">5.1 File and
Directory</h2>
<h3 data-number="9.1.1" id="cat">cat</h3>
<pre><code>Synopsis: cat [args...]
Wraps bat for files with syntax highlighting and line numbers.
Passes directories to ls. Falls back to /usr/bin/cat.
cat README.md
cat ~/projects/myapp</code></pre>
<h3 data-number="9.1.2" id="copy">copy</h3>
<pre><code>Synopsis: copy &lt;source&gt; &lt;dest&gt;
Wraps cp, stripping trailing slashes from source directories to
prevent unintended nesting inside the destination.
copy ./mydir/ ~/backup # copies mydir INTO backup, not backup/mydir/</code></pre>
<h3 data-number="9.1.3" id="du">du</h3>
<pre><code>Synopsis: du [--disk|--dir|--dua] [args...]
Smart disk-usage dispatcher:
--disk force duf (disk-level free/used overview)
--dir force dust (per-directory tree breakdown)
--dua force dua (fast space analyzer)
Without flags, routes to the most appropriate tool by context.
du ~/Downloads
du --disk</code></pre>
<h3 data-number="9.1.4" id="dusize">dusize</h3>
<pre><code>Synopsis: dusize [dir]
Human-readable disk usage for a directory via du -sh. Defaults to cwd.
dusize ~/Videos</code></pre>
<h3 data-number="9.1.5" id="ld">lD</h3>
<pre><code>Synopsis: lD [args...]
Lists directories only in long format with icons. Uses eza, falls back
to lsd, then system ls.
lD ~/projects</code></pre>
<h3 data-number="9.1.6" id="ls">ls</h3>
<pre><code>Synopsis: ls [args...]
Lists files in long format with icons and hyperlinks. Uses eza, falls
back to lsd, then system ls.
ls
ls -a ~/projects</code></pre>
<h3 data-number="9.1.7" id="lsr">lsr</h3>
<pre><code>Synopsis: lsr [args...]
Lists files sorted by modification time, oldest first. Uses eza.</code></pre>
<h3 data-number="9.1.8" id="lss">lss</h3>
<pre><code>Synopsis: lss [args...]
Lists files sorted by size with gradient color scaling. Uses eza.</code></pre>
<h3 data-number="9.1.9" id="lstree">lstree</h3>
<pre><code>Synopsis: lstree [args...]
Full recursive tree view with icons. Uses eza.
lstree ~/projects/myapp</code></pre>
<h3 data-number="9.1.10" id="lt">lt</h3>
<pre><code>Synopsis: lt [args...]
Tree view limited to depth 2 with icons. Uses eza.
lt ~/projects</code></pre>
<h3 data-number="9.1.11" id="ltr">ltr</h3>
<pre><code>Synopsis: ltr [args...]
Lists files sorted by modification time, oldest first, long format with
age-based gradient scaling. Uses eza.</code></pre>
<h3 data-number="9.1.12" id="lx">lx</h3>
<pre><code>Synopsis: lx [args...]
Lists files sorted by extension, long format. Uses eza.</code></pre>
<h3 data-number="9.1.13" id="mkdir">mkdir</h3>
<pre><code>Synopsis: mkdir [args...]
Interactive mkdir that prints a tree of created directories.
Falls back to mkdir -p silently.
mkdir ~/projects/myapp/src</code></pre>
<h3 data-number="9.1.14" id="mkcd">mkcd</h3>
<pre><code>Synopsis: mkcd [-s] &lt;dir&gt;
Creates a directory (including parents) and cd into it. Prints a tree
of created dirs by default; -s/--silent suppresses output.
mkcd ~/projects/newapp/src</code></pre>
<h3 data-number="9.1.15" id="poke">poke</h3>
<pre><code>Synopsis: poke &lt;file&gt; [file...]
Creates files via touch, automatically creating any missing parent
directories first.
poke ~/projects/new/src/main.fish</code></pre>
<h3 data-number="9.1.16" id="rm">rm</h3>
<pre><code>Synopsis: rm [-e [opts] | -S | args...]
Safe rm wrapper routing to trash:
(no args) List current trash contents
-e/--empty Empty the trash (pass options to trash-empty)
-S/--secure Permanently delete via rm -rf + fstrim (irreversible)
-r/-R/--recursive Move to trash
&lt;paths&gt; Move to trash (safe delete)
Falls back to /usr/bin/rm when trash is unavailable.
rm file.txt # moves to trash
rm -e # empty trash
rm -S sensitive.pem # permanent delete</code></pre>
<h3 data-number="9.1.17" id="rg">rg</h3>
<pre><code>Synopsis: rg [args...]
In Kitty, wraps ripgrep with --hyperlink-format=kitty so search
results are clickable file links in the terminal. Falls back to
system rg in any other terminal. All other arguments pass through
unchanged.
rg &quot;fish_greeting&quot; ~/.config/fish/
rg -l &quot;TODO&quot; ~/projects/myapp</code></pre>
<h3 data-number="9.1.18" id="scrub">scrub</h3>
<pre><code>Synopsis: scrub [-a] [-d] [-h]
Recursively removes OS metadata, editor artifacts, compiler output,
and dev caches using fd.
-a/--aggressive Also removes node_modules, logs, .cache, IDE dirs,
AI session artifacts
-d/--dry-run Print what would be removed without deleting
scrub
scrub -a
scrub -d</code></pre>
<hr />
<h2 data-number="9.2" id="52-navigation">5.2 Navigation</h2>
<h3 data-number="9.2.1" id="cdi">cdi</h3>
<pre><code>Synopsis: cdi [query]
Interactive directory picker combining zoxide frecency with fzf.
Equivalent to zi.
cdi myproject</code></pre>
<h3 data-number="9.2.2" id="clone">clone</h3>
<pre><code>Synopsis: clone [args...]
Clone a git repository into a new Kitty window. Kitty-only.
clone https://github.com/user/repo.git</code></pre>
<h3 data-number="9.2.3" id="clonet">clonet</h3>
<pre><code>Synopsis: clonet [args...]
Clone a git repository into a new Kitty tab. Kitty-only.
clonet https://github.com/user/repo.git</code></pre>
<hr />
<h2 data-number="9.3" id="53-editors-and-viewers">5.3 Editors and
Viewers</h2>
<h3 data-number="9.3.1" id="edit">edit</h3>
<pre><code>Synopsis: edit [-V|-t] [-e EDITOR] [-c] [-x TEXT] [-n] [-v|-s] [FILE...]
Opens files in a text editor, choosing a terminal or GUI editor and
resolving a rich chain of fallbacks. With no --visual/--terminal flag the
mode is auto-detected: interactive terminals use the terminal editor
($EDITOR), while detached invocations (e.g. desktop shortcuts) use the GUI
editor ($VISUAL). Clipboard contents and literal strings can be opened as
throwaway temp files. Editor output is suppressed unless --verbose.
GUI fallback chain: zed → antigravity-ide → code → kate → kwrite →
gnome-text-editor → gedit
Terminal fallback chain: nvim → vim → micro → nano → vi
Options:
-V, --visual Force the GUI editor ($VISUAL or fallbacks)
-t, --terminal Force the terminal editor ($EDITOR or fallbacks)
-e, --editor=X Use a specific editor binary X
-c, --clipboard Open the clipboard contents (as a temp file)
-x, --text=STR Open STR as the contents of a new temp file
-n, --new Force a new window/instance (best-effort)
-v, --verbose Print the launch command and editor output
-s, --silent Suppress all output, including the editor&#39;s
-h, --help Show this help message
edit ~/.config/fish/config.fish
edit --visual notes.txt
edit --terminal --new todo.md
edit --editor=code --clipboard
edit --text=&quot;hello world&quot;</code></pre>
<h3 data-number="9.3.2" id="fc">fc</h3>
<pre><code>Synopsis: fc [command_prefix]
Edit the last shell command (or one matching a prefix) in $EDITOR,
then execute the result. Bash-style fc behaviour.
fc
fc git</code></pre>
<h3 data-number="9.3.3" id="less">less</h3>
<pre><code>Synopsis: less [args...]
Pager wrapper with fallback chain: $PAGER -&gt; ov -&gt; less -&gt; more -&gt; cat.
less /var/log/syslog</code></pre>
<h3 data-number="9.3.4" id="rawfish">rawfish</h3>
<pre><code>Synopsis: rawfish [args...]
Launches Fish with NO_TMUX=1, bypassing any tmux auto-attach logic.
Useful when you need a clean shell without session management.</code></pre>
<h3 data-number="9.3.5" id="view">view</h3>
<pre><code>Synopsis: view [args...]
Opens files in nvim read-only mode (-R). Falls back to less.
view /etc/fstab</code></pre>
<hr />
<h2 data-number="9.4" id="54-git-and-version-control">5.4 Git and
Version Control</h2>
<h3 data-number="9.4.1" id="auto-pull">auto-pull</h3>
<pre><code>Synopsis: auto-pull [list]
auto-pull add [PATH]
auto-pull remove &lt;NAME|PATH&gt;
auto-pull status
Manages the registry of repositories that are background fast-forwarded
when you enter them (see &quot;Auto-pull fast-forward&quot; under the C2 component
reference). The fish-config repo is always covered as a baseline. The
registry is machine-local at `$__fish_user_dots_path/auto-pull.list` (defaults
to `~/.config/.user-dots/fish/auto-pull.list`), one absolute path per line,
and is never committed. Registry management works
even when C2 auto-execution is disabled; only the background sync is gated.
list Show registered repos (default)
add [PATH] Register PATH&#39;s git root (default: current repo)
remove &lt;NAME|PATH&gt; Unregister by basename or exact path
status Show enabled/disabled state, repo count, list path
cd ~/src/qmk_firmware; and auto-pull add
auto-pull add ~/work/api
auto-pull list
auto-pull remove qmk_firmware</code></pre>
<h3 data-number="9.4.2" id="branch">branch</h3>
<pre><code>Synopsis: branch &lt;branch_name&gt;
Switches to a local branch, or creates it if it does not exist.
branch feature/new-ui</code></pre>
<h3 data-number="9.4.3" id="gi">gi</h3>
<pre><code>Synopsis: gi [-h] [-b] [-p] [-s] [-l] [targets...]
Generates .gitignore content from the gitignore.io API with MD5-based
deduplication (patterns already present are not re-appended).
-b/--boilerplate Append generic boilerplate first
-p/--prompt Prompt interactively for targets
-s/--stdout Print to stdout instead of appending to .gitignore
-l/--list List all available targets
targets Comma-separated or space-separated target names
gi python,venv
gi -b -p
gi -s node &gt; .gitignore</code></pre>
<h3 data-number="9.4.4" id="git-clean">git-clean</h3>
<pre><code>Synopsis: git-clean [-f]
Fetches and prunes the remote, fast-forwards the current branch, then
deletes local branches whose remote tracking branch has been deleted.
Switches to main/master automatically if the current branch is orphaned.
-f/--force Force-delete unmerged branches too
git-clean
git-clean --force</code></pre>
<h3 data-number="9.4.5" id="gitup">gitup</h3>
<pre><code>Synopsis: gitup [args...]
Fetches updates from the remote and shows git status. Extra args are
forwarded to git fetch.
gitup
gitup --all</code></pre>
<h3 data-number="9.4.6" id="gitui">gitui</h3>
<pre><code>Synopsis: gitui [args...]
Launches gitui with the Catppuccin Frappe theme pre-applied.</code></pre>
<h3 data-number="9.4.7" id="hist">hist</h3>
<pre><code>Synopsis: hist
Searches shell history with fzf, inserts the selection into the command
line, and copies it to the clipboard via wl-copy.</code></pre>
<hr />
<h2 data-number="9.5" id="55-package-management">5.5 Package
Management</h2>
<h3 data-number="9.5.1" id="pkg">pkg</h3>
<pre><code>Synopsis: pkg [-h] [-i|-u] &lt;package&gt; [package...]
Installs or removes packages using the detected system package manager.
Supports: paru, yay, pacman, apt, dnf, zypper, yum, brew, pkg.
(no flag) Auto mode: installs missing packages, removes installed ones
-i/--install Force install
-u/--uninstall Force uninstall
pkg firefox # auto: install if missing, remove if present
pkg -i ripgrep fd # force install
pkg -u cowsay # force uninstall
The package-installed check uses the correct query for each PM:
pacman/paru/yay pacman -Qi
apt dpkg -s
dnf/zypper/yum rpm -q
brew brew list
pkg pkg info</code></pre>
<h3 data-number="9.5.2" id="search">search</h3>
<pre><code>Synopsis: search [args...]
Interactive AUR package search and install via paru or yay.
Arch Linux only.
search neovim</code></pre>
<h3 data-number="9.5.3" id="upgrade">upgrade</h3>
<pre><code>Synopsis: upgrade
Full system upgrade via paru -Syu --noconfirm or yay -Syu --noconfirm.
Arch Linux only.</code></pre>
<h3 data-number="9.5.4" id="cleanup">cleanup</h3>
<pre><code>Synopsis: cleanup
Lists and removes orphan packages via pacman, logging their names to
~/.removed_orphans. Arch Linux only.</code></pre>
<h3 data-number="9.5.5" id="parur">parur</h3>
<pre><code>Synopsis: parur
Opens an fzf picker of all installed packages (with pacman -Qi previews),
then removes the selected packages via paru or yay. Arch Linux only.
parur</code></pre>
<hr />
<h2 data-number="9.6" id="56-dependency-management">5.6 Dependency
Management</h2>
<h3 data-number="9.6.1" id="fish-deps">fish-deps</h3>
<pre><code>Synopsis: fish-deps [status|install|update|sync]
Unified command for managing all tools this configuration depends on.
status (default) Show installed/missing status grouped by tier
install Interactively install each missing dependency
update Update all installed dependencies
sync Install missing deps, then update all
Install method priority (highest to lowest):
1. git+cargo source build (fish shell itself)
2. cargo (Rust tools — gets latest crate version)
3. system PM (paru/apt/brew/etc.)
4. git clone (fzf)
5. curl installer (starship, fisher, uv)
When multiple methods are available you are prompted to choose.
Dependencies are grouped into three tiers:
Required fish, fzf, zoxide
Integrations wakatime, tailscale
Recommended cargo, starship, uv, direnv, paru, yay, eza, lsd, bat,
btop, dust, duf, prettyping, ov, ripgrep, lazygit,
lazydocker, trash, kitty, wezterm, python3, yt-dlp
fish-deps
fish-deps install
fish-deps update
fish-deps sync</code></pre>
<h3 data-number="9.6.2" id="check_fish_deps">check_fish_deps</h3>
<pre><code>Synopsis: check_fish_deps
Backwards-compatibility alias for `fish-deps status`.</code></pre>
<hr />
<h2 data-number="9.7" id="57-system-and-monitoring">5.7 System and
Monitoring</h2>
<h3 data-number="9.7.1" id="top">top</h3>
<pre><code>Synopsis: top [args...]
Launches btop as a modern resource monitor. Falls back to system top.</code></pre>
<h3 data-number="9.7.2" id="swapstat">swapstat</h3>
<pre><code>Synopsis: swapstat
Displays a colorized memory report: kernel swappiness, zRAM compression
ratio, zRAM device details, and active swap priorities.</code></pre>
<h3 data-number="9.7.3" id="sbver">sbver</h3>
<pre><code>Synopsis: sbver [--brief]
Verifies Secure Boot signatures on all EFI binaries tracked by sbctl.
Color-codes results: green checkmark (verified), red X (unsigned).
Prints a pass/fail summary.
--brief Suppress per-file output, show only the summary
sbver
sbver --brief</code></pre>
<h3 data-number="9.7.4" id="ports">ports</h3>
<pre><code>Synopsis: ports
Lists active TCP listeners with lsof, showing port/address without
hostname resolution.</code></pre>
<h3 data-number="9.7.5" id="screensleep">screensleep</h3>
<pre><code>Synopsis: screensleep
Turns off the display via KDE PowerDevil&#39;s &quot;Turn Off Screen&quot; action,
invoked through busctl.</code></pre>
<h3 data-number="9.7.6" id="lock">lock</h3>
<pre><code>Synopsis: lock
Locks the current desktop session using loginctl lock-session.</code></pre>
<h3 data-number="9.7.7" id="sudo-toggle">sudo-toggle</h3>
<pre><code>Synopsis: sudo-toggle
Toggles the sudo NOPASSWD rule on/off via /etc/sudoers.d/nofail-toggle.
Useful for automated tasks that would otherwise require password entry.</code></pre>
<h3 data-number="9.7.8" id="limine-edit">limine-edit</h3>
<pre><code>Synopsis: limine-edit
Opens /boot/limine.conf in sudoedit, then automatically re-enrolls the
config hash, runs CachyOS boot hooks, and re-signs Secure Boot files.
Combines the edit and sign steps into a single command.</code></pre>
<hr />
<h2 data-number="9.8" id="58-terminal-management">5.8 Terminal
Management</h2>
<h3 data-number="9.8.1" id="tab">tab</h3>
<pre><code>Synopsis: tab [args...]
Opens a new tab in Kitty (kitty @ launch --type=tab), WezTerm
(wezterm cli spawn), or Konsole. Uses current working directory,
or $cdto if set.
tab</code></pre>
<h3 data-number="9.8.2" id="split">split</h3>
<pre><code>Synopsis: split [-h|-v] [command...]
Opens a new pane in Kitty or WezTerm, optionally running a command.
-h/--horizontal (default) Split below
-v/--vertical Split to the right
split
split -v nvim README.md</code></pre>
<h3 data-number="9.8.3" id="spwin">spwin</h3>
<pre><code>Synopsis: spwin [args...]
Spawns a new terminal OS window in Kitty (via spawn-window.sh or
kitty @ launch --type=os-window) or WezTerm (wezterm cli spawn --new-window).</code></pre>
<h3 data-number="9.8.4" id="detach">detach</h3>
<pre><code>Synopsis: detach [-h] [--version] &lt;command&gt; [args...]
Runs a command fully detached via nohup with stdout/stderr discarded.
The command survives the current session.
detach rsync -a ./data remote:/backup/</code></pre>
<h3 data-number="9.8.5" id="bkg">bkg</h3>
<pre><code>Synopsis: bkg &lt;command&gt; [args...]
Launches a command in the background via nohup with output discarded.
Simpler than detach; no version flag.
bkg firefox</code></pre>
<h3 data-number="9.8.6" id="ssh">ssh</h3>
<pre><code>Synopsis: ssh [args...]
In Kitty, wraps ssh with kitten ssh for better terminal integration
(multiplexing, copy/paste support). Falls back to system ssh elsewhere.
ssh user@host</code></pre>
<hr />
<h2 data-number="9.9" id="59-clipboard">5.9 Clipboard</h2>
<h3 data-number="9.9.1" id="y">y</h3>
<pre><code>Synopsis: y [text...]
Copies text to the clipboard via wl-copy (Wayland) or xclip (X11).
Reads from stdin if no arguments given.
y &quot;hello world&quot;
ls | y
cat file.txt | y</code></pre>
<h3 data-number="9.9.2" id="p">p</h3>
<pre><code>Synopsis: p [args...]
Outputs clipboard contents to stdout.
p | grep foo
p &gt; file.txt</code></pre>
<h3 data-number="9.9.3" id="paste">paste</h3>
<pre><code>Alias for p. Identical behaviour.</code></pre>
<hr />
<h2 data-number="9.10" id="510-network">5.10 Network</h2>
<h3 data-number="9.10.1" id="gip">gip</h3>
<pre><code>Synopsis: gip
Fetches and prints both the public IPv4 and IPv6 address via
icanhazip.com.</code></pre>
<h3 data-number="9.10.2" id="gip4">gip4</h3>
<pre><code>Synopsis: gip4
Fetches and prints the public IPv4 address.</code></pre>
<h3 data-number="9.10.3" id="gip6">gip6</h3>
<pre><code>Synopsis: gip6
Fetches and prints the public IPv6 address. Returns 1 if IPv6 is
unavailable.</code></pre>
<h3 data-number="9.10.4" id="ping">ping</h3>
<pre><code>Synopsis: ping [args...]
Wraps prettyping with --nolegend. Pass --legend to show the legend.
Falls back to system ping.
ping google.com</code></pre>
<h3 data-number="9.10.5" id="qr">qr</h3>
<pre><code>Synopsis: qr [text...]
Generates a UTF-8 QR code from text or stdin. Uses qrencode locally;
falls back to the qrenco.de API.
qr &quot;https://example.com&quot;
echo &quot;https://example.com&quot; | qr</code></pre>
<hr />
<h2 data-number="9.11" id="511-pager-and-logging">5.11 Pager and
Logging</h2>
<h3 data-number="9.11.1" id="logs">logs</h3>
<pre><code>Synopsis: logs [-c &lt;category&gt;]
Interactively browses terminal log files sorted newest-first using fzf.
-c/--category Filter to: scrollback, paru, or yay
Keybindings inside the fzf browser:
Enter Open in $PAGER
Ctrl+E Open in $EDITOR
Ctrl+D Delete (with confirmation)
? Toggle keybind help overlay
Paru and yay logs open in ov with syntax highlighting and sticky section
headers. Scrollback logs open in ov with per-command sticky prompt headers
based on OSC 133 markers.
logs
logs -c paru
logs -c scrollback</code></pre>
<h3 data-number="9.11.2" id="smart_exit">smart_exit</h3>
<pre><code>Synopsis: smart_exit [-n]
Closes the shell session. In Kitty, captures the terminal scrollback to
a timestamped log file in $SCROLLBACK_HISTORY_DIR before exiting.
Automatically prunes the oldest logs when the count exceeds
$SCROLLBACK_HISTORY_MAX_FILES.
-n/--no-log Exit without saving a scrollback log
The exit builtin is wired to smart_exit for interactive sessions.
Typing exit or Ctrl+D behaves identically to smart_exit.
smart_exit
smart_exit --no-log</code></pre>
<hr />
<h2 data-number="9.12" id="512-ai-and-developer-tools">5.12 AI and
Developer Tools</h2>
<h3 data-number="9.12.1" id="agy">agy</h3>
<pre><code>Synopsis: agy [args...]
Wrapper for the agy Antigravity AI CLI. Before launching, delegates to
agents-init --agents to ensure AGENTS/ is scaffolded and CLAUDE.md is
symlinked to AGENTS/AGENTS.md in the current project, then forwards all
arguments verbatim to the real agy binary. Command shadow (C1): when
__fish_config_op_aliases (or the master) is disabled, the call is
passed through to the real agy binary unchanged.
agy chat
agy resume</code></pre>
<h3 data-number="9.12.2" id="antigravity-ide">antigravity-ide</h3>
<pre><code>Synopsis: antigravity-ide [args...]
Runs the antigravity-ide editor with warnings filtered.</code></pre>
<h3 data-number="9.12.3" id="agents-init">agents-init</h3>
<pre><code>Synopsis: agents-init [--agents | --plugins]
Scaffold an AGENTS/ sub-repository for tracking agent specs, plans, specs,
and dev logs. Creates AGENTS/ as a standalone git repo, moves any existing
AGENTS.md into it, and replaces it with a relative symlink (plus
CLAUDE.md -&gt; AGENTS/AGENTS.md so Claude Code picks up the shared agent
instructions). Consolidates plans/ and specs/ directly under AGENTS/
(merging any legacy docs/plans, docs/superpowers/plans, or old
AGENTS/plugins/ locations into the canonical AGENTS/&lt;tgt&gt;), creates
AGENTS/devlogs/, and wires docs/superpowers/{plans,specs} symlinks back to
them. Adds managed paths to .gitignore and auto-commits every change inside
the AGENTS/ sub-repo; pulls first when the sub-repo has an upstream.
Fully idempotent: a second run produces no output and no new commits.
Flags: --agents re-runs only the AGENTS.md / symlink step; --plugins
re-runs only the plans/specs/devlogs wiring step. Called automatically by
the claude and agy wrappers on every invocation.
Structure versioning: each AGENTS/ repo carries a self-contained version
bumper. AGENTS/.version holds MAJOR.MINOR.PATCH (seeded 1.0.0). Committed
git hooks under AGENTS/.agents-tools/ (wired via core.hooksPath) bump it on
every commit: MINOR (resetting PATCH) when the tracked directory set
changes, PATCH otherwise; MAJOR is manual-only. A prepare-commit-msg hook
appends &quot;(vX.Y.Z)&quot; to the commit subject. Downstream tooling can read
AGENTS/.version - a changed MINOR field signals a structure change. Because
core.hooksPath is a single setting, the local override would otherwise
shadow your global hooks; after bumping the version, each shim chains
(execs) to the global/system core.hooksPath hook of the same name so global
pre-commit / prepare-commit-msg hooks (e.g. ggshield, Git LFS) still run.
The script and hooks are shipped from scripts/agents-tools/ and refreshed
when their version marker is stale.
agents-init
agents-init --agents
agents-init --plugins</code></pre>
<h3 data-number="9.12.4" id="claude">claude</h3>
<pre><code>Synopsis: claude [args...]
Wrapper for the claude CLI. Before launching, delegates to agents-init
--agents to ensure AGENTS/ is scaffolded and CLAUDE.md is symlinked to
AGENTS/AGENTS.md in the current project, then forwards all arguments
verbatim to the real claude binary. Command shadow (C1): when
__fish_config_op_aliases (or the master) is disabled, the call is
passed through to the real claude binary unchanged.
claude
claude --resume</code></pre>
<h3 data-number="9.12.5" id="claude-docs">claude-docs</h3>
<pre><code>Synopsis: claude-docs
Invokes Claude Code to analyze recent repository changes and update
README.md, ensuring all documented features and examples are accurate.</code></pre>
<h3 data-number="9.12.6" id="claude-pr">claude-pr</h3>
<pre><code>Synopsis: claude-pr
Invokes Claude Code to run the full PR workflow: create branch,
conventional commit, verification, push, and open a PR with a manual
verification checklist.</code></pre>
<h3 data-number="9.12.7" id="superpowers">superpowers</h3>
<pre><code>Synopsis: superpowers [on|off] [-g]
Enables or disables the Superpowers plugin for Antigravity and Claude
Code at workspace/project scope (default) or user scope (-g/--global).
superpowers on
superpowers off -g</code></pre>
<hr />
<h2 data-number="9.13" id="513-media-and-utilities">5.13 Media and
Utilities</h2>
<h3 data-number="9.13.1" id="dng2avif">dng2avif</h3>
<pre><code>Synopsis: dng2avif [-i &lt;file&gt;] [-o &lt;file&gt;] [-q &lt;n&gt;] [-s &lt;n&gt;] [input.dng]
Converts a DNG raw image to a 10-bit HDR AVIF using an ImageMagick,
ffmpeg, avifenc pipeline with metadata sync via exiftool.
-i/--input Input file (or positional arg)
-o/--output Output file (default: same name, .avif extension)
-q/--quality Quality 0-100 (default 92)
-s/--speed Encoding speed 0-10 (default 3)
dng2avif photo.dng
dng2avif -q 85 -s 5 -i shot.dng -o out.avif</code></pre>
<h3 data-number="9.13.2" id="steam-dl">steam-dl</h3>
<pre><code>Synopsis: steam-dl
Launches Steam under systemd-inhibit, preventing the system from going
idle or sleeping while a download is in progress.</code></pre>
<h3 data-number="9.13.3" id="spark">spark</h3>
<pre><code>Synopsis: spark [--min=&lt;n&gt;] [--max=&lt;n&gt;] [numbers...]
Renders a Unicode sparkline bar chart for a sequence of numbers.
Reads from stdin if no numbers are given.
spark 1 1 2 5 14 42
echo &quot;3 7 2 9 1&quot; | spark</code></pre>
<h3 data-number="9.13.4" id="yt-dlp">yt-dlp</h3>
<pre><code>Synopsis: yt-dlp [args...] URL [URL...]
Wraps yt-dlp, prepending sane defaults: --sponsorblock-remove all,
--embed-subs, --embed-metadata, and --embed-thumbnail. Each default
is suppressed when you already pass that flag, its alias, or its
negation (e.g. --no-embed-thumbnail drops the thumbnail default;
--no-sponsorblock or your own --sponsorblock-remove drops ours). All
other arguments pass through unchanged, and --help falls through to
real yt-dlp. Opinionated component (C1 aliases); when disabled it
passes straight through to the system yt-dlp.
yt-dlp dQw4w9WgXcQ
yt-dlp --no-embed-thumbnail dQw4w9WgXcQ</code></pre>
<hr />
<h2 data-number="9.14" id="514-miscellaneous">5.14 Miscellaneous</h2>
<h3 data-number="9.14.1" id="config-help">config-help</h3>
<pre><code>Synopsis: config-help [SECTION]
config-help [SECTION] --html
config-help [SECTION] --man
config-help -h | --help
Opens the offline fish shell configuration manual. Without flags, opens
the Markdown source in the best available pager (ov &gt; bat &gt; man &gt; less &gt;
cat). If SECTION is given, jumps to the first heading matching that
keyword (case-insensitive; checks fish-config.index aliases first).
Flags:
--html / -w Open docs/html/index.html in the default browser.
If SECTION is given, opens at the matching anchor.
Detects the browser via xdg-mime x-scheme-handler/https,
then known binaries, then xdg-open as last resort.
Respects $fish_help_browser and $BROWSER.
--man / -m Open docs/fish-config.1 via man -l directly.
If SECTION is given, jumps to the nearest match.
--help / -h Print usage and navigation key reference.
config-help keybindings
config-help pkg
config-help --html
config-help pkg --html
config-help --man
config-help pkg --man
Also available as: help config [SECTION] [FLAGS]</code></pre>
<h3 data-number="9.14.2" id="open-url">open-url</h3>
<pre><code>Synopsis: open-url [-s|--silent] [-v|--verbose] &lt;url&gt;
open-url -h | --help
Opens a URL or file:// URI in the best available graphical web browser,
backgrounded so it never blocks the terminal. Resolves a real browser
binary rather than deferring to xdg-open, whose MIME dispatch can hand
local text/html files to non-browser apps (e.g. ebook readers).
Silent by default: prints nothing on success (errors always go to
stderr). Pass --verbose / -v to report which browser is launched;
--silent / -s is accepted for explicitness.
Resolution order:
1. $fish_help_browser (explicit override)
2. $BROWSER (validated; errors if not a command)
3. xdg-mime default handler for x-scheme-handler/https
4. First known browser binary found in a built-in list
5. xdg-open (last resort)
open-url https://git.rootiest.dev/rootiest/fish-config
open-url &quot;file://$HOME/.config/fish/docs/html/index.html&quot;
Used internally by config-help --html.
Typo abbreviation: url-open (expands to open-url on space/enter).</code></pre>
<h3 data-number="9.14.3" id="repo-open">repo-open</h3>
<pre><code>Synopsis: repo-open [-p|--print] [-r|--root]
repo-open -h | --help
Opens the web page for the current repository&#39;s `origin` remote in a
browser (via open-url). Deep-links to the current branch when it exists
on the remote — falling back to the remote&#39;s default branch (main/master)
otherwise — and to the current sub-directory when run below the repo root.
The remote URL is normalized from HTTPS and SSH/scp forms
(git@host:owner/repo.git, ssh://…, https://…). The web path layout is
provider-specific; the provider is resolved in order:
1. git config browse.provider (per-repo or --global override)
2. Hostname heuristic (github / gitlab / gitea / bitbucket;
codeberg → gitea)
3. Default: github-style layout
Self-hosted hosts the heuristic can&#39;t classify (a Gitea/GitLab instance
on a custom domain) need a one-time override:
git config browse.provider gitea
Flags:
--print / -p Print the resolved URL instead of opening it.
--root / -r Ignore the current sub-directory; link to the repo root.
--help / -h Show usage.
repo-open
repo-open --print
repo-open --root
Typo abbreviation: open-repo (expands to repo-open on space/enter).</code></pre>
<h3 data-number="9.14.4" id="config-update">config-update</h3>
<pre><code>Synopsis: config-update [-h] [-n] [-f]
Pulls the latest fish configuration from the upstream repository
(https://git.rootiest.dev/rootiest/fish-config.git) into ~/.config/fish.
The remote URL is hard-coded, so this works on fresh clones with no git
remote configured. All git output is suppressed; colored messages report
fetch and merge status. After a successful pull, run `exec fish` to
reload.
Flags:
--dry-run / -n Fetch and show available commits without applying them.
--force / -f Stash local changes, pull, then restore the stash.
--help / -h Show usage.
config-update
config-update --dry-run
config-update --force</code></pre>
<h3 data-number="9.14.5" id="config-settings">config-settings</h3>
<pre><code>Synopsis: config-settings [-h]
Opens an interactive TUI for managing fish configuration settings across
four pages, without having to type or remember variable names. Tab cycles
forward through the pages; Shift-Tab cycles backward.
Universal — opinionated category toggles (C1C6) + master, persistent (set -U)
Session — the same toggles, current shell only (set -g)
Sponge — sponge history-scrubbing settings: delay, successful exit
codes, purge-only-on-exit, allow-previously-successful, and
extra sensitive variable-name tokens
Paths — scrollback log directory, scrollback max files, and the
user-dots path
Toggle rows use ← → (or h/l) along an OFF ← DEFAULT → ON scale; DEFAULT
erases the variable so the master switch / built-in default applies. Value
rows (the path/int/list settings on the Sponge and Paths pages) use Enter to
edit inline; ← / h clears the value back to its default. List rows (e.g.
Extra secret, OK codes) accept values separated by commas and/or whitespace
&quot;A, B&quot;, &quot;A,B&quot; and &quot;A B&quot; all yield the same two entries. Changes apply
immediately. Always available regardless of the __fish_config_opinionated
master state.
The Sponge and Paths pages always write universal variables — these are
persistent, set-and-forget settings with no per-session scope. Editing a
scrollback row updates both the __fish_scrollback_history_* source-of-truth
variables and the exported SCROLLBACK_HISTORY_* mirrors, so the AUR/tmux/
zellij log wrappers (which read the exported names) see the change in the
running session.
The panel adapts to the terminal width automatically, selecting from
four layout tiers (with a 6-column buffer on each side before stepping
up to the next tier) and horizontally centering the box. The panel
redraws within ~0.3 s of a terminal resize with no keypress required.
COLUMNS &gt;= 90 → 78-wide panel (most detail)
COLUMNS &gt;= 86 → 74-wide panel
COLUMNS &gt;= 82 → 70-wide panel
COLUMNS &lt; 82 → 52-wide panel (default)
Navigation:
↑ ↓ / k j Move cursor
← → / h l Toggle rows: OFF ← DEFAULT → ON
← / h Value rows: clear to default
Enter Value rows: edit inline (Sponge / Paths pages)
Tab / S-Tab Next / previous page
q / Escape Exit
Flags:
--help / -h Show usage.
config-settings</code></pre>
<h3 data-number="9.14.6" id="config-toggle-deprecated">config-toggle
(deprecated)</h3>
<pre><code>Deprecated alias for config-settings. Prints a deprecation notice to
stderr, then delegates all arguments to config-settings.
config-toggle</code></pre>
<h3 data-number="9.14.7" id="bash">bash</h3>
<pre><code>Synopsis: bash [args...]
Switches to bash, with XDG config applied. On exit, $SHELL is reset
back to fish.</code></pre>
<h3 data-number="9.14.8" id="bd-pull">bd-pull</h3>
<pre><code>Synopsis: bd-pull &lt;owner/repo&gt;
Fetches unlinked Gitea issues and creates local Beads entries, updating
issue titles with the assigned Beads IDs.
Requires $GITEA_TOKEN and $GITEA_URL to be set.
bd-pull rootiest/fish-config</code></pre>
<h3 data-number="9.14.9" id="cheat">cheat</h3>
<pre><code>Synopsis: cheat &lt;topic&gt; [args...]
Displays a colorized cheatsheet using cheat -c, falls back to tldr,
then man.
cheat tar
cheat git</code></pre>
<h3 data-number="9.14.10" id="cffetch--ffetch">cffetch / ffetch</h3>
<pre><code>Synopsis: cffetch [args...] / ffetch [args...]
Clears the screen and displays system information via fastfetch with
the custom config at ~/.fastfetch.jsonc. Falls back to neofetch.</code></pre>
<h3 data-number="9.14.11" id="dockup">dockup</h3>
<pre><code>Synopsis: dockup [-h] [directory]
Pulls latest Docker images, restarts services in the given Docker
Compose project, and prunes dangling images.
dockup ~/myapp</code></pre>
<h3 data-number="9.14.12" id="joplin">joplin</h3>
<pre><code>Synopsis: joplin [args...]
Runs the Joplin CLI with Node.js deprecation warnings suppressed.
joplin ls</code></pre>
<h3 data-number="9.14.13" id="ld-1">ld</h3>
<pre><code>Synopsis: ld
Launches lazydocker targeting the currently active Docker context,
detected via docker context inspect.</code></pre>
<h3 data-number="9.14.14" id="replay">replay</h3>
<pre><code>Synopsis: replay &lt;commands&gt;
Runs Bash commands and replays any resulting changes to environment
variables, aliases, and the working directory back into the current
Fish session. Useful for sourcing Bash scripts.
replay &quot;source ~/.bashrc&quot;
replay &quot;export FOO=bar&quot;</code></pre>
<h3 data-number="9.14.15" id="kitty-logging">kitty-logging</h3>
<pre><code>Synopsis: kitty-logging [install|uninstall|status|dismiss] [-h]
Manages the Kitty scrollback watcher that powers C5 logging. Ships a
canonical, version-marked watcher and installs it into the Kitty config
directory, wiring it into kitty.conf through a sentinel-marked managed
block. Commenting out any conflicting watcher line avoids double-capture.
Commands:
install Copy/refresh the watcher and add the managed block
uninstall Remove the managed block and the watcher file
status Show wiring, installed watcher version, and C5 state
dismiss Stop the per-session setup reminder
Runtime capture stays governed by the C5 .logging_disabled sentinel, so
disabling __fish_config_op_logging makes the watcher inert without
uninstalling. Install affects new Kitty windows only.
Example:
kitty-logging install
kitty-logging status</code></pre>
<h3 data-number="9.14.16" id="tmux-clean">tmux-clean</h3>
<pre><code>Synopsis: tmux-clean
Kills all detached (unattached) tmux sessions, leaving attached ones
running.</code></pre>
<h3 data-number="9.14.17" id="wake-lock">wake-lock</h3>
<pre><code>Synopsis: wake-lock &lt;command&gt; [args...]
Runs a command under systemd-inhibit, preventing the system from going
idle or sleeping until the command completes.
wake-lock rsync -avz src/ dest/</code></pre>
<hr />
</body>
</html>