Skip to content

Components Reference

The following tables detail every component in each category. Use this reference to understand exactly which behaviors change when you toggle a category variable.

Category Description
C1 Command Shadows — Wraps destructive commands (rm, cp) to be safe by default
C2 Startup Side-Effects — Bootstraps Fisher, generates wrappers, auto-activates venvs
C3 [Overrides](/08-components-reference/03-c3-key-and-environment-overrides/) — Overrides cd, sets Vi mode, binds <CR> to smart_enter
C4 Integrations — Kitty/Wezterm integrations, starship hooks, fzf theme
C5 Logging and Capture — Session logs, command duration
C6 Greeting & First-Run UI — Custom startup banner

Each category further sub-divides into several sub-categories, each with its own __fish_config_op_<category>_<subcategory> toggle – see that category’s page for its sub-category list.

Every guard variable (__fish_config_opinionated, the six __fish_config_op_<category> variables, and every __fish_config_op_<category>_<subcategory> toggle) is read the same way, case-insensitively:

Truthy (enable) 1 true yes on y
Falsy (disable) 0 false no off n

An unset, empty, or unrecognized value is treated as unset: the toggle falls back to the next level (sub-category to category, category to master switch) and finally to the category default. Opt-in C5 logging stays off. A value that is set but unrecognized (a typo such as disabled or ture) also prints a one-time warning to stderr per variable per shell session, naming the variable and the value; the toggle is otherwise still ignored.

Every guarded function or file can also carry a reserved always/on or always/off tag in its # COMPONENT header, independent of every C1-C6 category and sub-category toggle and invisible to config-settings. An always/off tag disables that function unconditionally; an always/on tag enables it unconditionally, ignoring the state of every other tagged sub-category. This is a per-function escape hatch for cases too granular or too idiosyncratic to justify a taxonomy entry – edit the header directly and run __fish_config_op_registry_rebuild to apply the change.

Not every startup action is a component. Adding the user-dots functions/ directory to the front of $fish_function_path (conf.d/user-dots-functions.fish) is deliberately unguarded: the directory exists only if you created it, and gating it would silently unload your own functions.