Adds conf.d/first_run.fish — runs exactly once on the first interactive fish session, guarded by the universal variable __fish_config_first_run_complete
Prints a one-time welcome message with hints for config-help and fish-deps
Automatically bootstraps Fisher + all plugins from fish_plugins (silent, no prompt)
Applies the Catppuccin Mocha theme on first run
Removes the old interactive Fisher prompt from config.fish (the read -l -P "Install Fisher?" block)
Error handling distinguishes Fisher install failure from plugin sync failure, both reporting to stderr
Reset mechanism: set -Ue __fish_config_first_run_complete + new shell re-triggers everything
Updates docs/fish-config.md and README.md to document the new behavior
Manual Verification
Clone the repo fresh (or set -Ue __fish_config_first_run_complete) and open a new interactive shell — confirm the welcome message appears, Fisher installs, and the Catppuccin Mocha theme is applied
Open a second shell immediately after — confirm no welcome message and no Fisher output (idempotency)
Run fish -c "echo hello" — confirm no welcome message appears (non-interactive guard)
Verify set -q __fish_config_first_run_complete returns true after first-run completes
Check config-help and fish-deps commands are accessible after first-run (plugins loaded correctly)
## Summary
- Adds `conf.d/first_run.fish` — runs exactly once on the first interactive fish session, guarded by the universal variable `__fish_config_first_run_complete`
- Prints a one-time welcome message with hints for `config-help` and `fish-deps`
- Automatically bootstraps Fisher + all plugins from `fish_plugins` (silent, no prompt)
- Applies the Catppuccin Mocha theme on first run
- Removes the old interactive Fisher prompt from `config.fish` (the `read -l -P "Install Fisher?"` block)
- Error handling distinguishes Fisher install failure from plugin sync failure, both reporting to stderr
- Reset mechanism: `set -Ue __fish_config_first_run_complete` + new shell re-triggers everything
- Updates `docs/fish-config.md` and `README.md` to document the new behavior
## Manual Verification
- [x] Clone the repo fresh (or `set -Ue __fish_config_first_run_complete`) and open a new interactive shell — confirm the welcome message appears, Fisher installs, and the Catppuccin Mocha theme is applied
- [x] Open a second shell immediately after — confirm no welcome message and no Fisher output (idempotency)
- [x] Run `fish -c "echo hello"` — confirm no welcome message appears (non-interactive guard)
- [x] Verify `set -q __fish_config_first_run_complete` returns true after first-run completes
- [x] Check `config-help` and `fish-deps` commands are accessible after first-run (plugins loaded correctly)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
conf.d/first_run.fish— runs exactly once on the first interactive fish session, guarded by the universal variable__fish_config_first_run_completeconfig-helpandfish-depsfish_plugins(silent, no prompt)config.fish(theread -l -P "Install Fisher?"block)set -Ue __fish_config_first_run_complete+ new shell re-triggers everythingdocs/fish-config.mdandREADME.mdto document the new behaviorManual Verification
set -Ue __fish_config_first_run_complete) and open a new interactive shell — confirm the welcome message appears, Fisher installs, and the Catppuccin Mocha theme is appliedfish -c "echo hello"— confirm no welcome message appears (non-interactive guard)set -q __fish_config_first_run_completereturns true after first-run completesconfig-helpandfish-depscommands are accessible after first-run (plugins loaded correctly)