C2 — Startup Side-Effects
These run automatically without any user action. Disabling
__fish_config_op_autoexec prevents all of them.
Component Trigger What it does───────────────────────────────────────────────────────────────────────────Fisher bootstrap First shell only Downloads and installs fisherFisher update After bootstrap Installs all fish_plugins entriesCatppuccin Mocha theme First shell only Applies theme via fish_configparu wrapper Every startup Writes ~/.local/bin/paru wrapperyay wrapper Every startup Writes ~/.local/bin/yay wrapperPython venv activation On every cd Sources .venv/bin/activate.fishWakaTime command hook On every command Reports to WakaTime APIAuto-pull fast-forward On entering a repo Background ff-only git pullVault background push On claude/agy launch Background push of unpushed vault commitsuser-dots symlink Every startup Links $__fish_config_dir/user-dots to $__fish_user_dots_pathWhen C2 is disabled: no Fisher install, no theme application, no paru/yay
wrapper generation, no automatic venv activation, no WakaTime reporting,
no auto-pull (the PWD handler is never registered), no background push of
the agent memory vault (agents-vault --push-bg still commits), and the user-dots
convenience symlink is not created. The symlink is git-ignored and only ever
managed as a symlink — a real file or directory at that path is left untouched.
The symlink has its own opt-out independent of C2: set __fish_user_dots_symlink
to a falsy value (or toggle “Dots link” off on the config-settings Paths page)
to stop generating it and remove any existing link — honoured even when C2 is
enabled. Managed by the __fish_user_dots_link helper.
The first-run completion marker (__fish_config_first_run_complete) is still
set so the init does not re-run on subsequent shells. A failed Fisher bootstrap
is tracked separately (__fish_config_bootstrap_pending) and retried at most
once a day while C2 and the plugin-management sub-category are enabled.
Python venv activation fires on every directory change. If a directory uses
direnv (.envrc present), direnv takes priority and auto-venv is skipped for
that directory.
Auto-pull fast-forwards opted-in repositories in the background when you cd
into them. The fish-config repo is always covered; other repos are added with
the auto-pull command (see its entry in the functions reference). It only
ever fast-forwards a clean repo whose branch has an upstream — never rebases,
merges, or overwrites work — so it is a no-op on dirty trees, divergent
branches, or repos without a remote. Its fetch never prompts for
credentials, passphrases or host keys; a remote that needs them, or cannot
be reached, is skipped quietly (within 10s for ssh, 60s overall where
timeout is installed). The handler fires once per repo entry
(not on every sub-directory cd). The registry is machine-local at
$__fish_user_dots_path/auto-pull.list (defaults to ~/.config/.user-dots/fish/auto-pull.list) and is never committed.
Sub-categories
Section titled “Sub-categories”__fish_config_op_autoexec sub-divides into five sub-categories, each
with its own __fish_config_op_autoexec_<slug> toggle:
plugin-management
Section titled “plugin-management”Fisher bootstrap on first run.
pkg-wrappers
Section titled “pkg-wrappers”paru/yay wrapper generation.
Automatic Python virtualenv activation.
telemetry
Section titled “telemetry”The WakaTime hook’s startup bootstrap.
Auto-pull background fast-forward, and the user-dots convenience symlink.