β¨ 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, auto-boot in Ghostty), modular config |
| πΊ | homebrew | Brewfile with CLI tools, languages, services, Colima (Docker runtime), and fonts |
| π¦₯ | lazygit | Tokyo Night-themed lazygit config |
| β‘ | scripts | t (tmux session switcher), update (update all tools), nvim-health (setup checker) β linked into ~/.local/bin |
| π | nvm | Default global npm packages (LSP servers, formatters, linters) |
| π» | ghostty | Ghostty terminal config |
| πΌοΈ | 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 |
| π³ | docker | Docker via Colima instead of Docker Desktop (DOCKER_HOST set in .zshrc) |
| π€ | 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, scripts β ~/.local/bin, etc.) |
| 5οΈβ£ | Run brew bundle to install everything in the Brewfile, then link the Ghostty config |
| 6οΈβ£ | Set up NVM with default packages |
| 7οΈβ£ | Symlink lazygit, Claude settings, 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 ghostty # Just link Ghostty config
make update # Quick update (brew, nvim plugins, tpm)
make clean # Remove all symlinks (uninstall).
βββ πΊ homebrew/Brewfile # Homebrew dependencies
βββ βοΈ install # Bootstrap script
βββ ποΈ uninstall # Remove all symlinks
βββ π Makefile # Selective install targets
βββ π .emmyrc.json # Lua language server settings
βββ π» ghostty/
β βββ config.ghostty # Ghostty terminal config
βββ πΌοΈ 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 brew, nvim, Node LTS, tpm, omz
β βββ nvim-health # Neovim setup health check
βββ π₯οΈ tmux/
β βββ tmux.conf # Core settings & TPM plugin list
β βββ theme.conf # Status line & colors
β βββ keybindings.conf # Key bindings
β βββ plugins.conf # resurrect/continuum settings
βββ π zsh/
β βββ .zprofile # Login shell (Homebrew)
β βββ .zshrc # Shell config
β βββ .p10k.zsh # Powerlevel10k theme
β βββ custom/
β βββ aliases.zsh # Custom aliases
β βββ tools.zsh # pyenv init
β βββ local.zsh.example # Machine-specific template
β βββ plugins/ # Oh My Zsh plugins
β βββ themes/ # Oh My Zsh themes
βββ π .editorconfig # Editor formatting rules
βββ π€« .hushlogin # Suppress login banner
ripgrep Β· fzf Β· lazygit Β· gh Β· awscli Β· kubectl Β· colima Β· docker Β· buf Β· pipx Β· cmake Β· graphviz Β· wget Β· ngrok
Fira Code Β· Fira Code Nerd Font
Start the Docker runtime with colima start.
π¨ Tokyo Night colorscheme Β· π Telescope fuzzy finder Β· π³ Neo-tree & Oil file management Β· π§ LSP (TypeScript, Lua, Bash, Vue, PHP, JSON, CSS/HTML) Β· π‘ nvim-cmp completions Β· π§Ή conform.nvim formatting (ESLint/Prettier, incl. Vue) Β· π nvim-lint Β· π DAP debugging Β· π§ͺ Neotest Β· π Gitsigns & Fugitive Β· π Bufferline Β· π Lualine Β· β¨οΈ which-key Β· πΈ CodeSnap screenshots
| Alias | Command | Description |
|---|---|---|
lg |
lazygit |
π¦₯ Open lazygit |
zshreload |
source ~/.zshrc |
π Reload shell config |
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 |
la |
ls -A |
π List including dotfiles |
mkcd <dir> |
mkdir -p && cd |
π Create & enter directory |
update # Run from anywhere β updates brew, nvim plugins, Node (latest LTS), 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! β‘