Overview
This Fish shell configuration follows 12-factor app principles for portability and maintainability. It’s designed to work consistently across different environments with minimal setup.12-Factor Design Principles
The configuration applies these principles:- Config: Environment variables for all configuration
- Dependencies: Explicit tool declarations with conditional loading
- Dev/Prod Parity: Consistent abbreviations and settings
- Portability: Works across different systems without modification
Environment Variables
Defaults are set only if not already defined in your environment:Overriding Variables
Set environment variables before Fish starts to customize:Path Management
Binary paths are explicitly declared and conditionally added:VI Key Bindings
Fish is configured with VI keybindings in insert mode:Navigation
- Normal Mode
- Insert Mode
h,j,k,l- Move cursorw,b- Move by word0,$- Start/end of linev- Visual mode
Tool Integrations
Tools are initialized only if available:Zoxide (Smart Directory Jumping)
z <directory>- Jump to frecent directoryzi- Interactive directory search
Atuin (Shell History)
- Enhanced shell history
- Sync across machines
- Context-aware suggestions
Abbreviations
Global abbreviations expand automatically:Editor Shortcuts
vi expands to nvim when you press space or enter.
Git Shortcuts
| Abbreviation | Expands To | Description |
|---|---|---|
gits | git status | Show status |
gitc | git commit | Commit changes |
gita | git add | Stage files |
gitd | git diff | Show diff |
gitl | git log --oneline | Compact log |
gitp | git push | Push commits |
gitpl | git pull | Pull changes |
System Shortcuts
Adding Custom Abbreviations
Add to~/.config/fish/config.fish in the interactive section:
Aliases
Permanent command replacements:Prompt Configuration
Pure prompt colors can be customized via environment:Customizing Prompt Colors
Override in your environment:Interactive Shell Detection
All interactive features are wrapped in a check:Configuration Location
Main config:~/.config/fish/config.fish
Additional Fish Directories
~/.config/fish/functions/- Custom functions~/.config/fish/conf.d/- Additional config files~/.config/fish/completions/- Custom completions
FAQ
How do I disable VI mode?
How do I disable VI mode?
Comment out the VI keybindings section:Or switch to default (Emacs) mode:
How do I add a custom function?
How do I add a custom function?
Create a file in It will be auto-loaded when called.
~/.config/fish/functions/:Why aren't my abbreviations expanding?
Why aren't my abbreviations expanding?
Abbreviations only work in interactive mode. Make sure:
- You’re in an interactive shell (not a script)
- The abbreviation is defined in the interactive block
- You’ve reloaded Fish or started a new session
How do I install zoxide or atuin?
How do I install zoxide or atuin?
The config gracefully handles missing tools. Install them separately:Zoxide:Atuin: