This repository contains my configuration files and setup scripts for a macOS development environment using iTerm2 + Zsh + Oh My Zsh + Powerlevel10k + pi + Claude Code, tailored for TypeScript / Node.js / React / React Native and Python engineers of the AI era.
- Fully declarative via Homebrew Bundle (
Brewfile) - Minimal manual setup steps
- iTerm2 + Zsh shell setup optimized for developer productivity
- Powerlevel10k prompt theme
- Essential Zsh plugins: autosuggestions, fast syntax-highlighting
- Support for both TS/Node/React stack and Python dev stack
- macOS (Zsh is default shell)
- Homebrew installed — this will install Xcode command line tools — see brew.sh
- Oh My Zsh installed — see ohmyzsh/ohmyzsh
Warning: If you want to give these dotfiles a try, you should first fork this repository, review the code, and remove things you don't want or need. Don't blindly use my settings unless you know what that entails. Use at your own risk!
-
Clone this repo
git clone https://github.com/hefgi/dotfiles.git ~/dotfiles cd ~/dotfiles
-
Install everything via Brewfile
brew bundle --file=Brewfile
-
Symlink configuration files
ln -s ~/dotfiles/.zshrc ~/.zshrc ln -s ~/dotfiles/.zprofile ~/.zprofile ln -s ~/dotfiles/.gitconfig ~/.gitconfig ln -s ~/dotfiles/.vimrc ~/.vimrc ln -s ~/dotfiles/vscode/settings.json ~/Library/Application\ Support/Code/User/settings.json ln -s ~/dotfiles/.claude ~/.claude
-
Copy pi configuration (not symlinked — pi writes runtime data here)
cp -r ~/dotfiles/.pi ~/.pi cp -r ~/dotfiles/.agents ~/.agents
-
Configure Git
git config --global user.name "Your Name" git config --global user.email "you@example.com" git config --global user.signingkey "your-ssh-public-key"
-
Reload your shell
source ~/.zshrc
-
Configure Powerlevel10k
p10k configure
-
Install last stable Node Version
nvm install --lts nvm alias default 'lts/*'
The .gitconfig is preconfigured for SSH commit signing via 1Password. To set it up:
- Install and configure 1Password with an SSH key
- Enable the 1Password SSH agent — see 1Password SSH docs
- Set your signing key (step 4 above) to the public key from 1Password
Once configured, all commits will be automatically signed.
I use the Solarized Dark palette across tools for visual consistency. Set Solarized Dark in:
- iTerm2 → Preferences → Profiles → Colors → Load Presets… → Solarized Dark
- VS Code: Install this package and select Solarized Dark
- Vim: Follow installation instruction here
- Sublime Text → Preferences → Color Scheme → Solarized Dark
- Xcode → Preferences → Fonts & Colors → Solarized Dark
Use nvm for Node.js version management and Use npm and/or yarn for package management.
Use pyenv to manage Python versions and use pipenv for virtual environments and dependencies.
pi, Claude Code, and Cursor installed by default.
Use VSCode and Cursor as main IDEs. Use Xcode for iOS Development.
Use Vim for terminal editing and Sublime Text for GUI editing.
pi configuration is tracked in .pi/ and .agents/:
agent/settings.json— packages, default provider/model, and themeagent/AGENTS.md— global agent instructions (e.g. prefer Brew, use tmux)agent/extensions/— extension configs (e.g. pi-rtk-optimizer)agent/skills/— symlinks to shared.agents/skills/web-search.json— API keys for web search (Exa + Gemini).agents/skills/— shared skill definitions used by both pi and Claude Code
The .pi/ and .agents/ directories are not symlinked — they're meant to be copied, since pi writes runtime data (sessions, logs) to ~/.pi.
Setup after copying .pi/ to ~/.pi:
- Configure web search API keys in
~/.pi/web-search.json:- Get an Exa API key from exa.ai
- Get a Gemini API key from Google AI Studio
- Configure your default model & provider in
~/.pi/agent/settings.json:defaultProvider— e.g.kimi-coding,anthropic,openaidefaultModel— e.g.k2p6,claude-sonnet-4-5,gpt-4o
Global Claude Code configuration is tracked in .claude/:
CLAUDE.md— global instructions applied across all projects (commit conventions, package manager preferences, etc.)settings.json— shared permissions, environment variables, and defaultssettings.local.json— machine-specific overrides (not meant to be shared as-is)hooks/notify.sh— macOS notification hook for task completion alertsskills/— symlinks to shared.agents/skills/
The symlink in step 3 links ~/.claude to the repo, so all Claude Code config stays in sync.
git logx→ prints a pretty, colored Git log graph with recent 20 commits.git tree→ shows a nice history tree view of the repository - good terminal alternative to GitX GUIll→ quick shortcut forls -lato list all files in detail (useezainstead if installed).python→ always invokespython3(from Homebrew) so you don't have to typepython3.pip→ always usespip3, so you install packages for Python 3 by default.bat→ aliased tocatif installed (modern replacement with syntax highlighting).eza→ aliased tolsif installed (modern replacement with icons and Git status).yazi→ aliased toopenfor quick terminal file browsing.
yazi– fast terminal file manager with previewsbat– moderncatreplacement with syntax highlighting, Git integrationfzf– fuzzy finder for files, history, Git brancheseza– modernlsreplacement (icons, Git status)z(orzoxide) – quickly jump between frequently used directoriesGitX– macOS GUI Git client for visual source-control management - good GUI alternative togit tree
Install everything via Brewfile
brew bundle --file=Brewfile-cool-tools- iTerm2 - Terminal
- Oh My Zsh – Zsh configuration framework
- Powerlevel10k – Zsh prompt theme
- Solarized Dark theme - Precision color palette
- Zsh plugin: zsh-autosuggestions, fast-syntax-highlighting
