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.
Accepted values for guard variables
Section titled “Accepted values for guard variables”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 yFalsy (disable) 0 false no off nAn 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.
Per-function overrides: C0/always
Section titled “Per-function overrides: C0/always”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.