Troubleshooting
This section covers common issues, their solutions, and how to safely revert changes or uninstall the configuration entirely.
Uninstalling / Reverting to Backup
Section titled “Uninstalling / Reverting to Backup”The installation step backs up any existing config to ~/.config/fish.bak.
To revert:
rm -rf ~/.config/fishmv ~/.config/fish.bak ~/.config/fishIf no backup exists, remove the directory and let Fish regenerate a default config on next launch:
rm -rf ~/.config/fishfish -c 'fish_config theme choose "Fish default"'Clean up files generated outside the config directory:
rm -f ~/.local/bin/paru ~/.local/bin/yay # AUR log wrappersrm -f ~/.local/share/man/man1/fish-config.1 # man page symlinkrm -f ~/.config/fish/.logging_disabled # C5 sentinelErase universal variables set by this config:
for v in (set -Un | string match ‘__fish_config*’) set -Ue $v end for v in __done_min_cmd_duration _done_notification_urgency_level set -Ue $v end for v in (set -Un | string match ‘sponge*’) set -Ue $v end
The ~/.terminal_history/ log directory contains your session logs. Remove
it only if you do not want to keep them.
Fish Version Requirement
Section titled “Fish Version Requirement”This config requires Fish 4.x or newer. Check your version:
fish --versionRun fish-deps to see a status report — an outdated Fish shows ⚠ with an
upgrade message.
Upgrading Fish by distribution:
# Arch / AURpacman -S fish # or paru -S fish# Ubuntu / Debian (PPA)sudo apt-add-repository ppa:fish-shell/release-4sudo apt update && sudo apt install fish# Fedorasudo dnf install fish# macOSbrew install fishFor other systems or building from source, see https://fishshell.com.
Disable Session Logging
Section titled “Disable Session Logging”Disable all logging and capture (scrollback, tmux/zellij pane logs, AUR helper wrappers, Kitty watcher):
set -U __fish_config_op_logging offOr toggle it interactively: run config-settings and flip the Logging row.
This takes effect immediately in all running shells — no restart needed. The sentinel file, wrapper removal, and pipe-pane teardown happen automatically.
Re-enable:
set -Ue __fish_config_op_loggingSee Section 7, “C5 — Logging and Capture” for the full component breakdown.
Change or Disable the Greeting
Section titled “Change or Disable the Greeting”This config suppresses the distro greeting (e.g. CachyOS fastfetch) by default. To let the distro greeting through:
set -U __fish_config_op_greeting offTo set a custom greeting, define fish_greeting in your local.fish:
in $__fish_user_dots_path/local.fish
Section titled “in $__fish_user_dots_path/local.fish”function fish_greeting echo “Hello, world!” end
The first-run welcome banner runs exactly once. To re-trigger it (e.g. for testing):
set -Ue __fish_config_first_run_completeSee Section 7, “C6 — Greeting and First-Run UI” for details.
Secrets and Machine-Local Configuration
Section titled “Secrets and Machine-Local Configuration”Machine-specific config goes in $__fish_user_dots_path/local.fish (defaults
to ~/.config/.user-dots/fish/local.fish). Secrets go in secrets.fish in
the same directory.
If local.fish is not loading, verify the path:
echo $__fish_user_dots_pathtest -f "$__fish_user_dots_path/local.fish"; and echo exists; or echo missingChange the path via variable or TUI:
set -U __fish_user_dots_path /new/path/to/dots/fishOr run config-settings, navigate to the Paths page, and edit “Dots path”.
The user-dots convenience symlink in the config directory tracks this path.
Disable it with:
set -U __fish_user_dots_symlink falseSee Section 10, “Personalization” for the full local.fish / secrets.fish layout.
Tool Init Does Nothing (Return Sentinel)
Section titled “Tool Init Does Nothing (Return Sentinel)”Symptom: you ran a tool’s setup command (e.g.
starship init fish >> ~/.config/fish/config.fish) and nothing changed.
Cause: config.fish ends with a return guard. Any lines appended after it
are never executed.
Fix: create a dedicated conf.d file instead of appending to config.fish:
~/.config/fish/conf.d/mytool.fish
Section titled “~/.config/fish/conf.d/mytool.fish”mytool init fish | source
All existing integrations (starship, zoxide, direnv) already have conf.d/ files. See Section 9, “Return Sentinel” for background.
Missing Dependencies
Section titled “Missing Dependencies”Run fish-deps (defaults to fish-deps status) to see what is installed
and what is missing. Common symptoms and their missing tools:
| Symptom | Missing tool |
|---|---|
ls output has no icons or colors |
eza (or lsd) |
cd does not remember directories |
zoxide |
cat shows no syntax highlighting |
bat |
fzf keybindings do nothing |
fzf |
Starship prompt not appearing |
starship |
Install missing dependencies interactively:
fish-deps install
Or install everything missing and update what is installed:
fish-deps sync
See Section 6, “Dependency Catalog” for the full list grouped by tier (required, integrations, recommended).
Vi Mode Keybindings
Section titled “Vi Mode Keybindings”This config enables Vi mode by default (via C3 overrides), replacing the standard Emacs-style bindings. If Vi mode interferes with your workflow, override it in local.fish:
in $__fish_user_dots_path/local.fish
Section titled “in $__fish_user_dots_path/local.fish”fish_default_key_bindings
This restores Emacs-style bindings without disabling the rest of C3 (bang-bang, autopair, starship prompt, pager settings, etc.).
To disable the entire C3 category (Vi mode and all other key/environment overrides):
set -U __fish_config_op_overrides offSee Section 7, “C3 — Key and Environment Overrides” for the full list of what C3 controls.
Minimal Mode / Disabling Opinionated Features
Section titled “Minimal Mode / Disabling Opinionated Features”Disable all opinionated features at once:
set -U __fish_config_opinionated 0This turns off all six categories (aliases, auto-exec, overrides, integrations, logging, greeting) — leaving a clean shell with only PATH, XDG variables, and local.fish sourcing.
Disable a single category:
set -U __fish_config_op_aliases off # C1 — command shadowsset -U __fish_config_op_autoexec off # C2 — startup side-effectsset -U __fish_config_op_overrides off # C3 — key/env overridesset -U __fish_config_op_integrations off # C4 — terminal integrationsset -U __fish_config_op_logging off # C5 — logging and captureset -U __fish_config_op_greeting off # C6 — greetingKeep one category active under a master disable:
set -U __fish_config_opinionated 0set -U __fish_config_op_aliases 1 # only C1 stays onRe-enable everything:
set -Ue __fish_config_opinionatedOr use the interactive TUI: config-settings.
See Section 7, “Opinionated Components (Minimal Mode)” for the full component reference tables.