Modern tri-shell configuration with Fish, Zsh, and Bash support, featuring powerful CLI tools and professional development environment.
- Fish Shell: Interactive shell with autosuggestions and intelligent tab completion
- Zsh Shell: Enhanced with plugins for syntax highlighting and autosuggestions
- Bash Shell: Modern Bash with comprehensive modular configuration
- Unified Experience: Consistent aliases, functions, and tools across all shells
- Context-Aware: Shows git status, package versions, execution time
- Fast Performance: Minimal latency with asynchronous rendering
- Beautiful Theme: Pre-configured Catppuccin Macchiato theme
- Cross-Shell: Works seamlessly with Fish, Bash, and Zsh
- Modern IDE Features: LSP, treesitter, and telescope integration
- LazyVim Config: Pre-configured with sensible defaults
- Catppuccin Theme: Beautiful macchiato color scheme
- Plugin Management: Lazy loading for fast startup
- Relative Numbers Disabled: Clean line number display
| Tool | Description | Replaces |
|---|---|---|
| neovim | Modern Vim with LazyVim configuration | vim |
| bat | Syntax highlighting and Git integration | cat |
| eza | Modern listing with icons and git status | ls |
| ripgrep | Ultra-fast text search | grep |
| fd | User-friendly file finder | find |
| fzf | Fuzzy finder for files and history | - |
| lazygit | Terminal UI for git commands | - |
| lazydocker | Terminal UI for docker management | - |
| fnm | Fast Node.js version manager | nvm |
| git-delta | Beautiful git diffs with syntax highlighting | - |
| hexyl | Hex viewer with colored output | hexdump |
| procs | Modern process viewer | ps |
| broot | Interactive tree view with search | tree |
| zoxide | Smarter directory navigation | cd |
| atuin | Better shell history with sync | - |
| direnv | Per-project environment variables | - |
| vibetunnel | VibeTunnel CLI (vt command) | - |
| 1password | 1Password CLI integration | - |
- Modular Configuration: Clean
conf.d/structure for all shells - Smart Aliases: Consistent shortcuts across all shells
- Git Integration: Comprehensive git shortcuts and functions
- Claude Function: Smart Claude Code wrapper with auto-detection
- Docker Functions: Helpful Docker management utilities
- Environment Variables: Optimized for Node.js and AI development
# Install complete tri-shell configuration
curl -sL https://raw.githubusercontent.com/roderik/shell-config/main/install.sh | bashgit clone https://github.com/roderik/shell-config.git
cd shell-config
./install.sh./install.sh --help # Show help
./install.sh --dry-run # Preview changes without installing
./install.sh --force # Overwrite existing configurationsThe setup script performs the following steps:
- Installs Homebrew (if not present) - macOS package manager
- Installs all three shells - Fish, Zsh, and Bash with enhancements
- Installs shell plugins - Syntax highlighting, autosuggestions, completions
- Installs modern development tools via Homebrew
- Configures Fish with modular
conf.d/structure - Configures Zsh with comprehensive modular configuration
- Configures Bash with modern features and modular setup
- Configures Neovim with LazyVim and Catppuccin theme
- Configures Starship prompt for all three shells
- Installs Bun JavaScript runtime and toolkit
Each shell uses a modular conf.d/ structure with numbered files for predictable loading order:
config/
├── bash/
│ ├── .bashrc # Main Bash configuration
│ ├── .bash_profile # Bash profile
│ └── conf.d/
│ ├── 00-environment.bash # Environment variables
│ ├── 00-homebrew.bash # Homebrew setup
│ ├── 02-paths.bash # PATH configuration
│ ├── 10-aliases.bash # Command aliases
│ ├── 10-node.bash # Node.js (fnm) setup
│ ├── 11-1password.bash # 1Password CLI
│ ├── 20-functions.bash # Utility functions
│ ├── 20-fzf.bash # FZF configuration
│ ├── 30-abbreviations.bash # Git shortcuts
│ ├── 30-git-functions.bash # Git utilities
│ ├── 31-docker-functions.bash # Docker utilities
│ ├── 32-claude-function.bash # Claude wrapper
│ ├── 40-completions.bash # Shell completions
│ ├── 60-modern-tools.bash # Modern CLI tools
│ └── 70-prompt.bash # Starship prompt
├── zsh/
│ ├── .zshrc # Main Zsh configuration
│ └── conf.d/
│ ├── 00-environment.zsh # Environment setup
│ ├── 00-homebrew.zsh # Homebrew configuration
│ ├── 02-paths.zsh # PATH setup
│ ├── 10-node.zsh # Node.js management
│ ├── 11-1password.zsh # 1Password CLI
│ ├── 20-functions.zsh # Utility functions
│ ├── 20-fzf.zsh # FZF integration
│ ├── 30-aliases.zsh # Command aliases
│ ├── 30-abbreviations.zsh # Git shortcuts
│ ├── 30-git-functions.zsh # Git utilities
│ ├── 31-docker-functions.zsh # Docker helpers
│ ├── 32-claude-function.zsh # Claude wrapper
│ ├── 40-completions.zsh # Completions
│ ├── 60-modern-tools.zsh # Tool integrations
│ └── 70-prompt.zsh # Starship setup
├── fish/
│ ├── config.fish # Main Fish configuration
│ └── conf.d/
│ ├── 00-environment.fish # Environment variables
│ ├── 10-starship.fish # Starship prompt
│ ├── 20-functions.fish # Utility functions
│ ├── 30-abbreviations.fish # Git abbreviations
│ ├── 30-git-functions.fish # Git utilities
│ ├── 31-docker-functions.fish # Docker helpers
│ └── 32-claude-function.fish # Claude wrapper
└── starship/
└── starship.toml # Starship configuration
After installation, configurations are placed at:
- Fish:
~/.config/fish/(config.fish and conf.d/) - Zsh:
~/.zshrcand~/.config/zsh/conf.d/ - Bash:
~/.bashrc,~/.bash_profile, and~/.config/bash/conf.d/ - Neovim:
~/.config/nvim/(LazyVim configuration) - Starship:
~/.config/starship.toml
NODE_NO_WARNINGS=1 # Suppresses Node.js warnings
FORCE_AUTO_BACKGROUND_TASKS=1 # Claude Code automatic background tasks
ENABLE_BACKGROUND_TASKS=1 # Claude Code background task execution
EDITOR=nvim # Default editor
VISUAL=nvim # Visual editorls→eza -lh --group-directories-firstl→eza --git-ignore --group-directories-firstll→eza --all --header --long --group-directories-firstllm→eza --all --header --long --sort=modified --group-directories-firstla→eza -lbhHigUmuSalt→eza --treecat→batvim→nvim
g→gitga→git addgaa→git add --allgc→git commit --verbosegcm→git commit --messagegco→git checkoutgp→git pushgl→git pullgs→git status- And many more...
lzg→lazygitlzd→lazydockerff→fzf --preview 'bat --color=always {}'cdi→zi(zoxide interactive)claude→ Smart wrapper with auto-detection
d→dockerdc→docker composedps→docker psdpsa→docker ps -a
Smart wrapper that auto-detects project settings:
# Automatically uses .claude/AUTO_PLAN_MODE.txt if present
# Falls back to vt (VibeTunnel) if available
claude [args]gclone- Clone and cd into repositorygprune- Clean up merged branchesgreset- Reset to origin/maingundo- Undo last commit
dexec- Execute command in containerdlogs- View container logsdstop- Stop all containersdclean- Clean unused resources
- direnv: Automatic per-project environment variables
- zoxide: Smart directory jumping with
zcommand - atuin: Enhanced shell history with search and sync
- fzf: Fuzzy finder integration with preview
- fnm: Fast Node.js version management
After installation, all three shells are ready to use:
# Start a Fish session
fish
# Make Fish your default shell (optional)
chsh -s /opt/homebrew/bin/fish # Apple Silicon
chsh -s /usr/local/bin/fish # Intel Mac# Start a Zsh session
zsh
# Make Zsh your default shell (optional)
chsh -s /opt/homebrew/bin/zsh # Apple Silicon
chsh -s /usr/local/bin/zsh # Intel Mac# Start a Bash session
bash
# Make Bash your default shell (optional)
chsh -s /bin/bash- Neovim: First launch will install all LazyVim plugins automatically
- Atuin: Run
atuin registerto enable history sync (optional) - Direnv: Create
.envrcfiles in projects for automatic environment setup
Each shell supports local overrides:
# Fish
echo "alias myalias='mycommand'" >> ~/.config/fish/conf.d/99-local.fish
# Zsh
echo "alias myalias='mycommand'" >> ~/.config/zsh/conf.d/99-local.zsh
# Bash
echo "alias myalias='mycommand'" >> ~/.config/bash/conf.d/99-local.bashEdit the Starship configuration:
nvim ~/.config/starship.tomlUpdate all installed tools:
brew update && brew upgradeEnsure Homebrew's bin directory is in your PATH:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
source ~/.zprofileIf you get permission errors when changing your shell:
# Add shell to allowed shells manually
sudo sh -c "echo $(which fish) >> /etc/shells"
sudo sh -c "echo $(which zsh) >> /etc/shells"Reload your shell configuration:
# Fish
source ~/.config/fish/config.fish
# Zsh
source ~/.zshrc
# Bash
source ~/.bashrcTo uninstall, use the provided uninstall script:
./uninstall.shOr manually remove configurations:
# Change back to default shell
chsh -s /bin/bash
# Remove configurations
rm -rf ~/.config/fish
rm -rf ~/.config/zsh
rm -rf ~/.config/bash
rm -f ~/.zshrc
rm -f ~/.bashrc
rm -f ~/.bash_profile
rm -rf ~/.config/nvim
rm -f ~/.config/starship.toml
# Uninstall tools (optional)
brew uninstall fish zsh starship bat eza ripgrep fd fzf- macOS (Intel or Apple Silicon)
- Internet connection for downloading tools
- Admin privileges for changing shell (optional)
Found an issue or have a suggestion? Please open an issue or submit a PR on the GitHub repository.
MIT - See LICENSE file for details
This shell configuration is part of a complete development setup:
- Shell Config - Modern tri-shell configuration (this repository)
- AI Rules - AI assistant configuration and prompts
- WT - Windows Terminal configuration and themes
Created by Roderik van der Veer - Twitter/X: @r0derik
- Issues: GitHub Issues
- Discussions: GitHub Discussions