1198 lines
42 KiB
HTML
1198 lines
42 KiB
HTML
<!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 <source> <dest>
|
||
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] <dir>
|
||
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 <file> [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
|
||
<paths> 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 "fish_greeting" ~/.config/fish/
|
||
rg -l "TODO" ~/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 [args...]
|
||
Opens files in nvim. Falls back to $EDITOR, nano, vi.
|
||
|
||
edit ~/.config/fish/config.fish</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 -> ov -> less -> more -> 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="branch">branch</h3>
|
||
<pre><code>Synopsis: branch <branch_name>
|
||
Switches to a local branch, or creates it if it does not exist.
|
||
|
||
branch feature/new-ui</code></pre>
|
||
<h3 data-number="9.4.2" 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 > .gitignore</code></pre>
|
||
<h3 data-number="9.4.3" 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.4" 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.5" 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.6" 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] <package> [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
|
||
|
||
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's "Turn Off Screen" 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] <command> [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 <command> [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 "hello world"
|
||
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 > 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 "https://example.com"
|
||
echo "https://example.com" | 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 <category>]
|
||
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 and plugin
|
||
directories. Creates AGENTS/ as a standalone git repo, initializes
|
||
standard plugin subdirectories (superpowers/, plans/, specs/), moves any
|
||
existing AGENTS.md and docs/plugin dirs into the sub-repo, and replaces
|
||
them with relative symlinks. Also adds CLAUDE.md -> AGENTS/AGENTS.md so
|
||
Claude Code picks up the shared agent instructions. Adds all managed
|
||
paths to .gitignore and auto-commits every change inside the AGENTS/
|
||
sub-repo. 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 plugin-directory wiring step. Called
|
||
automatically by the claude and agy wrappers on every invocation.
|
||
|
||
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 <file>] [-o <file>] [-q <n>] [-s <n>] [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=<n>] [--max=<n>] [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 "3 7 2 9 1" | spark</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 > bat > man > less >
|
||
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="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.3" id="config-toggle">config-toggle</h3>
|
||
<pre><code>Synopsis: config-toggle [-h]
|
||
|
||
Opens an interactive TUI for toggling the six opinionated component
|
||
categories (C1–C6) and the master disable variable without having to
|
||
type or remember variable names. Two scope tabs allow independent
|
||
per-scope configuration:
|
||
|
||
Universal — persists across all sessions (set -U)
|
||
Session — current shell only (set -g)
|
||
|
||
Changes apply immediately on each value keypress. Always available
|
||
regardless of the __fish_config_opinionated master state.
|
||
|
||
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 >= 90 → 78-wide panel (most detail)
|
||
COLUMNS >= 86 → 74-wide panel
|
||
COLUMNS >= 82 → 70-wide panel
|
||
COLUMNS < 82 → 52-wide panel (default)
|
||
|
||
Navigation:
|
||
↑ ↓ / k j Move cursor
|
||
← → / h l Set value: OFF ← DEFAULT → ON (clamped)
|
||
Tab Switch scope (Universal ↔ Session)
|
||
q / Escape Exit
|
||
|
||
Left/Right (or vim-style h/l) move the highlighted value one step along
|
||
the OFF–DEFAULT–ON scale and stop at the ends. DEFAULT erases the
|
||
variable so the master switch / built-in default applies.
|
||
|
||
Flags:
|
||
--help / -h Show usage.
|
||
|
||
config-toggle</code></pre>
|
||
<h3 data-number="9.14.4" 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.5" id="bd-pull">bd-pull</h3>
|
||
<pre><code>Synopsis: bd-pull <owner/repo>
|
||
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.6" id="cheat">cheat</h3>
|
||
<pre><code>Synopsis: cheat <topic> [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.7" 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.8" 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.9" 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.10" 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.11" id="replay">replay</h3>
|
||
<pre><code>Synopsis: replay <commands>
|
||
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 "source ~/.bashrc"
|
||
replay "export FOO=bar"</code></pre>
|
||
<h3 data-number="9.14.12" 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.13" 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.14" id="wake-lock">wake-lock</h3>
|
||
<pre><code>Synopsis: wake-lock <command> [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>
|