Cross-platform developer environment for macOS, Arch Linux, Debian, and WSL—featuring automated setup, modular configuration management, and zero-friction onboarding.
git clone git@github.com:av1155/.dotfiles.git ~/.dotfiles
cd ~/.dotfiles
./install.sh
exec zsh- Portable: Works across macOS (Intel/Apple Silicon), Arch Linux, Debian, WSL, and Raspberry Pi
- Safe & Idempotent: Automatically backs up conflicts, can be run multiple times safely
- Zero Configuration: Automated detection and installation of tools based on your platform
- Modular: Managed with GNU Stow—easy to add, remove, or customize individual packages
- Fast: Optimized shell startup with lazy-loading and caching (1-2s faster than default configs)
- Robust: Error-resistant with network checks, retry protection, and graceful degradation
- .dotfiles
- Universal Shell Environment: Zsh configuration that adapts to macOS, Arch, Debian, WSL, and Raspberry Pi
- Automated Tool Installation: Homebrew, Oh-My-Zsh, Conda, and platform-specific package managers installed automatically
- Smart Plugin Management: ZPlug with Pure theme, syntax highlighting, autosuggestions, and async rendering
- Self-Healing tmux: Automatic plugin manager setup with session persistence and custom keybindings
- Enhanced Navigation: FZF fuzzy finder integrated with bat, git, and file browsing
- AI Development Tools: Pre-configured OpenCode agents, Claude MCP servers, and Aider integration
- Python Environment: Conda/Miniforge auto-setup with Neovim provider configuration
- Node.js Management: NVM lazy-loading for instant shell startup
- Java Development: Auto-configured classpath with JUnit and common libraries
- Modern CLI Tools: fastfetch, yazi, lazygit, eza, zoxide, ripgrep, and more
- Catppuccin Theming: Consistent color schemes across bat, tmux, and terminal
- Nerd Font Included: JetBrains Mono with icons and ligatures
- Git: For cloning the repository
- Zsh: Your default shell (will be configured automatically)
- GNU Stow: Symlink management (installation instructions provided below)
- curl/wget: For downloading tools (usually pre-installed)
Optional but recommended:
- tmux: Terminal multiplexer
- Neovim: Modern vim editor
- Python 3: For Neovim provider and development
The installation script handles everything automatically:
-
Clone this repository:
git clone git@github.com:av1155/.dotfiles.git ~/.dotfiles -
Install GNU Stow (if not already installed):
# macOS brew install stow # Arch Linux sudo pacman -S stow # Debian/Ubuntu sudo apt install stow
-
Run the installation script:
cd ~/.dotfiles ./install.sh
What the script does:
- ✅ Auto-detects required base directories (
.config,.ssh,.fonts,Library) - ✅ Creates missing directories
- ✅ Detects conflicts with existing files
- ✅ Backs up conflicting files to
filename.bak(with notification) - ✅ Runs
stow --restow */safely - ✅ Idempotent—safe to run multiple times
- ✅ Offers optional troubleshooting menu for fixing common issues
- ✅ Auto-detects required base directories (
-
Restart your shell:
exec zsh
Click to expand manual installation steps
If you prefer manual control:
-
Pre-create base directories:
mkdir -p ~/.config ~/.local ~/.ssh ~/.fonts ~/Library
-
Back up any conflicting files:
mv ~/.zshrc ~/.zshrc.bak mv ~/.gitconfig ~/.gitconfig.bak # ... repeat for other conflicts
-
Run GNU Stow:
cd ~/.dotfiles stow --restow */
-
Restart your shell:
exec zsh
Note: Run man stow to understand how symlink management works.
Click to expand directory structure
.
├── install.sh # Automated installation script
├── .stow-global-ignore # Files to exclude from stowing
│
├── App-Configs/ # Application-specific configurations
│ └── configs/
│ ├── iTerm2_Profile/ # iTerm2 profile and icons
│ ├── KittyAppIconMac/ # Custom Kitty icons
│ └── MacOS-Bootstrap/ # macOS dev environment bootstrap script
│
├── Claude/ # Claude AI MCP server configurations
│ └── .claude/
│
├── Config/ # XDG config directory
│ └── .config/
│ ├── bat/ # Bat (better cat) themes
│ ├── fastfetch/ # System info display
│ ├── hypr/ # Hyprland window manager (Linux)
│ ├── kitty/ # Kitty terminal emulator
│ ├── lazygit/ # Git TUI configuration
│ ├── opencode/ # OpenCode AI agents & settings
│ ├── tmux/ # Tmux configuration & plugins
│ └── yazi/ # File manager configuration
│
├── Fonts/ # JetBrains Mono Nerd Font (all variants)
│ └── .fonts/
│
├── Formatting-Files/ # Code formatters & linters
│ ├── .clang-format
│ ├── .markdownlint-cli2.yaml
│ └── .prettierrc.json
│
├── Git/ # Git configuration
│ ├── .gitconfig
│ ├── .gitignore_global
│ └── README.md # Git subtree workflow guide
│
├── Java-Jars/ # Java development libraries
│ └── javaClasspath/ # JUnit, jsoup, etc.
│
├── macOS-Library/ # macOS Application Support
│ └── Library/
│ └── Application Support/
│ ├── Code/ # VSCode settings
│ └── lazygit/ # Lazygit config
│
├── SSH/ # SSH configuration
│ └── .ssh/
│ └── config
│
└── ZSH/ # Zsh shell configuration
├── .zshrc # Main shell config
├── .zprofile # Login shell config
└── fzf-git.sh/ # FZF git integrationThe .zshrc is designed to work seamlessly across different platforms:
- Platform Detection: Automatically detects macOS, Arch Linux, Debian, WSL, and Raspberry Pi
- Oh-My-Zsh: Managed with automatic installation and plugin support
- ZPlug: Plugin manager with Pure theme, syntax highlighting, and autosuggestions
- Performance: Lazy-loading (NVM), caching (conda config), and optimized PATH management
- Fastfetch: System information display on new shells
- Smart Aliases: Context-aware shortcuts for common tasks
Auto-configured tmux with plugin management:
- Auto-Start: Automatically starts or attaches to tmux sessions
- Plugin Manager: TPM (Tmux Plugin Manager) can be set up via the troubleshooting menu
- Plugins Included:
tmux-sensible: Sensible defaultsvim-tmux-navigator: Seamless vim/tmux navigationcatppuccin/tmux: Beautiful themetmux-cpu: CPU usage displaytmux-yank: System clipboard integrationtmux-sessionx: Advanced session switcher
- Custom Keybindings:
Ctrl+Aprefix, intuitive pane navigation - Status Bar: Custom top status with directory, session, and system info
Automatic setup for platform-specific package managers:
- macOS: Homebrew with automatic installation
- Arch Linux: Paru (AUR helper) with auto-compilation
- Conda/Miniforge: Python environment management
- NVM: Node.js version management (lazy-loaded)
Pre-configured for modern development:
- Neovim: Python provider auto-configured with conda environments
- Git: Enhanced with FZF integration and custom aliases
- AI Tools:
- OpenCode with specialized agents (code-reviewer, debugger, refactorer, etc.)
- Claude MCP servers (git, time, fetch, brave-search, playwright, magic)
- File Navigation:
- FZF: Fuzzy finder with custom keybindings
- Bat: Syntax-highlighted file viewer
- Eza: Modern
lsreplacement - Yazi: Terminal file manager
- Zoxide: Smart directory jumping
- Terminal Tools:
- Lazygit: Git TUI
- Thefuck: Command correction
- Ripgrep: Fast text search
Consistent Catppuccin theming:
- Bat: Catppuccin Macchiato syntax highlighting
- Tmux: Catppuccin Frappe theme
- Kitty: Dynamic font size and opacity per OS
- Ghostty: Dynamic font size and opacity per OS
- Fonts: JetBrains Mono Nerd Font (all variants included)
Comprehensive macOS development environment setup script:
- Location:
App-Configs/configs/MacOS-Bootstrap/ - Features: Automated installation of Homebrew, development tools, AstroNvim, and essential utilities
- Documentation: See MacOS-Bootstrap README
Create a new stow package:
cd ~/.dotfiles
mkdir -p MyCustom/.config/myapp
# Add your configs
stow MyCustomCreate local override files that won't be tracked:
# Add personal zsh customizations
echo "# My custom aliases" >> ~/.zshrc.local
source ~/.zshrc.local # Add this to .zshrcOnly stow specific packages:
# Install only Git and ZSH configs
cd ~/.dotfiles
stow Git ZSHPull the latest changes and re-run the installer:
cd ~/.dotfiles
git pull --rebase
./install.sh
exec zshNote: The installer will skip existing installations and only update changed files.
Use GNU Stow to remove all symlinks:
cd ~/.dotfiles
stow -D */Restore your original files from .bak backups:
mv ~/.zshrc.bak ~/.zshrc
mv ~/.gitconfig.bak ~/.gitconfig
# ... restore other backupsRemove installation markers to allow fresh reinstalls:
rm ~/.homebrew_install_attempted
rm ~/.ohmyzsh_install_attempted
rm ~/.miniforge_install_attempted
rm ~/.tmux_tpm_setup_complete
# ... etc.The installation script includes an interactive troubleshooting menu. Run it anytime with:
cd ~/.dotfiles
./install.shWhen prompted, choose y to access the troubleshooting menu with these options:
- Fix Tmux Plugin Manager (TPM): Installs or repairs TPM installation
- Reinstall all Tmux plugins: Removes and reinstalls all tmux plugins
- Reset Tmux configuration completely: Nuclear option—completely removes and reinstalls everything tmux-related
- Exit: Return to normal operation
If tmux plugins aren't working, use the troubleshooting menu above, or manually:
-
Remove existing plugins:
rm -rf ~/.config/tmux/plugins ~/.tmux/plugins
-
Reinstall TPM:
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm -
Reload tmux configuration:
tmux source-file ~/.config/tmux/tmux.conf -
Install plugins:
- Inside tmux:
Ctrl+AthenI(capital i) - Or run:
~/.tmux/plugins/tpm/bin/install_plugins
- Inside tmux:
If you encounter symlink conflicts:
# See what's conflicting
cd ~/.dotfiles
stow --simulate --restow */
# Manually backup conflicting files
mv ~/.conflicting-file ~/.conflicting-file.bak
# Re-run stow
./install.sh- Oh-My-Zsh not installed: Delete
~/.ohmyzsh_install_attemptedand restart shell - Brew commands not found: Restart shell or run
eval "$(/opt/homebrew/bin/brew shellenv)" - Python provider errors in Neovim: Run
:checkhealth providerin Neovim for diagnostics