Personal macOS environment with automated setup and Bitwarden secret management.
Contents:
- 57 Homebrew packages (including SketchyBar)
- 10 Mac App Store apps
- Shell configs (zsh + Powerlevel10k)
- Development tools (neovim, rust, bun, python/uv)
- Application configs (ghostty, tmux, karabiner, sketchybar, VS Code)
- System preferences automation
git clone https://github.com/bwl/dots.git ~/dotfiles
cd ~/dotfiles
./install.shThe script will:
- Install Xcode Command Line Tools
- Install Homebrew and all packages
- Install Mac App Store apps
- Create symlinks
After installation:
# Setup Bitwarden
bw login
export BW_SESSION="$(bw unlock --raw)"
# Reload shell
exec zsh
# Configure theme
p10k configure
# Start SketchyBar
brew services start sketchybarUpdate symlinks only:
cd ~/dotfiles
./scripts/setup_symlinks.sh --force# Reload configuration after changes
sketchybar --reload
# Start/stop/restart service
brew services start sketchybar
brew services stop sketchybar
brew services restart sketchybardotfiles/
├── shell/ # .zshrc, .zshenv, .p10k.zsh
├── config/ # Application configs (nvim, tmux, ghostty, sketchybar, etc.)
├── git/ # .gitconfig, .gitignore_global
├── ssh/ # SSH client config
├── vscode/ # VS Code settings
├── bin/ # User scripts
├── scripts/ # Setup and utility scripts
├── Brewfile # Homebrew packages
├── Masfile # Mac App Store apps
├── npm-globals.txt # npm packages
├── cargo-installs.txt # Rust binaries
├── uv-tools.txt # Python tools
└── install.sh # Bootstrap script
After installing new packages:
cd ~/dotfiles
# Homebrew
brew bundle dump --force --file=Brewfile
# Mac App Store
mas list > Masfile
# npm globals
npm list -g --depth=0 | tail -n +2 | sed 's/^[├└]─* //' > npm-globals.txt
# Cargo
ls ~/.cargo/bin/ | grep -v "^cargo\|^rust" > cargo-installs.txt
# uv tools
uv tool list | grep -E "^\S" | awk '{print $1}' > uv-tools.txt
git add . && git commit -m "Update packages"# Homebrew (automatic via install.sh)
brew bundle install
# npm
cat npm-globals.txt | grep -v "^#" | xargs npm install -g
# Cargo
cat cargo-installs.txt | grep -v "^#" | xargs cargo install
# uv
cat uv-tools.txt | grep -v "^#" | xargs -I {} uv tool install {}
# VS Code extensions
cat vscode-extensions.txt | xargs -L 1 code --install-extensionApply automated system preferences:
cd ~/dotfiles
./macos-defaults.shConfigures:
- Dock auto-hide and position
- Finder hidden files and extensions
- Fast key repeat
- Screenshot location
- Trackpad tap-to-click
- Menu bar items
- SSH private keys
- API keys/tokens
.envfiles- Bitwarden sessions
All sensitive files are excluded via .gitignore.
Store secrets:
bw login
bw create item --type login --name "API Key Name" --notes "your-secret-here"Reference in shell config:
# In .zshenv
export MY_API_KEY="$(bw get notes 'API Key Name')"Auto-unlock in .zshrc:
if ! bw status | grep -q '"status":"unlocked"'; then
export BW_SESSION="$(bw unlock --raw)"
fi# Update Homebrew packages
brew update && brew upgrade
# Pull latest dotfiles
cd ~/dotfiles
git pull
# Relink dotfiles
./scripts/setup_symlinks.sh --force
# Reinstall if needed
brew bundle install# Remove unused Homebrew dependencies
brew autoremove
# Clean old versions
brew cleanup
# Check for issues
brew doctorMIT