You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Global ignore:.gitignore_global via core.excludesFile - macOS, editor, and Claude artifacts ignored in every repo. This repo intentionally tracks .claude/notify.sh and .claude/settings.json (already committed); any new .claude/ file needs git add -f.
Database (pgcli)
Config:.config/pgcli/config
PostgreSQL CLI with:
Smart auto-completion
Syntax highlighting
Destructive command warnings
1000 row limit
Keyring password storage
SSH
Config:.ssh/config
Host aliases for quick access (defined in ~/.ssh/config.local):
Common operations are wrapped in a justfile. Run just to list them.
Recipe
Action
just setup
Full machine setup (runs macos_setup.sh)
just brew-install
Install everything in the Brewfile
just brew-diff
Show drift between installed packages and Brewfile
just update
Update and upgrade brew packages
just defaults
Apply macOS system defaults (macos_defaults.sh)
just lint
Run pre-commit hooks (shellcheck + secret scan)
Pre-commit
pre-commit install enables hooks that run on every commit: shellcheck on the
shell scripts, gitleaks to block
accidental secret commits, and basic file hygiene. Config in
.pre-commit-config.yaml.
Homebrew Packages
Packages are managed with a curated Brewfile (brew bundle).
The list is intentional, not a full machine dump - use just brew-diff to see
what is installed but untracked before adding it.
This repo uses a .local pattern to keep sensitive/machine-specific data out of version control:
File
Template
Contains
~/.secrets
.secrets.example
API tokens, passwords
~/.zshrc.local
.zshrc.local.example
SSH keys, personal paths, project aliases
~/.ssh/config.local
.ssh/config.local.example
Host definitions with real IPs
# Set up local files from templates
cp .secrets.example ~/.secrets && chmod 600 ~/.secrets
cp .zshrc.local.example ~/.zshrc.local
cp .ssh/config.local.example ~/.ssh/config.local && chmod 600 ~/.ssh/config.local
# Edit each with your values
nvim ~/.secrets ~/.zshrc.local ~/.ssh/config.local
Hammerspoon
Config:.hammerspoon/
Lua-based macOS automation:
lgtv - LG TV control integration
Claude Code
Config:.claude/
Claude Code CLI configuration with smart notifications.
Features
Always thinking enabled for extended reasoning
Notification hooks - alerts when Claude needs input or completes a task
Smart notification suppression - no alerts when actively viewing the tmux pane
Terminal bell integration - tmux status bar highlights on activity (works with tmux bell settings above)
Clone this repo: git clone git@github.com:yourusername/dotfiles.git ~/dotfiles
Run setup: cd ~/dotfiles && ./macos_setup.sh
Import local configs (see below) or customize from .example files
Restart terminal or source ~/.zshrc
Migrating Local Configs
Transfer your local configs (secrets, SSH hosts, etc.) between machines. Archives are encrypted with age using a passphrase.
On the old machine
cd~/dotfiles
./export_local.sh
# Enter a passphrase when prompted# Creates: ~/dotfiles_local_YYYYMMDD_HHMMSS.tar.gz.age
Transfer the archive
# Via SSH
scp ~/dotfiles_local_*.tar.gz.age newmachine:~/
# Or via AirDrop, USB, etc. (encrypted, safe to transfer)
On the new machine
# After running macos_setup.shcd~/dotfiles
./import_local.sh ~/dotfiles_local_*.tar.gz.age
# Enter the same passphrase# Delete the archive
rm ~/dotfiles_local_*.tar.gz.age
What's included
File
Contents
.secrets
API tokens, passwords
.zshrc.local
SSH keys to load, personal paths
.ssh/config.local
SSH host definitions
.gitconfig.local
Git name/email
About
My tmux, zsh, alacritty configs, homebrew list and migration scripts