My development environment configuration. macOS, zsh, and the tools I use daily as a Software Engineer working on platform infrastructure, observability, and CI/CD.
zsh/ Shell configuration (Powerlevel10k, lazy-loading, aliases)
git/ Git aliases, delta pager, GPG signing
claude-code/ Claude Code global instructions and configuration
scripts/ Utility scripts (linting, automation)
posts/ Short write-ups on specific setup decisions
Shell startup in ~140ms — down from 5+ seconds. The main wins were lazy-loading NVM and virtualenvwrapper (they eagerly initialize on every shell, even when unused) and deduplicating compinit calls. Details in posts/zshrc-from-5s-to-140ms.md.
Lazy-load pattern — NVM, virtualenvwrapper, and other heavy tools are wrapped in shell functions that replace themselves on first call:
nvm() { unset -f nvm node npm npx; [[ -s "$HOME/.nvm/nvm.sh" ]] && . "$HOME/.nvm/nvm.sh"; nvm "$@"; }First nvm call loads the real thing; every subsequent call is native speed.
Git aliases for real workflows — git please (force-with-lease), git bonk (push current branch), git trim (clean merged branches), git lg (compact colored log). Full list in git/.gitconfig.
Delta as git pager — side-by-side diffs with line numbers in the terminal. Once you try it, plain git diff feels broken.
Modern CLI replacements — bat for cat, lsd for ls, ripgrep for grep, zoxide for cd, delta for diff. All drop-in compatible with muscle memory.
blort.sh — runs black, isort, and pylint only on Python files changed in your PR or branch. No more linting the entire repo when you touched three files. Supports --dry-run and PR number lookup via gh.
create_icons.sh — generates a full macOS .icns icon set from any image using sips. Handy when you need app icons without opening a design tool.
- Shell startup: from 5s to 140ms — lazy-loading NVM/virtualenvwrapper, deduplicating compinit
- Zsh setup with Oh My Zsh — Powerlevel10k, plugins, modern CLI replacements, full walkthrough
- Signed Git commits with GPG — why and how to sign every commit
- How I set up Claude Code — CLAUDE.md, plugins, skills, permissions, and workflow
These are reference configs, not an install script. Fork and adapt to your setup:
- Review each file and replace placeholder values (marked with
# CHANGEME) with your own - Symlink what you need:
ln -sf ~/dotfiles/zsh/.zshrc ~/.zshrc - Install dependencies:
bat,lsd,ripgrep,delta,zoxide,fzf(all viabrew)
brew install bat lsd ripgrep git-delta zoxide fzf