One-command setup for a developer workstation. Workspaces with AI agents, shell config, Git workflow, IDE settings, language runtimes - everything you need on a fresh environment.
git clone https://github.com/mayankshriv/devkit.git ~/devkit
cd ~/devkit
./install.shThen add one line to your ~/.zshrc:
source ~/devkit/shell/devkit.zshOpen a new terminal. Done.
Platform: Built for macOS. Most modules (shell, git, claude, tabs, tmux) work on Linux. macOS-specific pieces: Brewfile, iTerm2 profile,
jdk()function, SSH Keychain.
| Module | What it does |
|---|---|
| shell/ | Prompt with git branch, aliases, functions, completions |
| git/ | Gitconfig, global gitignore, pre-push hook, dev workflow |
| tmux/ | Alt+1-7 window switching, mouse, scrollback, status bar |
| claude/ | Permissions allowlist, statusline, global instructions, lint skill |
| tabs/ | Named tabs with Claude in every pane (herdr or tmux) |
| intellij/ | Java code style, VM options, plugin recommendations |
| terminal/ | iTerm2 profile (font, colors) |
| cloud/ | AWS CLI, gcloud, kubectl setup and context switching |
| languages/ | Java (jenv), Node (nvm), Python (pyenv+uv), Rust (rustup) |
| ssh/ | SSH config template (ed25519 + Keychain) |
Define your projects in ~/.config/devkit/tabs.yaml:
mkdir -p ~/.config/devkit
cp ~/devkit/tabs/tabs.example.yaml ~/.config/devkit/tabs.yaml
# Edit with your projectsworkspaces:
- name: my-project
root: ~/projects/my-project
tabs:
- label: code
panes:
- command: claudeThen use these commands:
| Command | What it does |
|---|---|
tabs |
Launch or reattach to all tabs (herdr if installed, tmux otherwise) |
tabs -herdr |
Force herdr backend |
tabs -tmux |
Force tmux backend |
tabls |
Show all tabs with agent status |
tabadd <name> [dir] |
Add a tab on the fly |
tabrm <name> |
Remove a tab |
taboff |
Stop all tabs |
Defaults to herdr when installed (agent-aware multiplexer - sessions survive lid close, shows Claude working/blocked/done status). Falls back to tmux.
The source model means devkit layers on top of your existing setup:
- Shell -
source ~/devkit/shell/devkit.zshadds to your shell; it doesn't replace your.zshrc - Git -
include.pathmerges devkit aliases into your gitconfig; your name/email stay
Machine-specific configs live outside the repo so they survive rm -rf ~/devkit:
| File | What goes there |
|---|---|
~/.config/devkit/tabs.yaml |
Your tab/workspace layout (see Tabs) |
shell/env.local |
API keys, tokens, env vars (gitignored) |
.claude/settings.local.json |
Claude Code permission overrides (gitignored) |
tabs.yaml is the only one stored in ~/.config. The other two are gitignored in-repo files -
back them up separately if needed.
- Aliases - edit
shell/aliases.zsh - Functions - edit
shell/functions.zsh - Claude instructions - edit
claude/CLAUDE.md - Brew packages - edit
Brewfile - Skills - add directories under
claude/skills/
Fork-based development. See git/dev-workflow.md for the full guide.
# Start a feature
git fetch upstream
git checkout -b my-feature upstream/main
# Work, commit, amend
git commit -m "my change"
git commit --amend # follow-up fixes
# Push and PR
git push origin my-feature --force-with-lease
gh pr create --base mainProtected branches: A global pre-push hook blocks force pushes to main/master. Force push on feature branches is normal and expected.
Setup scripts for AWS, GCP, and Kubernetes. Run individually:
./cloud/aws.sh # AWS CLI + initial config
./cloud/gcloud.sh # Google Cloud SDK + gcloud init
./cloud/kubectl.sh # kubectl + context checkShell helpers (loaded automatically via devkit.zsh):
| Command | What it does |
|---|---|
awsprofile [name] |
Show or switch AWS profile |
gproject [id] |
Show or switch gcloud project |
kctx [name] |
Show or switch kubectl context |
kns [name] |
Show or switch kubectl namespace |
# Second machine
git clone https://github.com/mayankshriv/devkit.git ~/devkit
cd ~/devkit && ./install.sh
# After pulling updates
cd ~/devkit && git pull && ./install.shinstall.sh is idempotent - it backs up existing files before replacing them and skips
what's already set up.
devkit/
├── install.sh # One command setup
├── Brewfile # All brew packages
├── shell/
│ ├── devkit.zsh # Source this from ~/.zshrc
│ ├── aliases.zsh
│ ├── functions.zsh
│ └── env.local # Secrets (gitignored)
├── git/
│ ├── gitconfig # Aliases, settings
│ ├── ignore # Global gitignore
│ ├── hooks/pre-push # Block force push to main
│ └── dev-workflow.md # Fork-based dev guide
├── ssh/
│ └── config # Template
├── tmux/
│ └── tmux.conf
├── claude/
│ ├── settings.json # Permissions allowlist
│ ├── CLAUDE.md # Global instructions
│ ├── statusline-command.sh # Model, cost, tokens, git
│ └── skills/
│ ├── lint/SKILL.md # Multi-language lint skill
│ └── dev-framework/SKILL.md # Feature development framework
├── intellij/
│ ├── codestyle.xml # Java code style
│ ├── idea.vmoptions # 8GB heap
│ └── README.md
├── terminal/
│ ├── iterm2-profile.json # Font + color palette
│ └── README.md
├── cloud/
│ ├── aws.sh # AWS CLI setup
│ ├── gcloud.sh # Google Cloud SDK setup
│ └── kubectl.sh # Kubernetes CLI setup
├── tabs/
│ ├── tabs.zsh # tabs/tabls/taboff commands
│ └── tabs.example.yaml # Template (copy to ~/.config/devkit/tabs.yaml)
└── languages/
├── java.sh # jenv + JDK setup
├── node.sh # nvm setup
├── python.sh # pyenv + uv setup
└── rust.sh # rustup setup
MIT