✨ One command to rule them all ✨
Dotfiles for bootstrapping and backing up my Mac development environment.
A single ./install script symlinks configs into place and installs all dependencies via Homebrew.
| Module | Description | |
|---|---|---|
| 🐚 | zsh | Oh My Zsh + Powerlevel10k, autosuggestions, syntax highlighting, lazy NVM, custom aliases |
| 📝 | nvim | Neovim with Lazy.nvim — LSP, Treesitter, Telescope, Neo-tree, DAP & 40+ plugins |
| 🖥️ | tmux | Vi-mode, true color, mouse support, session persistence (resurrect/continuum), modular config |
| 🍺 | homebrew | Brewfile with CLI tools, languages, services, and fonts |
| 🦥 | lazygit | Tokyo Night-themed lazygit config |
| ⚡ | scripts | t (tmux session switcher), update (update all tools), nvim-health (setup checker) |
| 📗 | nvm | Default global npm packages (LSP servers, formatters, linters) |
| 🖼️ | iterm | Exported iTerm2 profile backup |
| 🔧 | git | Git config with aliases, global gitignore |
| 🍎 | macos | macOS system preferences script (keyboard, Finder, Dock, screenshots) |
| 📐 | editorconfig | 2-space indent (4 for PHP/Python), LF endings, UTF-8 |
| 🤖 | claude | Claude Code settings → ~/.claude/settings.json (gitignored) |
chmod +x install
./install📋 What the install script does
| Step | Action |
|---|---|
| 1️⃣ | Install Xcode Command Line Tools (if missing) |
| 2️⃣ | Install Oh My Zsh (if missing) |
| 3️⃣ | Install Homebrew (if missing) |
| 4️⃣ | Symlink dotfiles (~/.zshrc, ~/.zprofile, ~/.p10k.zsh, ~/.tmux.conf, ~/.config/nvim, etc.) |
| 5️⃣ | Run brew bundle to install everything in the Brewfile |
| 6️⃣ | Set up NVM with default packages |
| 7️⃣ | Symlink lazygit, editorconfig, & git config |
| 8️⃣ | Clone TPM (Tmux Plugin Manager) |
| 9️⃣ | Apply macOS system preferences |
| 🔟 | Create ~/Code workspace directory |
You can also install modules selectively:
make brew # Just install Homebrew packages
make nvim # Just symlink Neovim config
make tmux # Just set up tmux
make zsh # Just link zsh config
make nvm # Just set up NVM defaults
make update # Update everything (brew, nvim plugins, tpm, omz)
make clean # Remove all symlinks (uninstall).
├── 🍺 homebrew/Brewfile # Homebrew dependencies
├── ⚙️ install # Bootstrap script
├── 🗑️ uninstall # Remove all symlinks
├── 📋 Makefile # Selective install targets
├── 🖼️ iterm/backup.itermexport # iTerm2 profile
├── 🦥 lazygit/config.yml # Lazygit theme
├── 🔧 git/
│ ├── gitconfig # Git aliases & settings
│ └── .gitignore_global # Global ignores
├── 🍎 macos/
│ └── defaults.sh # macOS system preferences
├── 📝 nvim/ # Neovim config (Lazy.nvim)
│ ├── init.lua
│ ├── lua/user/ # Options, keymaps, plugin specs
│ └── snippets/ # Snippets (TS, TSX)
├── 📗 nvm/default-packages # Global npm packages
├── ⚡ scripts/
│ ├── t # Tmux session switcher
│ ├── update # Update all tools
│ └── nvim-health # Neovim setup health check
├── 🖥️ tmux/
│ ├── tmux.conf # Core settings
│ ├── theme.conf # Status line & colors
│ ├── keybindings.conf # Key bindings
│ └── plugins.conf # TPM plugin declarations
├── 🐚 zsh/
│ ├── .zprofile # Login shell (Homebrew)
│ ├── .zshrc # Shell config
│ ├── .p10k.zsh # Powerlevel10k theme
│ └── custom/
│ ├── aliases.zsh # Custom aliases
│ ├── tools.zsh # pyenv & Docker init
│ └── local.zsh.example # Machine-specific template
├── 📐 .editorconfig # Editor formatting rules
└── 🤫 .hushlogin # Suppress login banner
ripgrep · fzf · lazygit · awscli · kubectl · buf · wget · ngrok
🎨 Tokyo Night colorscheme · 🔭 Telescope fuzzy finder · 🧠 LSP (TypeScript, Lua, Bash, Vue, PHP, JSON, CSS/HTML) · 💡 nvim-cmp completions · 🧹 conform.nvim formatting · 🔍 nvim-lint · 🐛 DAP debugging · 📊 Gitsigns · 📑 Bufferline · 🚀 Lualine
| Alias | Command | Description |
|---|---|---|
lg |
lazygit |
🦥 Open lazygit |
wip |
git add . && git commit -m 'chore: wip' |
💾 Quick work-in-progress commit |
code |
cd ~/Code |
📂 Jump to projects |
.. / ... / .... |
cd up 1/2/3 levels |
🔼 Quick navigation |
ll |
ls -lAFh |
📋 Detailed file listing |
mkcd <dir> |
mkdir -p && cd |
📁 Create & enter directory |
update # Run from anywhere — updates brew, nvim plugins, tpm, omz
nvim-health # Check that LSP servers, formatters, and tools are installedCreate zsh/custom/local.zsh (gitignored) for settings that shouldn't be committed:
cp zsh/custom/local.zsh.example zsh/custom/local.zsh| 📝 | Neovim config heavily influenced by Jess Archer — see their course on Laracasts |
| ⚡ | Tmux session script (t) inspired by ThePrimeagen |
| 💡 | More dotfile inspiration at dotfiles.github.io |
⚡ Happy hacking! ⚡