My personal dotfiles for macOS, managed with dotbot.
# Clone the repository
git clone https://github.com/daern91/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
# Install Homebrew packages first (before symlinking configs that depend on them)
brew bundle install
# Install tools that use native installers
curl -fsSL https://claude.ai/install.sh | bash # Claude Code
curl -LsSf https://astral.sh/uv/install.sh | sh # uv (Python)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Rust
# Symlink dotfiles (after tools are installed)
./install
# Start Homebrew auto-updates (runs every 24h in background)
brew autoupdate start --upgrade --cleanup- Ghostty - Terminal emulator config
- Neovim - init.lua configuration
- Vim - .vimrc configuration
- Tmux - Terminal multiplexer config
- Zsh - Shell configuration with aliases and functions
- Git - Global git configuration
- Shell: fzf, atuin, starship, tmux, zoxide, zsh-autosuggestions
- File tools: bat, eza, fd, ripgrep, sd, yazi, jq, yq
- Dev tools: git, gh, neovim, fnm, pnpm, cmake
- Cloud/Infra: awscli, doctl, eksctl, helm, kubectl, tfenv, stripe, supabase
- Applications: Ghostty, IINA, Rectangle, ngrok
These tools work best with their own installers:
- Claude Code:
curl -fsSL https://claude.ai/install.sh | bash(auto-updates) - uv (Python):
curl -LsSf https://astral.sh/uv/install.sh | sh(auto-updates) - Rust/Cargo:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh(update withrustup update)
- Homebrew CLI tools: Updated every 24h via
homebrew-autoupdate - Ghostty, IINA: Auto-update themselves (marked
auto_updatesin brew) - Claude Code, uv: Self-updating via native installers
- Rust: Manual update via
rustup update
-
Install Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" -
Clone the repo:
git clone https://github.com/daern91/dotfiles.git ~/.dotfiles cd ~/.dotfiles
-
Install Homebrew packages (before symlinking configs):
brew bundle install
-
Install native tools:
curl -fsSL https://claude.ai/install.sh | bash curl -LsSf https://astral.sh/uv/install.sh | sh curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-
Symlink dotfiles (after tools are installed):
./install
-
Start auto-updates:
brew autoupdate start --upgrade --cleanup
-
Create
variables.sh(optional, for personal env vars):touch ~/variables.sh # Add your personal environment variables/secrets
cd ~/.dotfiles
git pull
./install# Manual update (or let autoupdate handle it automatically)
brew update && brew upgraderustup update.
├── Brewfile # Homebrew packages and applications
├── install.conf.yaml # Dotbot configuration
├── .zshrc # Zsh configuration
├── .vimrc # Vim configuration
├── .tmux.conf # Tmux configuration
├── .gitconfig # Git configuration
├── ghostty.config # Ghostty terminal config
├── init.lua # Neovim configuration
└── variables.sh # Personal variables (not tracked)
- MonoLisa font: Install MonoLisa (used by Ghostty and Neovim)
- TPM (Tmux Plugin Manager):
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm, then pressprefix + Iinside tmux to install plugins
- Paths use
$HOMEfor portability across machines variables.shshould contain personal/secret variables and is not tracked in git- Homebrew auto-update runs every 24h in the background via launchd
- Tools with native installers are NOT in the Brewfile to avoid conflicts