Learn how to customize your development environment setup.
The main package list is in homebrew/Brewfile.
# Add a formula (command-line tool)
brew "package-name"
# Add a cask (GUI application)
cask "application-name"
# Add a tap (third-party repository)
tap "user/repo"Use homebrew/Brewfile.minimal for essential tools only:
./setup.sh minimalTo customize the minimal setup, edit homebrew/Brewfile.minimal.
After adding packages to Brewfile:
# Pull changes if needed
git pull
# Run setup to install new packages
./setup.shThe setup script automatically detects and installs new packages.
The Zsh configuration is modular. Files in ~/.config/zsh/:
00-homebrew.zsh- Homebrew setup10-languages.zsh- Programming language managers20-tools.zsh- CLI tool configurations30-aliases.zsh- Command aliases35-commit-aliases.zsh- Git commit shortcuts40-functions.zsh- Shell functions45-warp.zsh- Warp terminal optimizations (created automatically when Warp is detected)50-environment.zsh- Environment variables99-local.zsh- Your personal customizations (gitignored)
To add personal configurations:
# Edit your local config
vim ~/.config/zsh/99-local.zsh
# Add your customizations
export MY_API_KEY="..."
alias myproject="cd ~/projects/myproject"The provided .gitconfig includes:
- User name/email (prompted during setup)
- diff-so-fancy for better diffs
- Useful aliases
- GPG signing setup
To customize:
# Set your preferences
git config --global core.editor "nvim"
git config --global pull.rebase true
# Add custom aliases
git config --global alias.unstage "reset HEAD --"
git config --global alias.last "log -1 HEAD"Settings are in vscode/settings.json. To customize:
- Edit
vscode/settings.jsonfor repo-wide settings - Use VS Code's UI for personal preferences
- Add extensions to
vscode/extensions.txt
The setup automatically configures a consistent font (AnonymicePro Nerd Font Mono) across all terminal applications:
- Warp: Automatically detected and configured
- iTerm2: Font set in preferences
- Terminal.app: Font applied to Basic profile
- VS Code: Terminal font configured in settings
To use a different font:
-
Install your preferred Nerd Font:
brew search font | grep nerd brew install font-your-choice-nerd-font -
Update the font configuration:
# Edit the setup script vim scripts/setup-terminal-fonts.sh # Change FONT_NAME variable to your preference
-
Re-run font configuration:
./scripts/setup-terminal-fonts.sh
Set in ~/.config/zsh/50-environment.zsh:
export EDITOR="nvim"
export PAGER="less"
export LANG="en_US.UTF-8"Never commit secrets! Use ~/.config/zsh/99-local.zsh:
# API Keys
export OPENAI_API_KEY="sk-..."
export AWS_ACCESS_KEY_ID="..."
# Database URLs
export DATABASE_URL="postgresql://..."Create config/setup.yaml for different profiles:
profiles:
web_developer:
brew:
formulae:
- node
- postgresql
- redis
casks:
- visual-studio-code
- postman
data_scientist:
brew:
formulae:
- python
- jupyter
- pandasUse a profile:
# Note: Profile support is planned for future releases
# Currently use minimal/full installation modesFor different machines (work/personal):
# In ~/.config/zsh/99-local.zsh
if [[ "$(hostname)" == "work-laptop" ]]; then
export HTTP_PROXY="http://proxy.company.com:8080"
source ~/.work-config
fiThe setup script automatically detects if you're using Warp Terminal and offers to:
- Install delta for enhanced git diffs
- Configure shell integrations
- Set up optimal workflows
# Configure Warp optimizations
./setup.sh warpWhen Warp is detected, you can optionally install:
- atuin - Advanced shell history with sync
- direnv - Directory-specific environment variables
- mcfly - Smart command history search
- navi - Interactive command cheatsheet
To enable Warp features manually:
# Create Warp config file
touch ~/.config/zsh/45-warp.zsh
# Add Warp-specific settings
echo 'export WARP_ENABLE_WAYLAND=1' >> ~/.config/zsh/45-warp.zsh# Set default Node version
echo "20" > ~/.nvmrc
# Project-specific version
cd myproject
echo "18" > .nvmrc# Set global Python version
pyenv global 3.12.0
# Project-specific version
cd myproject
echo "3.11.0" > .python-version# Docker Desktop settings
# ~/Library/Group Containers/group.com.docker/settings.json
# Resource limits
{
"cpus": 4,
"memoryMiB": 8192,
"diskSizeMiB": 65536
}Your configurations are automatically backed up before updates:
# View all backups
ls ~/.setup-backups/
# View latest backups
ls -la ~/.setup-backups/latest/The backup system organizes files by category:
dotfiles/- Shell configurationsconfigs/- Application settingsrestore-points/- Full system snapshotsscripts/- Custom scripts
# Backup current config
cp -r ~/.config/zsh ~/.config/zsh.backup
cp ~/.zshrc ~/.zshrc.backup
cp ~/.gitconfig ~/.gitconfig.backup# List restore points
./scripts/rollback.sh --list
# Restore from latest
./scripts/rollback.sh --latestAdd your own install script:
# Create scripts/install-custom.sh
#!/bin/bash
source "$(dirname "$0")/../lib/common.sh"
print_step "Installing custom tools..."
# Your installation logicIn your Brewfile:
# Only install on work machines
if ENV['USER'] == 'work-username'
cask "corporate-vpn"
endCreate ~/.config/zsh/post-install.zsh:
# Run after setup completes
if [[ -f ~/.first-run ]]; then
echo "Welcome! Running first-time setup..."
# First-run configurations
rm ~/.first-run
fi- Check file permissions:
ls -la ~/.config/zsh/ - Ensure files end with
.zsh - Check for syntax errors:
zsh -n ~/.config/zsh/99-local.zsh
Some tools may conflict (e.g., nvm and n). Check:
# See what's modifying PATH
echo $PATH | tr ':' '\n'
# Check which tool provides a command
which node
type node# Remove custom configs
rm ~/.config/zsh/99-local.zsh
# Reinstall dotfiles
./scripts/setup-dotfiles.sh