Personal dotfiles managed with GNU Stow.
dotfiles/
├── zsh/ # Zsh shell configuration
│ ├── .zshrc
│ ├── .zshenv
│ ├── .zprofile
│ ├── .p10k.zsh
│ ├── .zsh_custom_aliases
│ ├── .zsh_custom_functions
│ └── .secrets # Gitignored
├── git/ # Git configuration
│ ├── .gitconfig
│ └── .gitmessage
├── npm/ # NPM configuration
│ └── .npmrc
├── ssh/ # SSH configuration
│ └── .ssh/config
├── cursor/ # Cursor IDE settings
│ ├── settings.json
│ ├── keybindings.json
│ ├── snippets/
│ └── setup.sh
├── alfred/ # Alfred preferences & workflows
│ ├── Alfred.alfredpreferences/
│ └── setup.sh
├── macos/ # macOS system preferences
│ ├── dock.sh
│ ├── finder.sh
│ ├── keyboard.sh
│ ├── screenshots.sh
│ └── spotlight.sh
├── fonts/ # Custom fonts (Anonymous Pro)
├── Brewfile # Homebrew dependencies
└── bootstrap.sh # New machine setup script
- macOS (Apple Silicon)
- Git (comes with Xcode Command Line Tools)
# One-liner to bootstrap everything
git clone https://github.com/chrishuman0923/dotfiles.git ~/projects/dotfiles && ~/projects/dotfiles/bootstrap.shThe bootstrap script will:
- Install Homebrew (if needed)
- Install all dependencies from Brewfile (CLI tools, apps, VS Code extensions)
- Install custom fonts (Anonymous Pro)
- Create symlinks for all dotfiles via stow
- Set up Node.js (latest LTS) via fnm
- Enable corepack for pnpm/yarn
- Configure macOS settings (Dock, Finder, keyboard, screenshots, Spotlight)
- Configure apps (Cursor, Alfred)
# Clone the repo
git clone https://github.com/chrishuman0923/dotfiles.git ~/projects/dotfiles
cd ~/projects/dotfiles
# Install all dependencies from Brewfile
brew bundle
# Create symlinks
stow -t ~ zsh git npm ssh
# Setup Node (latest LTS)
eval "$(fnm env)"
fnm install --lts && fnm default lts-latest
corepack enable
# Run macOS and app setup scripts
./macos/dock.sh
./macos/finder.sh
./macos/keyboard.sh
./macos/screenshots.sh
./macos/spotlight.sh
./cursor/setup.sh
./alfred/setup.shcd ~/projects/dotfiles
stow -D -t ~ zsh git npm sshThe macos/ scripts configure system preferences:
| Script | What it does |
|---|---|
dock.sh |
Auto-hide, minimum size, magnification, genie effect, only Finder/Settings/Trash |
finder.sh |
Show hidden files, extensions, path bar, list view, disable .DS_Store on network |
keyboard.sh |
Fast key repeat, disable auto-correct/capitalize/smart quotes |
screenshots.sh |
Save to ~/Screenshots as PNG, disable shadows |
spotlight.sh |
Rebind to option+space (frees cmd+space for Alfred) |
After bootstrap, complete Alfred setup:
- Powerpack: Open Alfred Preferences → Powerpack → Enter your license
- Hotkey: Set to cmd+space in Preferences → General
- Sync: Set folder to
~/Alfred.alfredpreferencesin Preferences → Advanced → Syncing
Your workflows and preferences are stored in alfred/Alfred.alfredpreferences/.
Settings, keybindings, and snippets are symlinked automatically:
~/Library/Application Support/Cursor/User/settings.json~/Library/Application Support/Cursor/User/keybindings.json~/Library/Application Support/Cursor/User/snippets/
- Auto-switch: Automatically switches Node version when:
cdinto a folder with.nvmrcor.node-version- Opening a new terminal tab in a project directory
- Installs missing versions automatically
- Fast: Written in Rust, ~40x faster than nvm
- Corepack enabled: pnpm/yarn versions automatically prepared per-project via
package.json
When you enter a directory with a packageManager field in package.json, the correct version is automatically downloaded and activated:
"packageManager": "pnpm@9.15.0"The version management hook is optimized for performance with directory and package manager caching to avoid redundant work.
| Command | Tool | Description |
|---|---|---|
ls, ll, la, lt |
eza | Better ls with icons, git status |
cat, catp |
bat | Syntax-highlighted file viewing |
find |
fd | Faster, simpler find |
z <path> |
zoxide | Smart cd that learns your habits |
git diff, git log |
delta | Syntax-highlighted git diffs |
lg |
lazygit | Terminal UI for git |
| Alias | Command |
|---|---|
g |
git |
gs |
git status |
gd |
git diff |
gds |
git diff --staged |
ga |
git add |
gc |
git commit |
gcm |
git commit -m |
gp |
git push |
gl |
git pull |
gco |
git checkout |
gcb |
git checkout -b |
gb |
git branch |
glog |
git log --oneline --graph |
gst |
git stash |
gstp |
git stash pop |
| Alias | Command |
|---|---|
p |
pnpm |
pi |
pnpm install |
pa |
pnpm add |
pad |
pnpm add -D |
prm |
pnpm remove |
px |
pnpm dlx |
pd |
pnpm dev |
pb |
pnpm build |
pt |
pnpm test |
pex |
pnpm exec |
After running bootstrap, set up your SSH key for GitHub:
-
Open 1Password and find your SSH key
-
Copy the private key to
~/.ssh/:# Create the file and paste your private key nano ~/.ssh/id_github # Set correct permissions chmod 600 ~/.ssh/id_github
-
Add to macOS keychain:
ssh-add --apple-use-keychain ~/.ssh/id_github -
Test the connection:
ssh -T git@github.com
- Generate a new Ed25519 key:
ssh-keygen -t ed25519 -f ~/.ssh/id_github -C "your_email@example.com"
- Add to macOS keychain:
ssh-add --apple-use-keychain ~/.ssh/id_github - Copy public key:
pbcopy < ~/.ssh/id_github.pub
- Add to GitHub: Settings → SSH and GPG keys → New SSH key
- Save private key to 1Password for backup/sync
Secrets are stored in zsh/.secrets which is:
- Symlinked to
~/.secrets - Sourced by
.zshenv - Gitignored (never committed)
To set up secrets on a new machine:
touch ~/projects/dotfiles/zsh/.secrets
chmod 600 ~/projects/dotfiles/zsh/.secrets
cd ~/projects/dotfiles && stow -R -t ~ zsh
# Add your tokens/keys to the file- Shell aliases: Edit
zsh/.zsh_custom_aliases - Shell functions: Edit
zsh/.zsh_custom_functions - Prompt theme: Run
p10k configureor editzsh/.p10k.zsh - Cursor settings: Edit
cursor/settings.json - macOS prefs: Edit scripts in
macos/
The Brewfile contains all Homebrew dependencies:
- CLI tools (bat, eza, fd, fnm, fzf, etc.)
- Applications (1Password, Alfred, Cursor, Docker, etc.)
- VS Code/Cursor extensions
To update the Brewfile after installing new packages:
# Generate a new Brewfile from currently installed packages
brew bundle dump --force --file=~/projects/dotfiles/BrewfileTo install everything from the Brewfile:
cd ~/projects/dotfiles
brew bundle