A comprehensive macOS dotfiles setup featuring modern development tools and configurations managed with GNU Stow and Homebrew.
- Neovim: Lua-based configuration with modern plugins
- tmux: Terminal multiplexer with custom keybindings
- Zsh: Shell with Starship prompt and Antidote plugin manager
- Git: Version control with useful aliases and configurations
- AeroSpace: i3-like tiling window manager for macOS
- Ghostty: Modern terminal emulator
- Borders: Colored window borders for enhanced visibility
- mise: Version manager for Node.js, Go, Terraform, and Zig
- OrbStack: Docker Desktop alternative
- Homebrew: Package manager with comprehensive tool collection
- just: Command runner for repeatable maintenance tasks
- 1Password: Password manager with CLI integration
- Raycast: Application launcher and productivity suite
- Obsidian: Note-taking and knowledge management
- Bruno: API testing client
- Modern replacements:
eza(ls),bat(cat),fd(find),ripgrep(grep) - Navigation:
zoxide(cd),fzf(fuzzy finder) - Monitoring:
htop,btop,k9s(Kubernetes) - Database:
rainfrog(TUI database client)
Pre-configured for:
- Go: With mise version management
- Node.js: With npm/yarn support
- Terraform: With tflint for linting
- Zig: Modern systems programming language
- Update macOS to the latest version with the App Store
- Install Xcode from the App Store, open it and accept the license agreement
- Install macOS Command Line Tools by running
xcode-select --install - Generate or restore SSH keys in
~/.sshand make sure private keys are600 - Clone this repo to
~/.dotfiles - Run
./install.shto start the installation - Restart your terminal or computer to load the shell changes
- Run
just doctorto verify the setup
If just is not available yet, run ./scripts/doctor.sh directly after installation.
This setup uses GNU Stow for symlink management with a two-tier structure:
dotfiles/
├── home/ # Files symlinked to ~/
│ ├── .zprofile # Login-shell environment
│ └── .zshrc # Shell configuration
├── config/ # Files symlinked to ~/.config/
│ ├── nvim/ # Neovim configuration
│ ├── tmux/ # tmux configuration
│ ├── aerospace/ # AeroSpace window manager
│ ├── starship/ # Shell prompt
│ ├── ghostty/ # Terminal emulator
│ ├── k9s/ # Kubernetes CLI
│ └── rainfrog/ # Database client
├── aliases.zsh # Shell aliases (sourced by .zshrc)
├── justfile # Dotfiles maintenance commands
├── path.zsh # PATH configuration
├── scripts/ # Health checks and automation
└── install.sh # Setup script
The installation script automatically applies both configuration tiers:
stow --restow -t ~ home
stow --restow -t ~/.config config.zprofile owns login-shell environment setup. .zshrc owns interactive behavior such as completions, aliases, prompt, shell plugins, and fuzzy finder integration.
The configuration includes numerous aliases for productivity:
- Navigation:
projects,desktop,downloads,dotfiles - Git:
gst(status),gsm(smart-merge),gsp(smart-pull) - Docker:
d(docker),dstop(stop all),dpurgecontainers - Editor:
v(nvim) - Window Management:
ff(fuzzy window finder with AeroSpace)
# List available maintenance commands
just
# Run the full health check
just doctor
# Run non-mutating config checks
just check
# Check missing Brewfile dependencies without requiring upgrades
just brew-check
# Install missing Brewfile dependencies
just brew-sync
# Check whether Brewfile packages are outdated
just brew-outdated
# Reload shell configuration
reloadcli
# Apply configuration changes
just restow
# Measure shell startup time
just shell-time
# Profile shell startup functions
just shell-profilejust brew-check uses brew bundle check --no-upgrade, so it reports missing dependencies without failing just because installed packages are outdated. Use just brew-outdated when you explicitly want the stricter up-to-date check.
just doctor runs the same checks used during maintenance:
- Required tool availability
- Zsh syntax for
.zprofile,.zshrc,aliases.zsh, andpath.zsh - ShellCheck for shell scripts
- GNU Stow dry-runs for home and XDG config packages
- Brewfile dependency check
- mise version resolution
- opencode config validation
- Neovim headless startup
- Interactive shell startup timing
Run just doctor after macOS upgrades, Homebrew changes, shell plugin changes, or when setting up a new machine.
