My personal development environment for macOS.
A terminal-centric, keyboard-driven setup:
- AeroSpace — i3-like tiling window manager for macOS
- Ghostty — fast, GPU-accelerated, native terminal emulator
- Zsh — shell with a Powerlevel10k prompt
- tmux — terminal multiplexer
- Neovim — terminal-based code editor
- Claude Code — agentic coding assistant, configured in aleckshen/.claude
git clone https://github.com/aleckshen/dotfiles.git ~/dotfiles
~/dotfiles/install.shThat is the whole bootstrap. install.sh runs steps 3 to 6 below, plus the
Xcode command line tools check from step 1, and is safe to re-run — it skips
anything already in place.
The same bootstrap done by hand, for reference or for running only part of it.
- Install Apple's command line tools, which are prerequisites for Git and Homebrew.
xcode-select --install- Clone repo into root directory.
git clone https://github.com/aleckshen/dotfiles.git- Create symlinks in the home directory to the real files in the repo.
ln -s ~/dotfiles/.zshrc ~/.zshrc
ln -s ~/dotfiles/.p10k.zsh ~/.p10k.zsh
ln -s ~/dotfiles/.gitconfig ~/.gitconfig
ln -s ~/dotfiles/aerospace ~/.config/aerospace
ln -s ~/dotfiles/wezterm ~/.config/wezterm
ln -s ~/dotfiles/ghostty ~/.config/ghostty
ln -s ~/dotfiles/nvim ~/.config/nvim
ln -s ~/dotfiles/tmux ~/.config/tmux- Install the tmux plugins. They are not tracked in this repo — TPM owns them,
and the
tmux/plugins/directory is gitignored.
git clone https://github.com/tmux-plugins/tpm ~/dotfiles/tmux/plugins/tpm
tmux start-server
tmux source-file ~/.config/tmux/tmux.conf
~/dotfiles/tmux/plugins/tpm/bin/install_pluginsThe start-server and source-file steps matter: install_plugins reads its
install path from a running tmux server, and without one it reports success
while installing nothing.
- Clone the Claude Code config. It lives in its own repo and is cloned in place
rather than symlinked, because
~/.claudealso holds runtime state (sessions, history, caches) that stays untracked.
git clone https://github.com/aleckshen/.claude.git ~/.claudeIf ~/.claude already exists, git will refuse to clone into it — install.sh
handles that case by cloning alongside and moving .git into place.
- Install Homebrew, followed by the software listed in the Brewfile.
# Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Pass in file Brewfile location
brew bundle --file ~/dotfiles/Brewfile