Personal dotfiles for consistent dev environments across machines. Manages shell config, editor settings, tmux, git, and application installation via Homebrew.
On a new machine, clone and run:
git clone git@github.com:stephenluc/dotfiles.git ~/dotfiles
cd ~/dotfiles
sh setup.shsetup.sh runs everything in order:
- link-dotfiles.sh -- auto-discovers and symlinks all dotfiles (
.zshrc.personal,.gitconfig,.vimrc,.tmux.conf.personal, etc.) from this repo into~, and ensures~/.zshrcand~/.tmux.confsource their.personalcounterparts - dev-tools-setup.sh -- installs Homebrew (if needed), runs
brew bundlefor CLI tools and personal apps, optionally installs work apps fromBrewfile.work, installs TPM, and auto-installs tmux plugins - github-ssh-setup.sh -- generates SSH key and uploads to GitHub via
ghCLI
| Script | Purpose | Interactive? |
|---|---|---|
setup.sh |
Full new-machine setup (runs all scripts below) | Yes |
link-dotfiles.sh |
Auto-discover and symlink dotfiles into ~ |
No |
dev-tools-setup.sh |
Install all tools and apps via Brewfiles, TPM | Yes (prompts for work apps) |
github-ssh-setup.sh |
Generate SSH key and upload to GitHub via gh |
Yes |
| File | Contents |
|---|---|
Brewfile |
CLI tools (git, tmux, bun, etc.) and personal apps (Firefox, iTerm2, Raycast, etc.) -- always installed |
Brewfile.work |
Work apps (Slack, Cursor, Postman, Linear, etc.) -- installed only if you opt in |
Add new packages by editing the appropriate Brewfile. Run brew bundle --file=Brewfile to install.
| File | What it configures |
|---|---|
.zshrc.personal |
Zsh shell -- personal aliases, prompt (Spaceship), sourced by ~/.zshrc |
.gitconfig |
Git -- aliases (gs, gls), editor, colors |
.vimrc |
Vim editor settings |
.tmux.conf.personal |
Tmux -- prefix Ctrl-Space, pane/window nav, opensessions, resurrect/continuum, status bar |
iterm_settings.json / iterm_settings_v2.json |
iTerm2 profile exports |
link-dotfiles.sh auto-discovers all dotfiles at the repo root (excluding .git, .gitignore, .claude) and symlinks them into ~. Adding a new dotfile to the repo is all you need -- no script changes required.
~/.zshrc and ~/.tmux.conf are not symlinked -- they're per-machine files for work-specific config. link-dotfiles.sh creates them if missing and prepends a line to source their .personal counterpart (symlinked from this repo). Work-specific settings go after the source line so they take precedence (last setting wins).
- Prefix:
Ctrl-Space - Panes:
j/kto navigate,=/-to split - Windows:
h/lto navigate - Sessions:
Alt-sto open opensessions sidebar,Alt-1-9to jump to session by index - Reload:
prefix + r - Session persistence via tmux-resurrect and tmux-continuum (auto-restores on tmux start)