diff --git a/docs/fish-config.1 b/docs/fish-config.1 index e18c152..af962c6 100644 --- a/docs/fish-config.1 +++ b/docs/fish-config.1 @@ -354,7 +354,7 @@ Ctrl+Enter Smart execute: runs commands instantly without at the cursor position. \f[R] .fi -.SS FZF Bindings (from PatrickF1/fzf.fish) +.SS FZF Bindings (bundled from PatrickF1/fzf.fish) .IP .nf \f[C] @@ -1795,10 +1795,10 @@ Highlights: #F38BA8 (red) #CBA6F7 (mauve) #B4BEFE (lavender) To customize, override FZF_DEFAULT_OPTS in local.fish. .SS Catppuccin Mocha Syntax Highlighting .PP -The catppuccin/fish plugin applies syntax highlight colors on first run. +The Catppuccin Mocha theme ships with this config in themes/ and is +applied on first run via \f[V]conf.d/first_run.fish\f[R]. Colors are stored in fish_variables (universal). -To switch variants, install a different theme from the themes/ -directory: +To switch variants, install a different theme from themes/: .IP .nf \f[C] @@ -1825,23 +1825,96 @@ set -Ue __fish_config_first_run_complete .fi .PP Then open a new shell. +.SS Fisher-Managed Plugins .PP -The plugin list is maintained in fish_plugins at the config root. +The following plugins are fully managed by Fisher. +Their files are installed into the repo directory by Fisher and are +listed in \f[V].gitignore\f[R] \[em] do not commit them. +Fisher installs and updates them automatically. .IP .nf \f[C] 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 +\f[R] +.fi +.SS Sponge History Filtering +.PP +Sponge removes failed commands from history and, via +conf.d/sponge_privacy.fish, also filters privacy-sensitive commands +through three layers: +.PP +Layer 1 \[em] Static patterns (universal, persistent across sessions): +Commands matching any of these structural signatures are never recorded: +.IP +.nf +\f[C] +--password / --token / --passphrase / --api-key flags with values +Inline env assignments: GITHUB_TOKEN=xxx, MY_API_KEY=abc +Fish set with sensitive names: set -gx GITHUB_TOKEN xxx +URLs with embedded credentials: https://user:pass\[at]host +HTTP Authorization headers: curl -H \[dq]Authorization: ...\[dq] +Basic auth flags: curl -u user:pass +sshpass, docker login -p, openssl -passin/-passout \f[R] .fi .PP -Run \f[V]fisher update\f[R] to update all plugins, or -\f[V]fish-deps update\f[R] which calls fisher update as its first step. +Layer 2 \[em] Dynamic secret values (session globals, refreshed each +login): On the first prompt, after secrets.fish has loaded, the literal +values of all exported variables whose names suggest credentials (TOKEN, +PASSWORD, SECRET, API_KEY, etc.) +are collected, regex-escaped, and added as a session-scoped overlay. +Because globals shadow universals in Fish, the combined list is what +sponge sees. +Rotating a token takes effect on the next login automatically. +.PP +Layer 3 \[em] Per-command filter (sponge_filter_secrets): Catches +credentials in variables exported after login, such as tokens sourced +from a project .env file mid-session. +.PP +To add your own persistent patterns: +.IP +.nf +\f[C] +set -U -a sponge_regex_patterns \[aq]your-regex-here\[aq] +\f[R] +.fi +.SS Bundled Plugin Functionality +.PP +The remaining plugin functionality is bundled directly with this config +rather than managed through Fisher. +The bundled versions include customizations for Fish 4.x compatibility +and improved behavior that differ from their upstream releases. +Installing them through Fisher would overwrite these customizations. +.PP +Bundled components and their upstream origins: +.IP +.nf +\f[C] +catppuccin/fish → themes/ + conf.d/theme.fish +PatrickF1/fzf.fish → functions/_fzf_*.fish + conf.d/fzf.fish +franciscolourenco/done → conf.d/done.fish +jorgebucaran/autopair.fish → functions/_autopair_*.fish + conf.d/autopair.fish +nickeb96/puffer-fish → functions/_puffer_fish_*.fish + conf.d/puffer.fish +\f[R] +.fi +.PP +Do not run \f[V]fisher install\f[R] for these \[em] it will overwrite +the customized versions. +To update their behavior, edit the relevant bundled files directly. +.SS fish_plugins Manifest +.PP +The \f[V]fish_plugins\f[R] file at the config root: +.IP +.nf +\f[C] +jorgebucaran/fisher Plugin manager itself +meaningful-ooo/sponge Remove failed commands from history +\f[R] +.fi +.PP +To update all Fisher-managed plugins, run \f[V]fisher update\f[R] or +\f[V]fish-deps update\f[R] which calls it as its first step. .PP * * * * * .SH 9. INSTALLATION @@ -1857,8 +1930,10 @@ git clone https://git.rootiest.dev/rootiest/fish-config.git \[ti]/.config/fish .fi .PP Then open a new Fish shell. -Fisher and all plugins install automatically on first launch and the -Catppuccin Mocha theme is applied. +Fisher installs automatically on first launch and the Catppuccin Mocha +theme is applied. +All other plugin functionality is bundled directly with this config and +requires no additional installation. .SS Return Sentinel .PP config.fish ends with a return sentinel guard. diff --git a/docs/html/11-7-customization.html b/docs/html/11-7-customization.html index 96cbdc9..698b5ad 100644 --- a/docs/html/11-7-customization.html +++ b/docs/html/11-7-customization.html @@ -536,9 +536,10 @@ Highlights: #F38BA8 (red) #CBA6F7 (mauve) #B4BEFE (lavender)Catppuccin Mocha Syntax Highlighting -

The catppuccin/fish plugin applies syntax highlight colors on first -run. Colors are stored in fish_variables (universal). To switch -variants, install a different theme from the themes/ directory:

+

The Catppuccin Mocha theme ships with this config in themes/ and is +applied on first run via conf.d/first_run.fish. Colors are +stored in fish_variables (universal). To switch variants, install a +different theme from themes/:

fish_config theme save "Catppuccin Latte"

diff --git a/docs/html/12-8-fisher-plugins.html b/docs/html/12-8-fisher-plugins.html index 2322d7f..155b540 100644 --- a/docs/html/12-8-fisher-plugins.html +++ b/docs/html/12-8-fisher-plugins.html @@ -498,17 +498,64 @@ overhead.

or for testing), run:

set -Ue __fish_config_first_run_complete

Then open a new shell.

-

The plugin list is maintained in fish_plugins at the config root.

+

Fisher-Managed +Plugins

+

The following plugins are fully managed by Fisher. Their files are +installed into the repo directory by Fisher and are listed in +.gitignore — do not commit them. Fisher installs and +updates them automatically.

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.

+meaningful-ooo/sponge Remove failed commands from history +

Sponge History +Filtering

+

Sponge removes failed commands from history and, via +conf.d/sponge_privacy.fish, also filters privacy-sensitive commands +through three layers:

+

Layer 1 — Static patterns (universal, persistent across sessions): +Commands matching any of these structural signatures are never +recorded:

+
--password / --token / --passphrase / --api-key flags with values
+Inline env assignments: GITHUB_TOKEN=xxx, MY_API_KEY=abc
+Fish set with sensitive names: set -gx GITHUB_TOKEN xxx
+URLs with embedded credentials: https://user:pass@host
+HTTP Authorization headers: curl -H "Authorization: ..."
+Basic auth flags: curl -u user:pass
+sshpass, docker login -p, openssl -passin/-passout
+

Layer 2 — Dynamic secret values (session globals, refreshed each +login): On the first prompt, after secrets.fish has loaded, the literal +values of all exported variables whose names suggest credentials (TOKEN, +PASSWORD, SECRET, API_KEY, etc.) are collected, regex-escaped, and added +as a session-scoped overlay. Because globals shadow universals in Fish, +the combined list is what sponge sees. Rotating a token takes effect on +the next login automatically.

+

Layer 3 — Per-command filter (sponge_filter_secrets): Catches +credentials in variables exported after login, such as tokens sourced +from a project .env file mid-session.

+

To add your own persistent patterns:

+
set -U -a sponge_regex_patterns 'your-regex-here'
+

Bundled Plugin +Functionality

+

The remaining plugin functionality is bundled directly with this +config rather than managed through Fisher. The bundled versions include +customizations for Fish 4.x compatibility and improved behavior that +differ from their upstream releases. Installing them through Fisher +would overwrite these customizations.

+

Bundled components and their upstream origins:

+
catppuccin/fish               → themes/ + conf.d/theme.fish
+PatrickF1/fzf.fish            → functions/_fzf_*.fish + conf.d/fzf.fish
+franciscolourenco/done        → conf.d/done.fish
+jorgebucaran/autopair.fish    → functions/_autopair_*.fish + conf.d/autopair.fish
+nickeb96/puffer-fish          → functions/_puffer_fish_*.fish + conf.d/puffer.fish
+

Do not run fisher install for these — it will overwrite +the customized versions. To update their behavior, edit the relevant +bundled files directly.

+

fish_plugins +Manifest

+

The fish_plugins file at the config root:

+
jorgebucaran/fisher           Plugin manager itself
+meaningful-ooo/sponge         Remove failed commands from history
+

To update all Fisher-managed plugins, run fisher update +or fish-deps update which calls it as its first step.


diff --git a/docs/html/13-9-installation.html b/docs/html/13-9-installation.html index 44e2a8a..0cd51d6 100644 --- a/docs/html/13-9-installation.html +++ b/docs/html/13-9-installation.html @@ -493,9 +493,10 @@ machine:

mv ~/.config/fish ~/.config/fish.bak   # back up any existing config
 git clone https://git.rootiest.dev/rootiest/fish-config.git ~/.config/fish
-

Then open a new Fish shell. Fisher and all plugins install -automatically on first launch and the Catppuccin Mocha theme is -applied.

+

Then open a new Fish shell. Fisher installs automatically on first +launch and the Catppuccin Mocha theme is applied. All other plugin +functionality is bundled directly with this config and requires no +additional installation.

Return Sentinel

config.fish ends with a return sentinel guard. Any lines appended after it by a tool's setup command (starship init fish | source, zoxide diff --git a/docs/html/7-3-key-bindings.html b/docs/html/7-3-key-bindings.html index e41721a..f32a7cf 100644 --- a/docs/html/7-3-key-bindings.html +++ b/docs/html/7-3-key-bindings.html @@ -524,8 +524,9 @@ Ctrl+Enter Smart execute: runs commands instantly without @@ FZF inline picker. Type @@ anywhere on the command line to open an fzf picker and insert a selection at the cursor position. -

FZF -Bindings (from PatrickF1/fzf.fish)

+

FZF Bindings (bundled +from PatrickF1/fzf.fish)

Ctrl+R          Search command history
 Ctrl+Alt+F      Search git-tracked files
 Ctrl+Alt+L      Search git log
diff --git a/docs/html/index.html b/docs/html/index.html
index 973ec84..7e48754 100644
--- a/docs/html/index.html
+++ b/docs/html/index.html
@@ -539,9 +539,10 @@ SETUP
 
  • 3. KEY BINDINGS
  • 4. ABBREVIATIONS @@ -830,7 +831,18 @@ Highlighting
  • 8. -FISHER PLUGINS
  • +FISHER PLUGINS +
  • 9. INSTALLATION
      diff --git a/docs/html/sitemap.json b/docs/html/sitemap.json index b23727a..b3e01e9 100644 --- a/docs/html/sitemap.json +++ b/docs/html/sitemap.json @@ -1 +1 @@ -{"section":{"id":"","level":"0","number":null,"path":"index.html","title":"FISH-CONFIG"},"subsections":[{"section":{"id":"name","level":"1","number":"1","path":"1-name.html","title":"NAME"},"subsections":[]},{"section":{"id":"synopsis","level":"1","number":"2","path":"2-synopsis.html","title":"SYNOPSIS"},"subsections":[]},{"section":{"id":"description","level":"1","number":"3","path":"3-description.html","title":"DESCRIPTION"},"subsections":[]},{"section":{"id":"table-of-contents","level":"1","number":"4","path":"4-table-of-contents.html","title":"TABLE OF CONTENTS"},"subsections":[]},{"section":{"id":"1-configuration-variables","level":"1","number":"5","path":"5-1-configuration-variables.html","title":"1. CONFIGURATION VARIABLES"},"subsections":[{"section":{"id":"environment-directories-xdg","level":"2","number":"5.1","path":"5-1-configuration-variables.html#environment-directories-xdg","title":"Environment Directories (XDG)"},"subsections":[]},{"section":{"id":"tool-homes-xdg-compliant","level":"2","number":"5.2","path":"5-1-configuration-variables.html#tool-homes-xdg-compliant","title":"Tool Homes (XDG-compliant)"},"subsections":[]},{"section":{"id":"editor-and-pager","level":"2","number":"5.3","path":"5-1-configuration-variables.html#editor-and-pager","title":"Editor and Pager"},"subsections":[]},{"section":{"id":"scrollback-history","level":"2","number":"5.4","path":"5-1-configuration-variables.html#scrollback-history","title":"Scrollback History"},"subsections":[]},{"section":{"id":"other","level":"2","number":"5.5","path":"5-1-configuration-variables.html#other","title":"Other"},"subsections":[]},{"section":{"id":"pager-hierarchy","level":"2","number":"5.6","path":"5-1-configuration-variables.html#pager-hierarchy","title":"Pager Hierarchy"},"subsections":[]},{"section":{"id":"integrations","level":"2","number":"5.7","path":"5-1-configuration-variables.html#integrations","title":"Integrations"},"subsections":[{"section":{"id":"zoxide","level":"3","number":"5.7.1","path":"5-1-configuration-variables.html#zoxide","title":"Zoxide"},"subsections":[]},{"section":{"id":"direnv","level":"3","number":"5.7.2","path":"5-1-configuration-variables.html#direnv","title":"DirEnv"},"subsections":[]},{"section":{"id":"auto-python-venv","level":"3","number":"5.7.3","path":"5-1-configuration-variables.html#auto-python-venv","title":"Auto Python Venv"},"subsections":[]},{"section":{"id":"wakatime","level":"3","number":"5.7.4","path":"5-1-configuration-variables.html#wakatime","title":"WakaTime"},"subsections":[]},{"section":{"id":"tailscale","level":"3","number":"5.7.5","path":"5-1-configuration-variables.html#tailscale","title":"Tailscale"},"subsections":[]},{"section":{"id":"done-notifications","level":"3","number":"5.7.6","path":"5-1-configuration-variables.html#done-notifications","title":"Done Notifications"},"subsections":[]},{"section":{"id":"scrollback-history-1","level":"3","number":"5.7.7","path":"5-1-configuration-variables.html#scrollback-history-1","title":"Scrollback History"},"subsections":[]}]}]},{"section":{"id":"2-path-setup","level":"1","number":"6","path":"6-2-path-setup.html","title":"2. PATH SETUP"},"subsections":[]},{"section":{"id":"3-key-bindings","level":"1","number":"7","path":"7-3-key-bindings.html","title":"3. KEY BINDINGS"},"subsections":[{"section":{"id":"fzf-bindings-from-patrickf1fzffish","level":"2","number":"7.1","path":"7-3-key-bindings.html#fzf-bindings-from-patrickf1fzffish","title":"FZF Bindings (from PatrickF1/fzf.fish)"},"subsections":[]}]},{"section":{"id":"4-abbreviations","level":"1","number":"8","path":"8-4-abbreviations.html","title":"4. ABBREVIATIONS"},"subsections":[{"section":{"id":"41-editors","level":"2","number":"8.1","path":"8-4-abbreviations.html#41-editors","title":"4.1 Editors"},"subsections":[]},{"section":{"id":"42-navigation-and-listing","level":"2","number":"8.2","path":"8-4-abbreviations.html#42-navigation-and-listing","title":"4.2 Navigation and Listing"},"subsections":[]},{"section":{"id":"43-git","level":"2","number":"8.3","path":"8-4-abbreviations.html#43-git","title":"4.3 Git"},"subsections":[]},{"section":{"id":"44-terminal-windows-tabs-and-panes","level":"2","number":"8.4","path":"8-4-abbreviations.html#44-terminal-windows-tabs-and-panes","title":"4.4 Terminal Windows, Tabs, and Panes"},"subsections":[]},{"section":{"id":"45-chezmoi","level":"2","number":"8.5","path":"8-4-abbreviations.html#45-chezmoi","title":"4.5 Chezmoi"},"subsections":[]},{"section":{"id":"46-docker","level":"2","number":"8.6","path":"8-4-abbreviations.html#46-docker","title":"4.6 Docker"},"subsections":[]},{"section":{"id":"47-systemctl","level":"2","number":"8.7","path":"8-4-abbreviations.html#47-systemctl","title":"4.7 Systemctl"},"subsections":[]},{"section":{"id":"48-ai-assistants","level":"2","number":"8.8","path":"8-4-abbreviations.html#48-ai-assistants","title":"4.8 AI Assistants"},"subsections":[]},{"section":{"id":"49-history-expansion","level":"2","number":"8.9","path":"8-4-abbreviations.html#49-history-expansion","title":"4.9 History Expansion"},"subsections":[]},{"section":{"id":"410-miscellaneous","level":"2","number":"8.10","path":"8-4-abbreviations.html#410-miscellaneous","title":"4.10 Miscellaneous"},"subsections":[]},{"section":{"id":"411-shell-aliases","level":"2","number":"8.11","path":"8-4-abbreviations.html#411-shell-aliases","title":"4.11 Shell Aliases"},"subsections":[{"section":{"id":"navigation","level":"3","number":"8.11.1","path":"8-4-abbreviations.html#navigation","title":"Navigation"},"subsections":[]},{"section":{"id":"color-overrides","level":"3","number":"8.11.2","path":"8-4-abbreviations.html#color-overrides","title":"Color Overrides"},"subsections":[]},{"section":{"id":"safety-wrappers","level":"3","number":"8.11.3","path":"8-4-abbreviations.html#safety-wrappers","title":"Safety Wrappers"},"subsections":[]},{"section":{"id":"archives-and-networking","level":"3","number":"8.11.4","path":"8-4-abbreviations.html#archives-and-networking","title":"Archives and Networking"},"subsections":[]},{"section":{"id":"system-logs","level":"3","number":"8.11.5","path":"8-4-abbreviations.html#system-logs","title":"System Logs"},"subsections":[]}]}]},{"section":{"id":"5-functions-reference","level":"1","number":"9","path":"9-5-functions-reference.html","title":"5. FUNCTIONS REFERENCE"},"subsections":[{"section":{"id":"51-file-and-directory","level":"2","number":"9.1","path":"9-5-functions-reference.html#51-file-and-directory","title":"5.1 File and Directory"},"subsections":[{"section":{"id":"cat","level":"3","number":"9.1.1","path":"9-5-functions-reference.html#cat","title":"cat"},"subsections":[]},{"section":{"id":"copy","level":"3","number":"9.1.2","path":"9-5-functions-reference.html#copy","title":"copy"},"subsections":[]},{"section":{"id":"du","level":"3","number":"9.1.3","path":"9-5-functions-reference.html#du","title":"du"},"subsections":[]},{"section":{"id":"dusize","level":"3","number":"9.1.4","path":"9-5-functions-reference.html#dusize","title":"dusize"},"subsections":[]},{"section":{"id":"ld","level":"3","number":"9.1.5","path":"9-5-functions-reference.html#ld","title":"lD"},"subsections":[]},{"section":{"id":"ls","level":"3","number":"9.1.6","path":"9-5-functions-reference.html#ls","title":"ls"},"subsections":[]},{"section":{"id":"lsr","level":"3","number":"9.1.7","path":"9-5-functions-reference.html#lsr","title":"lsr"},"subsections":[]},{"section":{"id":"lss","level":"3","number":"9.1.8","path":"9-5-functions-reference.html#lss","title":"lss"},"subsections":[]},{"section":{"id":"lstree","level":"3","number":"9.1.9","path":"9-5-functions-reference.html#lstree","title":"lstree"},"subsections":[]},{"section":{"id":"lt","level":"3","number":"9.1.10","path":"9-5-functions-reference.html#lt","title":"lt"},"subsections":[]},{"section":{"id":"ltr","level":"3","number":"9.1.11","path":"9-5-functions-reference.html#ltr","title":"ltr"},"subsections":[]},{"section":{"id":"lx","level":"3","number":"9.1.12","path":"9-5-functions-reference.html#lx","title":"lx"},"subsections":[]},{"section":{"id":"mkdir","level":"3","number":"9.1.13","path":"9-5-functions-reference.html#mkdir","title":"mkdir"},"subsections":[]},{"section":{"id":"mkcd","level":"3","number":"9.1.14","path":"9-5-functions-reference.html#mkcd","title":"mkcd"},"subsections":[]},{"section":{"id":"poke","level":"3","number":"9.1.15","path":"9-5-functions-reference.html#poke","title":"poke"},"subsections":[]},{"section":{"id":"rm","level":"3","number":"9.1.16","path":"9-5-functions-reference.html#rm","title":"rm"},"subsections":[]},{"section":{"id":"scrub","level":"3","number":"9.1.17","path":"9-5-functions-reference.html#scrub","title":"scrub"},"subsections":[]}]},{"section":{"id":"52-navigation","level":"2","number":"9.2","path":"9-5-functions-reference.html#52-navigation","title":"5.2 Navigation"},"subsections":[{"section":{"id":"cdi","level":"3","number":"9.2.1","path":"9-5-functions-reference.html#cdi","title":"cdi"},"subsections":[]},{"section":{"id":"clone","level":"3","number":"9.2.2","path":"9-5-functions-reference.html#clone","title":"clone"},"subsections":[]},{"section":{"id":"clonet","level":"3","number":"9.2.3","path":"9-5-functions-reference.html#clonet","title":"clonet"},"subsections":[]}]},{"section":{"id":"53-editors-and-viewers","level":"2","number":"9.3","path":"9-5-functions-reference.html#53-editors-and-viewers","title":"5.3 Editors and Viewers"},"subsections":[{"section":{"id":"edit","level":"3","number":"9.3.1","path":"9-5-functions-reference.html#edit","title":"edit"},"subsections":[]},{"section":{"id":"fc","level":"3","number":"9.3.2","path":"9-5-functions-reference.html#fc","title":"fc"},"subsections":[]},{"section":{"id":"less","level":"3","number":"9.3.3","path":"9-5-functions-reference.html#less","title":"less"},"subsections":[]},{"section":{"id":"rawfish","level":"3","number":"9.3.4","path":"9-5-functions-reference.html#rawfish","title":"rawfish"},"subsections":[]},{"section":{"id":"view","level":"3","number":"9.3.5","path":"9-5-functions-reference.html#view","title":"view"},"subsections":[]}]},{"section":{"id":"54-git-and-version-control","level":"2","number":"9.4","path":"9-5-functions-reference.html#54-git-and-version-control","title":"5.4 Git and Version Control"},"subsections":[{"section":{"id":"branch","level":"3","number":"9.4.1","path":"9-5-functions-reference.html#branch","title":"branch"},"subsections":[]},{"section":{"id":"gi","level":"3","number":"9.4.2","path":"9-5-functions-reference.html#gi","title":"gi"},"subsections":[]},{"section":{"id":"git-clean","level":"3","number":"9.4.3","path":"9-5-functions-reference.html#git-clean","title":"git-clean"},"subsections":[]},{"section":{"id":"gitup","level":"3","number":"9.4.4","path":"9-5-functions-reference.html#gitup","title":"gitup"},"subsections":[]},{"section":{"id":"gitui","level":"3","number":"9.4.5","path":"9-5-functions-reference.html#gitui","title":"gitui"},"subsections":[]},{"section":{"id":"hist","level":"3","number":"9.4.6","path":"9-5-functions-reference.html#hist","title":"hist"},"subsections":[]}]},{"section":{"id":"55-package-management","level":"2","number":"9.5","path":"9-5-functions-reference.html#55-package-management","title":"5.5 Package Management"},"subsections":[{"section":{"id":"pkg","level":"3","number":"9.5.1","path":"9-5-functions-reference.html#pkg","title":"pkg"},"subsections":[]},{"section":{"id":"search","level":"3","number":"9.5.2","path":"9-5-functions-reference.html#search","title":"search"},"subsections":[]},{"section":{"id":"upgrade","level":"3","number":"9.5.3","path":"9-5-functions-reference.html#upgrade","title":"upgrade"},"subsections":[]},{"section":{"id":"cleanup","level":"3","number":"9.5.4","path":"9-5-functions-reference.html#cleanup","title":"cleanup"},"subsections":[]},{"section":{"id":"parur","level":"3","number":"9.5.5","path":"9-5-functions-reference.html#parur","title":"parur"},"subsections":[]}]},{"section":{"id":"56-dependency-management","level":"2","number":"9.6","path":"9-5-functions-reference.html#56-dependency-management","title":"5.6 Dependency Management"},"subsections":[{"section":{"id":"fish-deps","level":"3","number":"9.6.1","path":"9-5-functions-reference.html#fish-deps","title":"fish-deps"},"subsections":[]},{"section":{"id":"check_fish_deps","level":"3","number":"9.6.2","path":"9-5-functions-reference.html#check_fish_deps","title":"check_fish_deps"},"subsections":[]}]},{"section":{"id":"57-system-and-monitoring","level":"2","number":"9.7","path":"9-5-functions-reference.html#57-system-and-monitoring","title":"5.7 System and Monitoring"},"subsections":[{"section":{"id":"top","level":"3","number":"9.7.1","path":"9-5-functions-reference.html#top","title":"top"},"subsections":[]},{"section":{"id":"swapstat","level":"3","number":"9.7.2","path":"9-5-functions-reference.html#swapstat","title":"swapstat"},"subsections":[]},{"section":{"id":"sbver","level":"3","number":"9.7.3","path":"9-5-functions-reference.html#sbver","title":"sbver"},"subsections":[]},{"section":{"id":"ports","level":"3","number":"9.7.4","path":"9-5-functions-reference.html#ports","title":"ports"},"subsections":[]},{"section":{"id":"screensleep","level":"3","number":"9.7.5","path":"9-5-functions-reference.html#screensleep","title":"screensleep"},"subsections":[]},{"section":{"id":"lock","level":"3","number":"9.7.6","path":"9-5-functions-reference.html#lock","title":"lock"},"subsections":[]},{"section":{"id":"sudo-toggle","level":"3","number":"9.7.7","path":"9-5-functions-reference.html#sudo-toggle","title":"sudo-toggle"},"subsections":[]},{"section":{"id":"limine-edit","level":"3","number":"9.7.8","path":"9-5-functions-reference.html#limine-edit","title":"limine-edit"},"subsections":[]}]},{"section":{"id":"58-terminal-management","level":"2","number":"9.8","path":"9-5-functions-reference.html#58-terminal-management","title":"5.8 Terminal Management"},"subsections":[{"section":{"id":"tab","level":"3","number":"9.8.1","path":"9-5-functions-reference.html#tab","title":"tab"},"subsections":[]},{"section":{"id":"split","level":"3","number":"9.8.2","path":"9-5-functions-reference.html#split","title":"split"},"subsections":[]},{"section":{"id":"spwin","level":"3","number":"9.8.3","path":"9-5-functions-reference.html#spwin","title":"spwin"},"subsections":[]},{"section":{"id":"detach","level":"3","number":"9.8.4","path":"9-5-functions-reference.html#detach","title":"detach"},"subsections":[]},{"section":{"id":"bkg","level":"3","number":"9.8.5","path":"9-5-functions-reference.html#bkg","title":"bkg"},"subsections":[]},{"section":{"id":"ssh","level":"3","number":"9.8.6","path":"9-5-functions-reference.html#ssh","title":"ssh"},"subsections":[]}]},{"section":{"id":"59-clipboard","level":"2","number":"9.9","path":"9-5-functions-reference.html#59-clipboard","title":"5.9 Clipboard"},"subsections":[{"section":{"id":"y","level":"3","number":"9.9.1","path":"9-5-functions-reference.html#y","title":"y"},"subsections":[]},{"section":{"id":"p","level":"3","number":"9.9.2","path":"9-5-functions-reference.html#p","title":"p"},"subsections":[]},{"section":{"id":"paste","level":"3","number":"9.9.3","path":"9-5-functions-reference.html#paste","title":"paste"},"subsections":[]}]},{"section":{"id":"510-network","level":"2","number":"9.10","path":"9-5-functions-reference.html#510-network","title":"5.10 Network"},"subsections":[{"section":{"id":"gip","level":"3","number":"9.10.1","path":"9-5-functions-reference.html#gip","title":"gip"},"subsections":[]},{"section":{"id":"gip4","level":"3","number":"9.10.2","path":"9-5-functions-reference.html#gip4","title":"gip4"},"subsections":[]},{"section":{"id":"gip6","level":"3","number":"9.10.3","path":"9-5-functions-reference.html#gip6","title":"gip6"},"subsections":[]},{"section":{"id":"ping","level":"3","number":"9.10.4","path":"9-5-functions-reference.html#ping","title":"ping"},"subsections":[]},{"section":{"id":"qr","level":"3","number":"9.10.5","path":"9-5-functions-reference.html#qr","title":"qr"},"subsections":[]}]},{"section":{"id":"511-pager-and-logging","level":"2","number":"9.11","path":"9-5-functions-reference.html#511-pager-and-logging","title":"5.11 Pager and Logging"},"subsections":[{"section":{"id":"logs","level":"3","number":"9.11.1","path":"9-5-functions-reference.html#logs","title":"logs"},"subsections":[]},{"section":{"id":"smart_exit","level":"3","number":"9.11.2","path":"9-5-functions-reference.html#smart_exit","title":"smart_exit"},"subsections":[]}]},{"section":{"id":"512-ai-and-developer-tools","level":"2","number":"9.12","path":"9-5-functions-reference.html#512-ai-and-developer-tools","title":"5.12 AI and Developer Tools"},"subsections":[{"section":{"id":"antigravity","level":"3","number":"9.12.1","path":"9-5-functions-reference.html#antigravity","title":"antigravity"},"subsections":[]},{"section":{"id":"antigravity-ide","level":"3","number":"9.12.2","path":"9-5-functions-reference.html#antigravity-ide","title":"antigravity-ide"},"subsections":[]},{"section":{"id":"antigravity-resume","level":"3","number":"9.12.3","path":"9-5-functions-reference.html#antigravity-resume","title":"antigravity-resume"},"subsections":[]},{"section":{"id":"claude-resume","level":"3","number":"9.12.4","path":"9-5-functions-reference.html#claude-resume","title":"claude-resume"},"subsections":[]},{"section":{"id":"claude-docs","level":"3","number":"9.12.5","path":"9-5-functions-reference.html#claude-docs","title":"claude-docs"},"subsections":[]},{"section":{"id":"claude-pr","level":"3","number":"9.12.6","path":"9-5-functions-reference.html#claude-pr","title":"claude-pr"},"subsections":[]},{"section":{"id":"code-resume","level":"3","number":"9.12.7","path":"9-5-functions-reference.html#code-resume","title":"code-resume"},"subsections":[]},{"section":{"id":"superpowers","level":"3","number":"9.12.8","path":"9-5-functions-reference.html#superpowers","title":"superpowers"},"subsections":[]}]},{"section":{"id":"513-media-and-utilities","level":"2","number":"9.13","path":"9-5-functions-reference.html#513-media-and-utilities","title":"5.13 Media and Utilities"},"subsections":[{"section":{"id":"dng2avif","level":"3","number":"9.13.1","path":"9-5-functions-reference.html#dng2avif","title":"dng2avif"},"subsections":[]},{"section":{"id":"steam-dl","level":"3","number":"9.13.2","path":"9-5-functions-reference.html#steam-dl","title":"steam-dl"},"subsections":[]},{"section":{"id":"spark","level":"3","number":"9.13.3","path":"9-5-functions-reference.html#spark","title":"spark"},"subsections":[]}]},{"section":{"id":"514-miscellaneous","level":"2","number":"9.14","path":"9-5-functions-reference.html#514-miscellaneous","title":"5.14 Miscellaneous"},"subsections":[{"section":{"id":"config-help","level":"3","number":"9.14.1","path":"9-5-functions-reference.html#config-help","title":"config-help"},"subsections":[]},{"section":{"id":"config-update","level":"3","number":"9.14.2","path":"9-5-functions-reference.html#config-update","title":"config-update"},"subsections":[]},{"section":{"id":"bash","level":"3","number":"9.14.3","path":"9-5-functions-reference.html#bash","title":"bash"},"subsections":[]},{"section":{"id":"bd-pull","level":"3","number":"9.14.4","path":"9-5-functions-reference.html#bd-pull","title":"bd-pull"},"subsections":[]},{"section":{"id":"cheat","level":"3","number":"9.14.5","path":"9-5-functions-reference.html#cheat","title":"cheat"},"subsections":[]},{"section":{"id":"cffetch--ffetch","level":"3","number":"9.14.6","path":"9-5-functions-reference.html#cffetch--ffetch","title":"cffetch / ffetch"},"subsections":[]},{"section":{"id":"dockup","level":"3","number":"9.14.7","path":"9-5-functions-reference.html#dockup","title":"dockup"},"subsections":[]},{"section":{"id":"joplin","level":"3","number":"9.14.8","path":"9-5-functions-reference.html#joplin","title":"joplin"},"subsections":[]},{"section":{"id":"ld-1","level":"3","number":"9.14.9","path":"9-5-functions-reference.html#ld-1","title":"ld"},"subsections":[]},{"section":{"id":"replay","level":"3","number":"9.14.10","path":"9-5-functions-reference.html#replay","title":"replay"},"subsections":[]},{"section":{"id":"tmux-clean","level":"3","number":"9.14.11","path":"9-5-functions-reference.html#tmux-clean","title":"tmux-clean"},"subsections":[]},{"section":{"id":"wake-lock","level":"3","number":"9.14.12","path":"9-5-functions-reference.html#wake-lock","title":"wake-lock"},"subsections":[]},{"section":{"id":"zellij","level":"3","number":"9.14.13","path":"9-5-functions-reference.html#zellij","title":"zellij"},"subsections":[]}]}]},{"section":{"id":"6-dependency-catalog","level":"1","number":"10","path":"10-6-dependency-catalog.html","title":"6. DEPENDENCY CATALOG"},"subsections":[{"section":{"id":"required","level":"2","number":"10.1","path":"10-6-dependency-catalog.html#required","title":"Required"},"subsections":[]},{"section":{"id":"integrations-1","level":"2","number":"10.2","path":"10-6-dependency-catalog.html#integrations-1","title":"Integrations"},"subsections":[]},{"section":{"id":"recommended","level":"2","number":"10.3","path":"10-6-dependency-catalog.html#recommended","title":"Recommended"},"subsections":[]},{"section":{"id":"install-methods","level":"2","number":"10.4","path":"10-6-dependency-catalog.html#install-methods","title":"Install Methods"},"subsections":[]}]},{"section":{"id":"7-customization","level":"1","number":"11","path":"11-7-customization.html","title":"7. CUSTOMIZATION"},"subsections":[{"section":{"id":"machine-local-configuration","level":"2","number":"11.1","path":"11-7-customization.html#machine-local-configuration","title":"Machine-local Configuration"},"subsections":[]},{"section":{"id":"secrets-and-api-keys","level":"2","number":"11.2","path":"11-7-customization.html#secrets-and-api-keys","title":"Secrets and API Keys"},"subsections":[]},{"section":{"id":"overriding-configuration-variables","level":"2","number":"11.3","path":"11-7-customization.html#overriding-configuration-variables","title":"Overriding Configuration Variables"},"subsections":[]},{"section":{"id":"fish-universal-variables","level":"2","number":"11.4","path":"11-7-customization.html#fish-universal-variables","title":"Fish Universal Variables"},"subsections":[]},{"section":{"id":"prompt-and-theme","level":"2","number":"11.5","path":"11-7-customization.html#prompt-and-theme","title":"Prompt and Theme"},"subsections":[{"section":{"id":"starship","level":"3","number":"11.5.1","path":"11-7-customization.html#starship","title":"Starship"},"subsections":[]},{"section":{"id":"fzf","level":"3","number":"11.5.2","path":"11-7-customization.html#fzf","title":"FZF"},"subsections":[]},{"section":{"id":"catppuccin-mocha-syntax-highlighting","level":"3","number":"11.5.3","path":"11-7-customization.html#catppuccin-mocha-syntax-highlighting","title":"Catppuccin Mocha Syntax Highlighting"},"subsections":[]}]}]},{"section":{"id":"8-fisher-plugins","level":"1","number":"12","path":"12-8-fisher-plugins.html","title":"8. FISHER PLUGINS"},"subsections":[]},{"section":{"id":"9-installation","level":"1","number":"13","path":"13-9-installation.html","title":"9. INSTALLATION"},"subsections":[{"section":{"id":"return-sentinel","level":"2","number":"13.1","path":"13-9-installation.html#return-sentinel","title":"Return Sentinel"},"subsections":[]},{"section":{"id":"updating","level":"2","number":"13.2","path":"13-9-installation.html#updating","title":"Updating"},"subsections":[]}]},{"section":{"id":"10-personalization","level":"1","number":"14","path":"14-10-personalization.html","title":"10. PERSONALIZATION"},"subsections":[{"section":{"id":"secretsfish","level":"2","number":"14.1","path":"14-10-personalization.html#secretsfish","title":"secrets.fish"},"subsections":[]},{"section":{"id":"localfish","level":"2","number":"14.2","path":"14-10-personalization.html#localfish","title":"local.fish"},"subsections":[]}]},{"section":{"id":"11-viewing-this-manual","level":"1","number":"15","path":"15-11-viewing-this-manual.html","title":"11. VIEWING THIS MANUAL"},"subsections":[{"section":{"id":"with-ov-recommended","level":"2","number":"15.1","path":"15-11-viewing-this-manual.html#with-ov-recommended","title":"With ov (recommended)"},"subsections":[]},{"section":{"id":"with-bat","level":"2","number":"15.2","path":"15-11-viewing-this-manual.html#with-bat","title":"With bat"},"subsections":[]},{"section":{"id":"as-a-man-page","level":"2","number":"15.3","path":"15-11-viewing-this-manual.html#as-a-man-page","title":"As a man page"},"subsections":[]},{"section":{"id":"in-the-browser-html","level":"2","number":"15.4","path":"15-11-viewing-this-manual.html#in-the-browser-html","title":"In the browser (HTML)"},"subsections":[]},{"section":{"id":"as-a-wiki","level":"2","number":"15.5","path":"15-11-viewing-this-manual.html#as-a-wiki","title":"As a wiki"},"subsections":[]},{"section":{"id":"jumping-to-a-section","level":"2","number":"15.6","path":"15-11-viewing-this-manual.html#jumping-to-a-section","title":"Jumping to a section"},"subsections":[]}]}]} \ No newline at end of file +{"section":{"id":"","level":"0","number":null,"path":"index.html","title":"FISH-CONFIG"},"subsections":[{"section":{"id":"name","level":"1","number":"1","path":"1-name.html","title":"NAME"},"subsections":[]},{"section":{"id":"synopsis","level":"1","number":"2","path":"2-synopsis.html","title":"SYNOPSIS"},"subsections":[]},{"section":{"id":"description","level":"1","number":"3","path":"3-description.html","title":"DESCRIPTION"},"subsections":[]},{"section":{"id":"table-of-contents","level":"1","number":"4","path":"4-table-of-contents.html","title":"TABLE OF CONTENTS"},"subsections":[]},{"section":{"id":"1-configuration-variables","level":"1","number":"5","path":"5-1-configuration-variables.html","title":"1. CONFIGURATION VARIABLES"},"subsections":[{"section":{"id":"environment-directories-xdg","level":"2","number":"5.1","path":"5-1-configuration-variables.html#environment-directories-xdg","title":"Environment Directories (XDG)"},"subsections":[]},{"section":{"id":"tool-homes-xdg-compliant","level":"2","number":"5.2","path":"5-1-configuration-variables.html#tool-homes-xdg-compliant","title":"Tool Homes (XDG-compliant)"},"subsections":[]},{"section":{"id":"editor-and-pager","level":"2","number":"5.3","path":"5-1-configuration-variables.html#editor-and-pager","title":"Editor and Pager"},"subsections":[]},{"section":{"id":"scrollback-history","level":"2","number":"5.4","path":"5-1-configuration-variables.html#scrollback-history","title":"Scrollback History"},"subsections":[]},{"section":{"id":"other","level":"2","number":"5.5","path":"5-1-configuration-variables.html#other","title":"Other"},"subsections":[]},{"section":{"id":"pager-hierarchy","level":"2","number":"5.6","path":"5-1-configuration-variables.html#pager-hierarchy","title":"Pager Hierarchy"},"subsections":[]},{"section":{"id":"integrations","level":"2","number":"5.7","path":"5-1-configuration-variables.html#integrations","title":"Integrations"},"subsections":[{"section":{"id":"zoxide","level":"3","number":"5.7.1","path":"5-1-configuration-variables.html#zoxide","title":"Zoxide"},"subsections":[]},{"section":{"id":"direnv","level":"3","number":"5.7.2","path":"5-1-configuration-variables.html#direnv","title":"DirEnv"},"subsections":[]},{"section":{"id":"auto-python-venv","level":"3","number":"5.7.3","path":"5-1-configuration-variables.html#auto-python-venv","title":"Auto Python Venv"},"subsections":[]},{"section":{"id":"wakatime","level":"3","number":"5.7.4","path":"5-1-configuration-variables.html#wakatime","title":"WakaTime"},"subsections":[]},{"section":{"id":"tailscale","level":"3","number":"5.7.5","path":"5-1-configuration-variables.html#tailscale","title":"Tailscale"},"subsections":[]},{"section":{"id":"done-notifications","level":"3","number":"5.7.6","path":"5-1-configuration-variables.html#done-notifications","title":"Done Notifications"},"subsections":[]},{"section":{"id":"scrollback-history-1","level":"3","number":"5.7.7","path":"5-1-configuration-variables.html#scrollback-history-1","title":"Scrollback History"},"subsections":[]}]}]},{"section":{"id":"2-path-setup","level":"1","number":"6","path":"6-2-path-setup.html","title":"2. PATH SETUP"},"subsections":[]},{"section":{"id":"3-key-bindings","level":"1","number":"7","path":"7-3-key-bindings.html","title":"3. KEY BINDINGS"},"subsections":[{"section":{"id":"fzf-bindings-bundled-from-patrickf1fzffish","level":"2","number":"7.1","path":"7-3-key-bindings.html#fzf-bindings-bundled-from-patrickf1fzffish","title":"FZF Bindings (bundled from PatrickF1/fzf.fish)"},"subsections":[]}]},{"section":{"id":"4-abbreviations","level":"1","number":"8","path":"8-4-abbreviations.html","title":"4. ABBREVIATIONS"},"subsections":[{"section":{"id":"41-editors","level":"2","number":"8.1","path":"8-4-abbreviations.html#41-editors","title":"4.1 Editors"},"subsections":[]},{"section":{"id":"42-navigation-and-listing","level":"2","number":"8.2","path":"8-4-abbreviations.html#42-navigation-and-listing","title":"4.2 Navigation and Listing"},"subsections":[]},{"section":{"id":"43-git","level":"2","number":"8.3","path":"8-4-abbreviations.html#43-git","title":"4.3 Git"},"subsections":[]},{"section":{"id":"44-terminal-windows-tabs-and-panes","level":"2","number":"8.4","path":"8-4-abbreviations.html#44-terminal-windows-tabs-and-panes","title":"4.4 Terminal Windows, Tabs, and Panes"},"subsections":[]},{"section":{"id":"45-chezmoi","level":"2","number":"8.5","path":"8-4-abbreviations.html#45-chezmoi","title":"4.5 Chezmoi"},"subsections":[]},{"section":{"id":"46-docker","level":"2","number":"8.6","path":"8-4-abbreviations.html#46-docker","title":"4.6 Docker"},"subsections":[]},{"section":{"id":"47-systemctl","level":"2","number":"8.7","path":"8-4-abbreviations.html#47-systemctl","title":"4.7 Systemctl"},"subsections":[]},{"section":{"id":"48-ai-assistants","level":"2","number":"8.8","path":"8-4-abbreviations.html#48-ai-assistants","title":"4.8 AI Assistants"},"subsections":[]},{"section":{"id":"49-history-expansion","level":"2","number":"8.9","path":"8-4-abbreviations.html#49-history-expansion","title":"4.9 History Expansion"},"subsections":[]},{"section":{"id":"410-miscellaneous","level":"2","number":"8.10","path":"8-4-abbreviations.html#410-miscellaneous","title":"4.10 Miscellaneous"},"subsections":[]},{"section":{"id":"411-shell-aliases","level":"2","number":"8.11","path":"8-4-abbreviations.html#411-shell-aliases","title":"4.11 Shell Aliases"},"subsections":[{"section":{"id":"navigation","level":"3","number":"8.11.1","path":"8-4-abbreviations.html#navigation","title":"Navigation"},"subsections":[]},{"section":{"id":"color-overrides","level":"3","number":"8.11.2","path":"8-4-abbreviations.html#color-overrides","title":"Color Overrides"},"subsections":[]},{"section":{"id":"safety-wrappers","level":"3","number":"8.11.3","path":"8-4-abbreviations.html#safety-wrappers","title":"Safety Wrappers"},"subsections":[]},{"section":{"id":"archives-and-networking","level":"3","number":"8.11.4","path":"8-4-abbreviations.html#archives-and-networking","title":"Archives and Networking"},"subsections":[]},{"section":{"id":"system-logs","level":"3","number":"8.11.5","path":"8-4-abbreviations.html#system-logs","title":"System Logs"},"subsections":[]}]}]},{"section":{"id":"5-functions-reference","level":"1","number":"9","path":"9-5-functions-reference.html","title":"5. FUNCTIONS REFERENCE"},"subsections":[{"section":{"id":"51-file-and-directory","level":"2","number":"9.1","path":"9-5-functions-reference.html#51-file-and-directory","title":"5.1 File and Directory"},"subsections":[{"section":{"id":"cat","level":"3","number":"9.1.1","path":"9-5-functions-reference.html#cat","title":"cat"},"subsections":[]},{"section":{"id":"copy","level":"3","number":"9.1.2","path":"9-5-functions-reference.html#copy","title":"copy"},"subsections":[]},{"section":{"id":"du","level":"3","number":"9.1.3","path":"9-5-functions-reference.html#du","title":"du"},"subsections":[]},{"section":{"id":"dusize","level":"3","number":"9.1.4","path":"9-5-functions-reference.html#dusize","title":"dusize"},"subsections":[]},{"section":{"id":"ld","level":"3","number":"9.1.5","path":"9-5-functions-reference.html#ld","title":"lD"},"subsections":[]},{"section":{"id":"ls","level":"3","number":"9.1.6","path":"9-5-functions-reference.html#ls","title":"ls"},"subsections":[]},{"section":{"id":"lsr","level":"3","number":"9.1.7","path":"9-5-functions-reference.html#lsr","title":"lsr"},"subsections":[]},{"section":{"id":"lss","level":"3","number":"9.1.8","path":"9-5-functions-reference.html#lss","title":"lss"},"subsections":[]},{"section":{"id":"lstree","level":"3","number":"9.1.9","path":"9-5-functions-reference.html#lstree","title":"lstree"},"subsections":[]},{"section":{"id":"lt","level":"3","number":"9.1.10","path":"9-5-functions-reference.html#lt","title":"lt"},"subsections":[]},{"section":{"id":"ltr","level":"3","number":"9.1.11","path":"9-5-functions-reference.html#ltr","title":"ltr"},"subsections":[]},{"section":{"id":"lx","level":"3","number":"9.1.12","path":"9-5-functions-reference.html#lx","title":"lx"},"subsections":[]},{"section":{"id":"mkdir","level":"3","number":"9.1.13","path":"9-5-functions-reference.html#mkdir","title":"mkdir"},"subsections":[]},{"section":{"id":"mkcd","level":"3","number":"9.1.14","path":"9-5-functions-reference.html#mkcd","title":"mkcd"},"subsections":[]},{"section":{"id":"poke","level":"3","number":"9.1.15","path":"9-5-functions-reference.html#poke","title":"poke"},"subsections":[]},{"section":{"id":"rm","level":"3","number":"9.1.16","path":"9-5-functions-reference.html#rm","title":"rm"},"subsections":[]},{"section":{"id":"scrub","level":"3","number":"9.1.17","path":"9-5-functions-reference.html#scrub","title":"scrub"},"subsections":[]}]},{"section":{"id":"52-navigation","level":"2","number":"9.2","path":"9-5-functions-reference.html#52-navigation","title":"5.2 Navigation"},"subsections":[{"section":{"id":"cdi","level":"3","number":"9.2.1","path":"9-5-functions-reference.html#cdi","title":"cdi"},"subsections":[]},{"section":{"id":"clone","level":"3","number":"9.2.2","path":"9-5-functions-reference.html#clone","title":"clone"},"subsections":[]},{"section":{"id":"clonet","level":"3","number":"9.2.3","path":"9-5-functions-reference.html#clonet","title":"clonet"},"subsections":[]}]},{"section":{"id":"53-editors-and-viewers","level":"2","number":"9.3","path":"9-5-functions-reference.html#53-editors-and-viewers","title":"5.3 Editors and Viewers"},"subsections":[{"section":{"id":"edit","level":"3","number":"9.3.1","path":"9-5-functions-reference.html#edit","title":"edit"},"subsections":[]},{"section":{"id":"fc","level":"3","number":"9.3.2","path":"9-5-functions-reference.html#fc","title":"fc"},"subsections":[]},{"section":{"id":"less","level":"3","number":"9.3.3","path":"9-5-functions-reference.html#less","title":"less"},"subsections":[]},{"section":{"id":"rawfish","level":"3","number":"9.3.4","path":"9-5-functions-reference.html#rawfish","title":"rawfish"},"subsections":[]},{"section":{"id":"view","level":"3","number":"9.3.5","path":"9-5-functions-reference.html#view","title":"view"},"subsections":[]}]},{"section":{"id":"54-git-and-version-control","level":"2","number":"9.4","path":"9-5-functions-reference.html#54-git-and-version-control","title":"5.4 Git and Version Control"},"subsections":[{"section":{"id":"branch","level":"3","number":"9.4.1","path":"9-5-functions-reference.html#branch","title":"branch"},"subsections":[]},{"section":{"id":"gi","level":"3","number":"9.4.2","path":"9-5-functions-reference.html#gi","title":"gi"},"subsections":[]},{"section":{"id":"git-clean","level":"3","number":"9.4.3","path":"9-5-functions-reference.html#git-clean","title":"git-clean"},"subsections":[]},{"section":{"id":"gitup","level":"3","number":"9.4.4","path":"9-5-functions-reference.html#gitup","title":"gitup"},"subsections":[]},{"section":{"id":"gitui","level":"3","number":"9.4.5","path":"9-5-functions-reference.html#gitui","title":"gitui"},"subsections":[]},{"section":{"id":"hist","level":"3","number":"9.4.6","path":"9-5-functions-reference.html#hist","title":"hist"},"subsections":[]}]},{"section":{"id":"55-package-management","level":"2","number":"9.5","path":"9-5-functions-reference.html#55-package-management","title":"5.5 Package Management"},"subsections":[{"section":{"id":"pkg","level":"3","number":"9.5.1","path":"9-5-functions-reference.html#pkg","title":"pkg"},"subsections":[]},{"section":{"id":"search","level":"3","number":"9.5.2","path":"9-5-functions-reference.html#search","title":"search"},"subsections":[]},{"section":{"id":"upgrade","level":"3","number":"9.5.3","path":"9-5-functions-reference.html#upgrade","title":"upgrade"},"subsections":[]},{"section":{"id":"cleanup","level":"3","number":"9.5.4","path":"9-5-functions-reference.html#cleanup","title":"cleanup"},"subsections":[]},{"section":{"id":"parur","level":"3","number":"9.5.5","path":"9-5-functions-reference.html#parur","title":"parur"},"subsections":[]}]},{"section":{"id":"56-dependency-management","level":"2","number":"9.6","path":"9-5-functions-reference.html#56-dependency-management","title":"5.6 Dependency Management"},"subsections":[{"section":{"id":"fish-deps","level":"3","number":"9.6.1","path":"9-5-functions-reference.html#fish-deps","title":"fish-deps"},"subsections":[]},{"section":{"id":"check_fish_deps","level":"3","number":"9.6.2","path":"9-5-functions-reference.html#check_fish_deps","title":"check_fish_deps"},"subsections":[]}]},{"section":{"id":"57-system-and-monitoring","level":"2","number":"9.7","path":"9-5-functions-reference.html#57-system-and-monitoring","title":"5.7 System and Monitoring"},"subsections":[{"section":{"id":"top","level":"3","number":"9.7.1","path":"9-5-functions-reference.html#top","title":"top"},"subsections":[]},{"section":{"id":"swapstat","level":"3","number":"9.7.2","path":"9-5-functions-reference.html#swapstat","title":"swapstat"},"subsections":[]},{"section":{"id":"sbver","level":"3","number":"9.7.3","path":"9-5-functions-reference.html#sbver","title":"sbver"},"subsections":[]},{"section":{"id":"ports","level":"3","number":"9.7.4","path":"9-5-functions-reference.html#ports","title":"ports"},"subsections":[]},{"section":{"id":"screensleep","level":"3","number":"9.7.5","path":"9-5-functions-reference.html#screensleep","title":"screensleep"},"subsections":[]},{"section":{"id":"lock","level":"3","number":"9.7.6","path":"9-5-functions-reference.html#lock","title":"lock"},"subsections":[]},{"section":{"id":"sudo-toggle","level":"3","number":"9.7.7","path":"9-5-functions-reference.html#sudo-toggle","title":"sudo-toggle"},"subsections":[]},{"section":{"id":"limine-edit","level":"3","number":"9.7.8","path":"9-5-functions-reference.html#limine-edit","title":"limine-edit"},"subsections":[]}]},{"section":{"id":"58-terminal-management","level":"2","number":"9.8","path":"9-5-functions-reference.html#58-terminal-management","title":"5.8 Terminal Management"},"subsections":[{"section":{"id":"tab","level":"3","number":"9.8.1","path":"9-5-functions-reference.html#tab","title":"tab"},"subsections":[]},{"section":{"id":"split","level":"3","number":"9.8.2","path":"9-5-functions-reference.html#split","title":"split"},"subsections":[]},{"section":{"id":"spwin","level":"3","number":"9.8.3","path":"9-5-functions-reference.html#spwin","title":"spwin"},"subsections":[]},{"section":{"id":"detach","level":"3","number":"9.8.4","path":"9-5-functions-reference.html#detach","title":"detach"},"subsections":[]},{"section":{"id":"bkg","level":"3","number":"9.8.5","path":"9-5-functions-reference.html#bkg","title":"bkg"},"subsections":[]},{"section":{"id":"ssh","level":"3","number":"9.8.6","path":"9-5-functions-reference.html#ssh","title":"ssh"},"subsections":[]}]},{"section":{"id":"59-clipboard","level":"2","number":"9.9","path":"9-5-functions-reference.html#59-clipboard","title":"5.9 Clipboard"},"subsections":[{"section":{"id":"y","level":"3","number":"9.9.1","path":"9-5-functions-reference.html#y","title":"y"},"subsections":[]},{"section":{"id":"p","level":"3","number":"9.9.2","path":"9-5-functions-reference.html#p","title":"p"},"subsections":[]},{"section":{"id":"paste","level":"3","number":"9.9.3","path":"9-5-functions-reference.html#paste","title":"paste"},"subsections":[]}]},{"section":{"id":"510-network","level":"2","number":"9.10","path":"9-5-functions-reference.html#510-network","title":"5.10 Network"},"subsections":[{"section":{"id":"gip","level":"3","number":"9.10.1","path":"9-5-functions-reference.html#gip","title":"gip"},"subsections":[]},{"section":{"id":"gip4","level":"3","number":"9.10.2","path":"9-5-functions-reference.html#gip4","title":"gip4"},"subsections":[]},{"section":{"id":"gip6","level":"3","number":"9.10.3","path":"9-5-functions-reference.html#gip6","title":"gip6"},"subsections":[]},{"section":{"id":"ping","level":"3","number":"9.10.4","path":"9-5-functions-reference.html#ping","title":"ping"},"subsections":[]},{"section":{"id":"qr","level":"3","number":"9.10.5","path":"9-5-functions-reference.html#qr","title":"qr"},"subsections":[]}]},{"section":{"id":"511-pager-and-logging","level":"2","number":"9.11","path":"9-5-functions-reference.html#511-pager-and-logging","title":"5.11 Pager and Logging"},"subsections":[{"section":{"id":"logs","level":"3","number":"9.11.1","path":"9-5-functions-reference.html#logs","title":"logs"},"subsections":[]},{"section":{"id":"smart_exit","level":"3","number":"9.11.2","path":"9-5-functions-reference.html#smart_exit","title":"smart_exit"},"subsections":[]}]},{"section":{"id":"512-ai-and-developer-tools","level":"2","number":"9.12","path":"9-5-functions-reference.html#512-ai-and-developer-tools","title":"5.12 AI and Developer Tools"},"subsections":[{"section":{"id":"antigravity","level":"3","number":"9.12.1","path":"9-5-functions-reference.html#antigravity","title":"antigravity"},"subsections":[]},{"section":{"id":"antigravity-ide","level":"3","number":"9.12.2","path":"9-5-functions-reference.html#antigravity-ide","title":"antigravity-ide"},"subsections":[]},{"section":{"id":"antigravity-resume","level":"3","number":"9.12.3","path":"9-5-functions-reference.html#antigravity-resume","title":"antigravity-resume"},"subsections":[]},{"section":{"id":"claude-resume","level":"3","number":"9.12.4","path":"9-5-functions-reference.html#claude-resume","title":"claude-resume"},"subsections":[]},{"section":{"id":"claude-docs","level":"3","number":"9.12.5","path":"9-5-functions-reference.html#claude-docs","title":"claude-docs"},"subsections":[]},{"section":{"id":"claude-pr","level":"3","number":"9.12.6","path":"9-5-functions-reference.html#claude-pr","title":"claude-pr"},"subsections":[]},{"section":{"id":"code-resume","level":"3","number":"9.12.7","path":"9-5-functions-reference.html#code-resume","title":"code-resume"},"subsections":[]},{"section":{"id":"superpowers","level":"3","number":"9.12.8","path":"9-5-functions-reference.html#superpowers","title":"superpowers"},"subsections":[]}]},{"section":{"id":"513-media-and-utilities","level":"2","number":"9.13","path":"9-5-functions-reference.html#513-media-and-utilities","title":"5.13 Media and Utilities"},"subsections":[{"section":{"id":"dng2avif","level":"3","number":"9.13.1","path":"9-5-functions-reference.html#dng2avif","title":"dng2avif"},"subsections":[]},{"section":{"id":"steam-dl","level":"3","number":"9.13.2","path":"9-5-functions-reference.html#steam-dl","title":"steam-dl"},"subsections":[]},{"section":{"id":"spark","level":"3","number":"9.13.3","path":"9-5-functions-reference.html#spark","title":"spark"},"subsections":[]}]},{"section":{"id":"514-miscellaneous","level":"2","number":"9.14","path":"9-5-functions-reference.html#514-miscellaneous","title":"5.14 Miscellaneous"},"subsections":[{"section":{"id":"config-help","level":"3","number":"9.14.1","path":"9-5-functions-reference.html#config-help","title":"config-help"},"subsections":[]},{"section":{"id":"config-update","level":"3","number":"9.14.2","path":"9-5-functions-reference.html#config-update","title":"config-update"},"subsections":[]},{"section":{"id":"bash","level":"3","number":"9.14.3","path":"9-5-functions-reference.html#bash","title":"bash"},"subsections":[]},{"section":{"id":"bd-pull","level":"3","number":"9.14.4","path":"9-5-functions-reference.html#bd-pull","title":"bd-pull"},"subsections":[]},{"section":{"id":"cheat","level":"3","number":"9.14.5","path":"9-5-functions-reference.html#cheat","title":"cheat"},"subsections":[]},{"section":{"id":"cffetch--ffetch","level":"3","number":"9.14.6","path":"9-5-functions-reference.html#cffetch--ffetch","title":"cffetch / ffetch"},"subsections":[]},{"section":{"id":"dockup","level":"3","number":"9.14.7","path":"9-5-functions-reference.html#dockup","title":"dockup"},"subsections":[]},{"section":{"id":"joplin","level":"3","number":"9.14.8","path":"9-5-functions-reference.html#joplin","title":"joplin"},"subsections":[]},{"section":{"id":"ld-1","level":"3","number":"9.14.9","path":"9-5-functions-reference.html#ld-1","title":"ld"},"subsections":[]},{"section":{"id":"replay","level":"3","number":"9.14.10","path":"9-5-functions-reference.html#replay","title":"replay"},"subsections":[]},{"section":{"id":"tmux-clean","level":"3","number":"9.14.11","path":"9-5-functions-reference.html#tmux-clean","title":"tmux-clean"},"subsections":[]},{"section":{"id":"wake-lock","level":"3","number":"9.14.12","path":"9-5-functions-reference.html#wake-lock","title":"wake-lock"},"subsections":[]},{"section":{"id":"zellij","level":"3","number":"9.14.13","path":"9-5-functions-reference.html#zellij","title":"zellij"},"subsections":[]}]}]},{"section":{"id":"6-dependency-catalog","level":"1","number":"10","path":"10-6-dependency-catalog.html","title":"6. DEPENDENCY CATALOG"},"subsections":[{"section":{"id":"required","level":"2","number":"10.1","path":"10-6-dependency-catalog.html#required","title":"Required"},"subsections":[]},{"section":{"id":"integrations-1","level":"2","number":"10.2","path":"10-6-dependency-catalog.html#integrations-1","title":"Integrations"},"subsections":[]},{"section":{"id":"recommended","level":"2","number":"10.3","path":"10-6-dependency-catalog.html#recommended","title":"Recommended"},"subsections":[]},{"section":{"id":"install-methods","level":"2","number":"10.4","path":"10-6-dependency-catalog.html#install-methods","title":"Install Methods"},"subsections":[]}]},{"section":{"id":"7-customization","level":"1","number":"11","path":"11-7-customization.html","title":"7. CUSTOMIZATION"},"subsections":[{"section":{"id":"machine-local-configuration","level":"2","number":"11.1","path":"11-7-customization.html#machine-local-configuration","title":"Machine-local Configuration"},"subsections":[]},{"section":{"id":"secrets-and-api-keys","level":"2","number":"11.2","path":"11-7-customization.html#secrets-and-api-keys","title":"Secrets and API Keys"},"subsections":[]},{"section":{"id":"overriding-configuration-variables","level":"2","number":"11.3","path":"11-7-customization.html#overriding-configuration-variables","title":"Overriding Configuration Variables"},"subsections":[]},{"section":{"id":"fish-universal-variables","level":"2","number":"11.4","path":"11-7-customization.html#fish-universal-variables","title":"Fish Universal Variables"},"subsections":[]},{"section":{"id":"prompt-and-theme","level":"2","number":"11.5","path":"11-7-customization.html#prompt-and-theme","title":"Prompt and Theme"},"subsections":[{"section":{"id":"starship","level":"3","number":"11.5.1","path":"11-7-customization.html#starship","title":"Starship"},"subsections":[]},{"section":{"id":"fzf","level":"3","number":"11.5.2","path":"11-7-customization.html#fzf","title":"FZF"},"subsections":[]},{"section":{"id":"catppuccin-mocha-syntax-highlighting","level":"3","number":"11.5.3","path":"11-7-customization.html#catppuccin-mocha-syntax-highlighting","title":"Catppuccin Mocha Syntax Highlighting"},"subsections":[]}]}]},{"section":{"id":"8-fisher-plugins","level":"1","number":"12","path":"12-8-fisher-plugins.html","title":"8. FISHER PLUGINS"},"subsections":[{"section":{"id":"fisher-managed-plugins","level":"2","number":"12.1","path":"12-8-fisher-plugins.html#fisher-managed-plugins","title":"Fisher-Managed Plugins"},"subsections":[]},{"section":{"id":"sponge-history-filtering","level":"2","number":"12.2","path":"12-8-fisher-plugins.html#sponge-history-filtering","title":"Sponge History Filtering"},"subsections":[]},{"section":{"id":"bundled-plugin-functionality","level":"2","number":"12.3","path":"12-8-fisher-plugins.html#bundled-plugin-functionality","title":"Bundled Plugin Functionality"},"subsections":[]},{"section":{"id":"fish_plugins-manifest","level":"2","number":"12.4","path":"12-8-fisher-plugins.html#fish_plugins-manifest","title":"fish_plugins Manifest"},"subsections":[]}]},{"section":{"id":"9-installation","level":"1","number":"13","path":"13-9-installation.html","title":"9. INSTALLATION"},"subsections":[{"section":{"id":"return-sentinel","level":"2","number":"13.1","path":"13-9-installation.html#return-sentinel","title":"Return Sentinel"},"subsections":[]},{"section":{"id":"updating","level":"2","number":"13.2","path":"13-9-installation.html#updating","title":"Updating"},"subsections":[]}]},{"section":{"id":"10-personalization","level":"1","number":"14","path":"14-10-personalization.html","title":"10. PERSONALIZATION"},"subsections":[{"section":{"id":"secretsfish","level":"2","number":"14.1","path":"14-10-personalization.html#secretsfish","title":"secrets.fish"},"subsections":[]},{"section":{"id":"localfish","level":"2","number":"14.2","path":"14-10-personalization.html#localfish","title":"local.fish"},"subsections":[]}]},{"section":{"id":"11-viewing-this-manual","level":"1","number":"15","path":"15-11-viewing-this-manual.html","title":"11. VIEWING THIS MANUAL"},"subsections":[{"section":{"id":"with-ov-recommended","level":"2","number":"15.1","path":"15-11-viewing-this-manual.html#with-ov-recommended","title":"With ov (recommended)"},"subsections":[]},{"section":{"id":"with-bat","level":"2","number":"15.2","path":"15-11-viewing-this-manual.html#with-bat","title":"With bat"},"subsections":[]},{"section":{"id":"as-a-man-page","level":"2","number":"15.3","path":"15-11-viewing-this-manual.html#as-a-man-page","title":"As a man page"},"subsections":[]},{"section":{"id":"in-the-browser-html","level":"2","number":"15.4","path":"15-11-viewing-this-manual.html#in-the-browser-html","title":"In the browser (HTML)"},"subsections":[]},{"section":{"id":"as-a-wiki","level":"2","number":"15.5","path":"15-11-viewing-this-manual.html#as-a-wiki","title":"As a wiki"},"subsections":[]},{"section":{"id":"jumping-to-a-section","level":"2","number":"15.6","path":"15-11-viewing-this-manual.html#jumping-to-a-section","title":"Jumping to a section"},"subsections":[]}]}]} \ No newline at end of file diff --git a/docs/wiki/3-key-bindings.md b/docs/wiki/3-key-bindings.md index 584e347..4319d2f 100644 --- a/docs/wiki/3-key-bindings.md +++ b/docs/wiki/3-key-bindings.md @@ -40,7 +40,7 @@ are active in Insert, Normal, and Visual modes unless noted. line to open an fzf picker and insert a selection at the cursor position. -## FZF Bindings (from PatrickF1/fzf.fish) +## FZF Bindings (bundled from PatrickF1/fzf.fish) Ctrl+R Search command history Ctrl+Alt+F Search git-tracked files diff --git a/docs/wiki/7-customization.md b/docs/wiki/7-customization.md index 126dc08..75586ba 100644 --- a/docs/wiki/7-customization.md +++ b/docs/wiki/7-customization.md @@ -64,9 +64,9 @@ To customize, override FZF_DEFAULT_OPTS in local.fish. ### Catppuccin Mocha Syntax Highlighting -The catppuccin/fish plugin applies syntax highlight colors on first run. -Colors are stored in fish_variables (universal). To switch variants, install -a different theme from the themes/ directory: +The Catppuccin Mocha theme ships with this config in themes/ and is applied +on first run via `conf.d/first_run.fish`. Colors are stored in fish_variables +(universal). To switch variants, install a different theme from themes/: fish_config theme save "Catppuccin Latte" diff --git a/docs/wiki/8-fisher-plugins.md b/docs/wiki/8-fisher-plugins.md index 94daa31..c6a885f 100644 --- a/docs/wiki/8-fisher-plugins.md +++ b/docs/wiki/8-fisher-plugins.md @@ -16,17 +16,73 @@ testing), run: Then open a new shell. -The plugin list is maintained in fish_plugins at the config root. +## Fisher-Managed Plugins + +The following plugins are fully managed by Fisher. Their files are installed +into the repo directory by Fisher and are listed in `.gitignore` — do not +commit them. Fisher installs and updates them automatically. 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. +## Sponge History Filtering + +Sponge removes failed commands from history and, via conf.d/sponge_privacy.fish, +also filters privacy-sensitive commands through three layers: + +Layer 1 — Static patterns (universal, persistent across sessions): +Commands matching any of these structural signatures are never recorded: + + --password / --token / --passphrase / --api-key flags with values + Inline env assignments: GITHUB_TOKEN=xxx, MY_API_KEY=abc + Fish set with sensitive names: set -gx GITHUB_TOKEN xxx + URLs with embedded credentials: https://user:pass@host + HTTP Authorization headers: curl -H "Authorization: ..." + Basic auth flags: curl -u user:pass + sshpass, docker login -p, openssl -passin/-passout + +Layer 2 — Dynamic secret values (session globals, refreshed each login): +On the first prompt, after secrets.fish has loaded, the literal values of +all exported variables whose names suggest credentials (TOKEN, PASSWORD, +SECRET, API_KEY, etc.) are collected, regex-escaped, and added as a +session-scoped overlay. Because globals shadow universals in Fish, the +combined list is what sponge sees. Rotating a token takes effect on the +next login automatically. + +Layer 3 — Per-command filter (sponge_filter_secrets): +Catches credentials in variables exported after login, such as tokens +sourced from a project .env file mid-session. + +To add your own persistent patterns: + + set -U -a sponge_regex_patterns 'your-regex-here' + +## Bundled Plugin Functionality + +The remaining plugin functionality is bundled directly with this config rather +than managed through Fisher. The bundled versions include customizations for +Fish 4.x compatibility and improved behavior that differ from their upstream +releases. Installing them through Fisher would overwrite these customizations. + +Bundled components and their upstream origins: + + catppuccin/fish → themes/ + conf.d/theme.fish + PatrickF1/fzf.fish → functions/_fzf_*.fish + conf.d/fzf.fish + franciscolourenco/done → conf.d/done.fish + jorgebucaran/autopair.fish → functions/_autopair_*.fish + conf.d/autopair.fish + nickeb96/puffer-fish → functions/_puffer_fish_*.fish + conf.d/puffer.fish + +Do not run `fisher install` for these — it will overwrite the customized +versions. To update their behavior, edit the relevant bundled files directly. + +## fish_plugins Manifest + +The `fish_plugins` file at the config root: + + jorgebucaran/fisher Plugin manager itself + meaningful-ooo/sponge Remove failed commands from history + +To update all Fisher-managed plugins, run `fisher update` or `fish-deps +update` which calls it as its first step. --- diff --git a/docs/wiki/9-installation.md b/docs/wiki/9-installation.md index 1fb60af..b220bdf 100644 --- a/docs/wiki/9-installation.md +++ b/docs/wiki/9-installation.md @@ -9,8 +9,9 @@ This configuration is managed as a git repository. To deploy on a new machine: mv ~/.config/fish ~/.config/fish.bak # back up any existing config git clone https://git.rootiest.dev/rootiest/fish-config.git ~/.config/fish -Then open a new Fish shell. Fisher and all plugins install automatically on -first launch and the Catppuccin Mocha theme is applied. +Then open a new Fish shell. Fisher installs automatically on first launch +and the Catppuccin Mocha theme is applied. All other plugin functionality is +bundled directly with this config and requires no additional installation. ## Return Sentinel