Files
fish-config/docs/fish-config.md
T
rootiest 569d17a342 feat(help): integrate config-help into fish's help command
Rename config_help → config-help and add a help wrapper that
intercepts 'help config [section]', forwarding sub-topics to
config-help. Update README and docs to use 'help config' as the
preferred interface so offline docs feel like a natural extension
of fish's built-in help system.
2026-06-06 22:31:24 -04:00

34 KiB

title, section, header, date, author
title section header date author
FISH-CONFIG 7 Fish Shell Configuration User Manual June 2026 Rootiest

NAME

fish-config - personal fish shell configuration for Fish 4.x with modern CLI tool integration

SYNOPSIS

help config [SECTION]

Open this manual in the best available pager. Optionally jump to a section by keyword:

help config keybindings
help config pkg
help config abbreviations
help config logs

The help config syntax integrates with fish's built-in help command. The underlying config-help function is also available directly.

DESCRIPTION

A production-grade Fish shell configuration targeting Fish 4.x. It provides:

  • Drop-in replacements for common Unix tools (ls, cat, rm, du, ping, less)
  • Deep Kitty and WezTerm terminal integration: tab/window/pane management from the command line
  • Scrollback history snapshots saved to ~/.terminal_history on session exit
  • Automatic Python virtualenv activation on directory change
  • Cross-platform package management via pkg and fish-deps
  • AI session helpers for Claude Code and Antigravity
  • Catppuccin Mocha color theme throughout

The configuration is split across:

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

TABLE OF CONTENTS

1.  Configuration Variables
2.  PATH Setup
3.  Key Bindings
4.  Abbreviations
    4.1  Editors
    4.2  Navigation and Listing
    4.3  Git
    4.4  Terminal Windows, Tabs, and Panes
    4.5  Chezmoi
    4.6  Docker
    4.7  Systemctl
    4.8  AI Assistants
    4.9  History Expansion
    4.10 Miscellaneous
5.  Functions Reference
    5.1  File and Directory
    5.2  Navigation
    5.3  Editors and Viewers
    5.4  Git and Version Control
    5.5  Package Management
    5.6  Dependency Management
    5.7  System and Monitoring
    5.8  Terminal Management
    5.9  Clipboard
    5.10 Network
    5.11 Pager and Logging
    5.12 AI and Developer Tools
    5.13 Media and Utilities
    5.14 Miscellaneous
6.  Dependency Catalog
7.  Customization
8.  Fisher Plugins
9.  Viewing This Manual

1. CONFIGURATION VARIABLES

These variables are exported from config.fish on every interactive session. Override them in ~/.config/.user-dots/fish/local.fish.

Environment Directories (XDG)

XDG_CONFIG_HOME    ~/.config
XDG_CACHE_HOME     ~/.cache
XDG_DATA_HOME      ~/.local/share
XDG_STATE_HOME     ~/.local/state

Tools that respect XDG are directed to these paths rather than polluting $HOME.

Tool Homes (XDG-compliant)

CARGO_HOME         $XDG_DATA_HOME/cargo
RUSTUP_HOME        $XDG_DATA_HOME/rustup
GOPATH             $XDG_DATA_HOME/go
BUN_INSTALL        $XDG_DATA_HOME/bun
NPM_CONFIG_PREFIX  $XDG_DATA_HOME/npm-global
GNUPGHOME          $XDG_CONFIG_HOME/gnupg
WAKATIME_HOME      $XDG_CONFIG_HOME/wakatime

Editor and Pager

EDITOR      nvim (falls back to vi if nvim is absent)
VISUAL      same as EDITOR
SUDO_EDITOR same as EDITOR
PAGER       ov (falls back to less)

Scrollback History

SCROLLBACK_HISTORY_DIR        ~/.terminal_history
SCROLLBACK_HISTORY_MAX_FILES  100

Scrollback logs accumulate in SCROLLBACK_HISTORY_DIR as timestamped files. When the count exceeds SCROLLBACK_HISTORY_MAX_FILES the oldest are pruned automatically on exit. Use logs to browse them interactively.

Other

GPG_TTY              $(tty)  — ensures GPG passphrase prompts work
CLAUDE_CODE_NO_FLICKER  1    — suppress terminal flicker in Claude Code
CDPATH               . ~/projects ~

2. PATH SETUP

Directories prepended to PATH in this order (first wins):

~/.local/bin              Standard user-local executables
~/Applications            User-installed standalone apps
~/scripts                 Personal shell scripts
~/bin                     Cargo binaries (appended — lowest priority)
$BUN_INSTALL/bin          Bun runtime and global packages
$NPM_CONFIG_PREFIX/bin    Global npm packages
~/.lmstudio/bin           LM Studio CLI
~/.resend/bin             Resend CLI
~/.fzf/bin                fzf binary (git-installed)

Cargo binaries are intentionally appended (lowest priority) to avoid shadowing system-installed Rust tools.


3. KEY BINDINGS

The shell uses Vi key bindings (fish_vi_key_bindings). All custom bindings are active in Insert, Normal, and Visual modes unless noted.

Binding         Action
─────────────────────────────────────────────────────────────────────
Ctrl+G          Insert the head of the previous command's last path
                argument. Equivalent to !$:h in Bash.
                Example: previous = "cd /usr/local/bin"
                         Ctrl+G inserts "/usr/local"

Ctrl+F          Interactive history substitution. Type old/new then
                press Ctrl+F to apply s/old/new/ to the previous
                command. Equivalent to !!:s/old/new/ in Bash.
                Example: previous = "echo this is a test"
                         type "this is/that was", press Ctrl+F
                         result = "echo that was a test"

Ctrl+Alt+U      Strip the first token of the current command line,
                leaving arguments in place with the cursor at the
                start. Useful for quickly retyping the command.
                Example: "mkdir new_folder" -> " new_folder"

Ctrl+Alt+=      Evaluate the current command line buffer with
                Qalculate! (qalc) and print the result inline.
                Requires qalc to be installed.
                Example: type "150 * 1.08", press Ctrl+Alt+=
                         prints 162

Ctrl+Enter      Smart execute: runs commands instantly without
                pressing Enter a second time for certain fast-path
                commands (speedtest-fast, etc.).

@@              FZF inline picker. Type @@ anywhere on the command
                line to open an fzf picker and insert a selection
                at the cursor position.

FZF Bindings (from fzf --fish integration)

Ctrl+R          Search shell history with fzf
Ctrl+T          Insert a file path from fzf
Alt+C           cd into a directory chosen with fzf

4. ABBREVIATIONS

Abbreviations expand when you press Space or Enter. They are terminal-aware: some expand differently in Kitty vs WezTerm vs other terminals.

4.1 Editors

n / nv / neovim    nvim
e                  edit
se                 sudoedit
k                  kate
editt              Open new tab with nvim (terminal-aware)
cdnv               cd ~/.config/nvim
cdnvn              cd ~/.config/nvim; nvim

4.2 Navigation and Listing

l                  ls
lS                 lss       (sort by size)
lsR                lsr       (sort by time, oldest first)
lX                 lx        (sort by extension)
lT                 lt        (tree, depth 2)
lsT                lstree    (full recursive tree)
lzd                ld        (lazydocker)
cdi                zi        (interactive zoxide picker)

4.3 Git

g                  git
lg                 lazygit
gitig / git-ignore gi        (generate .gitignore)

4.4 Terminal Windows, Tabs, and Panes

These abbreviations control the terminal emulator. Each has a Kitty variant and a WezTerm variant; the correct one is inserted based on $TERM or $TERM_PROGRAM.

:w          New OS window
:wv         Split pane horizontally (new pane below)
:wh         Split pane vertically (new pane to the right)
:wo         Detach current window to its own OS window
:wot        Move current pane to a new tab
:t          New tab
:tl         Set tab title
:tw         Set window title
:twk        Rename workspace (WezTerm only)
:tp         Focus previous tab
:tn         Focus next tab
:q          Close current pane/window
:Q          Close current tab
:sw         spwin (spawn new OS window)

Quick-navigate shortcuts open windows/tabs/panes with preset working dirs:

:tgk    New tab at ~/.config/kitty
:tgn    New tab at ~/.config/nvim
:tgf    New tab at ~/.config/fish
:tgh    New tab at ~
:tgcz   New tab at chezmoi source dir
:tgcm   New tab at chezmoi source dir
:tgp    New tab at ~/projects
:tgr    New tab at / (root)

Prefixes :wg* and :wvg* / :whg* open OS windows or splits to the same set of dirs, respectively.

Prefixes :cd* open tabs with a quick cd shortcut:

:cdn    cd ~/.config/nvim
:cdf    cd ~/.config/fish
:cdh    cd ~
:cdcz   cd to chezmoi source
:cdp    cd ~/projects

Appending n to any :cd* abbreviation also runs nvim after changing dir.

4.5 Chezmoi

cm / cme / cmi / cmap / cmad / cmrm / cmcd /
cz / cze / czi / czap / czad / czrm / czcd

cm / cz          chezmoi
cmcd / czcd      chezmoi cd
cme / cze        chezmoi edit
cmad / czad      chezmoi add
cmap / czap      chezmoi apply
cmrm / cmf / czrm / czf    chezmoi forget
cmi / czi        chezmoi init

4.6 Docker

dcl         docker context use default
dcls        docker context ls
lzd         ld (lazydocker)

4.7 Systemctl

sc          systemctl
ssc         sudo systemctl
scu         systemctl --user
st          systemctl status
scs         sudo systemctl start
scr         sudo systemctl restart
ssct        sudo systemctl start
sscs        sudo systemctl stop
sscr        sudo systemctl restart

4.8 AI Assistants

ag          antigravity
ag.         antigravity .
v           antigravity-ide
s           wezterm ssh (WezTerm only)

4.9 History Expansion

These are implemented as keybinding helpers, but can also be typed:

!^          Expand to first argument of previous command
!*          Expand to all arguments of previous command
typo_sub    Interactive typo substitution (Ctrl+F)
bang_string !string expansion
bang_search !?string search
bang_minus_n  !-n  (nth-previous command)

4.10 Miscellaneous

/exit       exit
:q          Close pane (alias for terminal close)
:Q          Close tab
sudu        sudo -s
kt          kitty (Kitty only)
c           cat
speedtest-fast  fast-cli
bl          bd list
bs          bd sync
bC          bd create --title
bsh         bd show
lb          lazybeads

5. FUNCTIONS REFERENCE

5.1 File and Directory

cat

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

copy

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/

du

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

dusize

Synopsis:  dusize [dir]
Human-readable disk usage for a directory via du -sh. Defaults to cwd.

dusize ~/Videos

lD

Synopsis:  lD [args...]
Lists directories only in long format with icons. Uses eza, falls back
to lsd, then system ls.

lD ~/projects

ls

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

lsr

Synopsis:  lsr [args...]
Lists files sorted by modification time, oldest first. Uses eza.

lss

Synopsis:  lss [args...]
Lists files sorted by size with gradient color scaling. Uses eza.

lstree

Synopsis:  lstree [args...]
Full recursive tree view with icons. Uses eza.

lstree ~/projects/myapp

lt

Synopsis:  lt [args...]
Tree view limited to depth 2 with icons. Uses eza.

lt ~/projects

ltr

Synopsis:  ltr [args...]
Lists files sorted by modification time, oldest first, long format with
age-based gradient scaling. Uses eza.

lx

Synopsis:  lx [args...]
Lists files sorted by extension, long format. Uses eza.

mkdir

Synopsis:  mkdir [args...]
Interactive mkdir that prints a tree of created directories.
Falls back to mkdir -p silently.

mkdir ~/projects/myapp/src

mkcd

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

poke

Synopsis:  poke <file> [file...]
Creates files via touch, automatically creating any missing parent
directories first.

poke ~/projects/new/src/main.fish

rm

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

scrub

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

5.2 Navigation

cdi

Synopsis:  cdi [query]
Interactive directory picker combining zoxide frecency with fzf.
Equivalent to zi.

cdi myproject

clone

Synopsis:  clone [args...]
Clone a git repository into a new Kitty window. Kitty-only.

clone https://github.com/user/repo.git

clonet

Synopsis:  clonet [args...]
Clone a git repository into a new Kitty tab. Kitty-only.

clonet https://github.com/user/repo.git

5.3 Editors and Viewers

edit

Synopsis:  edit [args...]
Opens files in nvim. Falls back to $EDITOR, nano, vi.

edit ~/.config/fish/config.fish

fc

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

less

Synopsis:  less [args...]
Pager wrapper with fallback chain: $PAGER -> ov -> less -> more -> cat.

less /var/log/syslog

rawfish

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.

view

Synopsis:  view [args...]
Opens files in nvim read-only mode (-R). Falls back to less.

view /etc/fstab

5.4 Git and Version Control

branch

Synopsis:  branch <branch_name>
Switches to a local branch, or creates it if it does not exist.

branch feature/new-ui

gi

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

git-clean

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

gitup

Synopsis:  gitup [args...]
Fetches updates from the remote and shows git status. Extra args are
forwarded to git fetch.

gitup
gitup --all

gitui

Synopsis:  gitui [args...]
Launches gitui with the Catppuccin Frappe theme pre-applied.

hist

Synopsis:  hist
Searches shell history with fzf, inserts the selection into the command
line, and copies it to the clipboard via wl-copy.

5.5 Package Management

pkg

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
Synopsis:  search [args...]
Interactive AUR package search and install via paru or yay.
Arch Linux only.

search neovim

upgrade

Synopsis:  upgrade
Full system upgrade via paru -Syu --noconfirm or yay -Syu --noconfirm.
Arch Linux only.

cleanup

Synopsis:  cleanup
Lists and removes orphan packages via pacman, logging their names to
~/.removed_orphans. Arch Linux only.

parur

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

5.6 Dependency Management

fish-deps

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)
  6. pipx (Python tools)

When multiple methods are available you are prompted to choose.

Dependencies are grouped into three tiers:

  Required      uv, cargo, fish, fisher, starship, fzf, zoxide,
                direnv, paru/yay
  Integrations  wakatime, tailscale
  Recommended   eza, lsd, bat, btop, dust, duf, prettyping, ov,
                ripgrep, lazygit, lazydocker, trash, kitty, wezterm

fish-deps
fish-deps install
fish-deps update
fish-deps sync

check_fish_deps

Synopsis:  check_fish_deps
Backwards-compatibility alias for `fish-deps status`.

5.7 System and Monitoring

top

Synopsis:  top [args...]
Launches btop as a modern resource monitor. Falls back to system top.

swapstat

Synopsis:  swapstat
Displays a colorized memory report: kernel swappiness, zRAM compression
ratio, zRAM device details, and active swap priorities.

sbver

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

ports

Synopsis:  ports
Lists active TCP listeners with lsof, showing port/address without
hostname resolution.

screensleep

Synopsis:  screensleep
Turns off the display via KDE PowerDevil's "Turn Off Screen" action,
invoked through busctl.

lock

Synopsis:  lock
Locks the current desktop session using loginctl lock-session.

sudo-toggle

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.

limine-edit

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.

5.8 Terminal Management

tab

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

split

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

spwin

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).

detach

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/

bkg

Synopsis:  bkg <command> [args...]
Launches a command in the background via nohup with output discarded.
Simpler than detach; no version flag.

bkg firefox

ssh

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

5.9 Clipboard

y

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

p

Synopsis:  p [args...]
Outputs clipboard contents to stdout.

p | grep foo
p > file.txt

paste

Alias for p. Identical behaviour.

5.10 Network

gip

Synopsis:  gip
Fetches and prints both the public IPv4 and IPv6 address via
icanhazip.com.

gip4

Synopsis:  gip4
Fetches and prints the public IPv4 address.

gip6

Synopsis:  gip6
Fetches and prints the public IPv6 address. Returns 1 if IPv6 is
unavailable.

ping

Synopsis:  ping [args...]
Wraps prettyping with --nolegend. Pass --legend to show the legend.
Falls back to system ping.

ping google.com

qr

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

5.11 Pager and Logging

logs

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

smart_exit

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

5.12 AI and Developer Tools

antigravity

Synopsis:  antigravity [args...]
Runs the agy CLI (Antigravity AI assistant) with noisy deprecation
warnings filtered from stderr.

antigravity chat

antigravity-ide

Synopsis:  antigravity-ide [args...]
Runs the antigravity-ide editor with warnings filtered.

antigravity-resume

Synopsis:  antigravity-resume
Resumes the most recent Antigravity session from the .antigravity_session
file in the current directory, or opens an interactive fzf picker if no
session file is found.

claude-resume

Synopsis:  claude-resume
Resumes the most recent Claude Code session from the .claude_session
file in the current directory, or opens an interactive fzf picker.

claude-docs

Synopsis:  claude-docs
Invokes Claude Code to analyze recent repository changes and update
README.md, ensuring all documented features and examples are accurate.

claude-pr

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-resume

Synopsis:  code-resume
Resumes the most recent AI session (Claude or Antigravity), preferring
the newest session file found in the current directory.

superpowers

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

5.13 Media and Utilities

dng2avif

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

steam-dl

Synopsis:  steam-dl
Launches Steam under systemd-inhibit, preventing the system from going
idle or sleeping while a download is in progress.

spark

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

5.14 Miscellaneous

bash

Synopsis:  bash [args...]
Switches to bash, with XDG config applied. On exit, $SHELL is reset
back to fish.

bd-pull

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

cheat

Synopsis:  cheat <topic> [args...]
Displays a colorized cheatsheet using cheat -c, falls back to tldr,
then man.

cheat tar
cheat git

cffetch / ffetch

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.

dockup

Synopsis:  dockup [-h] [directory]
Pulls latest Docker images, restarts services in the given Docker
Compose project, and prunes dangling images.

dockup ~/myapp

joplin

Synopsis:  joplin [args...]
Runs the Joplin CLI with Node.js deprecation warnings suppressed.

joplin ls

ld

Synopsis:  ld
Launches lazydocker targeting the currently active Docker context,
detected via docker context inspect.

replay

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"

tmux-clean

Synopsis:  tmux-clean
Kills all detached (unattached) tmux sessions, leaving attached ones
running.

wake-lock

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/

zellij

Synopsis:  zellij [args...]
Launches zellij with the Catppuccin Mocha theme applied.

6. DEPENDENCY CATALOG

fish-deps manages these tools. Run fish-deps to check status, or fish-deps install to install missing ones.

Required

uv        Python package manager (Astral)
cargo     Rust toolchain (via rustup)
fish      Fish shell >= 4.0
fisher    Fish plugin manager
starship  Cross-shell prompt
fzf       Fuzzy finder
zoxide    Smart cd with frecency
direnv    Per-directory environment loading
paru      AUR helper (Arch only; preferred)
yay       AUR helper (Arch only; fallback)

Integrations

wakatime   Developer time tracking
tailscale  Mesh VPN client
eza         Modern ls replacement
lsd         ls replacement (fallback to eza)
bat         Syntax-highlighted cat
btop        Modern resource monitor
dust        Disk usage tree (Rust)
duf         Disk usage/free overview
prettyping  Colorized ping wrapper
ov          Modern pager (replaces less)
ripgrep     Fast line search
lazygit     Terminal git UI
lazydocker  Terminal docker UI
trash       Safe delete (trash-cli)
kitty       GPU-accelerated terminal (primary)
wezterm     GPU-accelerated terminal (alternative)

Install Methods

The install priority for each tool:

cargo     Rust tools (eza, lsd, bat, dust, ov, ripgrep, trashy, zoxide,
          starship) — always gets the latest crate version
system PM paru / apt / brew / dnf / etc. — for tools without a crate
git clone fzf — installed from GitHub to ~/.fzf/
curl      starship installer, fisher bootstrap, uv installer
pipx      Python-based tools

7. CUSTOMIZATION

Machine-local Configuration

Place machine-specific settings that should not be committed to git in:

~/.config/.user-dots/fish/local.fish

Typical uses: additional PATH entries, local aliases, hostname-specific env vars, work-specific tool configs.

Secrets and API Keys

~/.config/.user-dots/fish/secrets.fish

Store API tokens, GPG keys, private credentials here. This file is never committed.

Both files are sourced at the end of config.fish on every interactive session, so they can override anything set earlier.

Overriding Configuration Variables

Any variable set in local.fish after the main config loads takes effect. Example: to increase the scrollback history limit:

# in local.fish
set -gx SCROLLBACK_HISTORY_MAX_FILES 200

Fish Universal Variables

Some settings (fzf colors, theme) are stored in fish_variables via set -U. These are machine-local and git-ignored. Do not commit fish_variables.


8. FISHER PLUGINS

Fisher is bootstrapped automatically on first shell start if not present. The plugin list is maintained in fish_plugins at the config root.

jorgebucaran/fisher           Plugin manager itself
catppuccin/fish               Catppuccin Mocha color theme
PatrickF1/fzf.fish            fzf integration for Fish
franciscolourenco/done        Desktop notification when long commands finish
jorgebucaran/autopair.fish    Auto-pair brackets and quotes
meaningful-ooo/sponge         Remove failed commands from history
nickeb96/puffer-fish          !! / !$ / ./ expansion

Run fisher update to update all plugins, or fish-deps update which calls fisher update as its first step.


9. VIEWING THIS MANUAL

help config

ov renders the Markdown with syntax highlighting and section-based navigation.

Space       next section
^           previous section
Alt+u       toggle section list sidebar
/           search forward
n / N       next / previous search match
g           go to line number
j           interactive jump target (line, %, or 'section')
q           quit

With bat

bat --language=markdown --paging=always ~/.config/fish/docs/fish-config.md

As a man page

The symlink and MANPATH are configured automatically on shell start:

man fish-config

Or read the compiled file directly:

man -l ~/.config/fish/docs/fish-config.1

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.

Jumping to a section

help config keybindings
help config abbreviations
help config pkg
help config logs
help config fish-deps

The keyword is matched case-insensitively against section headings.