Skip to content

cloudprobe/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dotfiles

Zero-to-productive setup for a new Mac. ZSH + Starship + Claude Code.

License macOS Stars ShellCheck

preview

Why

Most dotfiles repos are either too minimal to be useful or too personal to adapt. This one is built for production/infra engineers — people who live in Kubernetes, AWS, Terraform, and Go all day.

  • No oh-my-zsh — it's slow and bloated. zinit loads plugins lazily and starts the shell in milliseconds.
  • Starship over p10k — actively maintained, written in Rust, works the same across every machine without manual config wizards.
  • Claude Code setup that actually works — hierarchical config with rules, skills, and agents tuned for infra/cloud work. Not just a blank CLAUDE.md.
  • Zero manual steps — one command, everything works. No font installs, no settings changes, no wizard prompts.

What's included

Component Details
ZSH Clean config via zinit — no oh-my-zsh
Prompt Starship — shows Git, K8s context, AWS profile, Terraform workspace
Plugins zsh-autosuggestions, zsh-syntax-highlighting, zsh-completions
Tools eza (ls), bat (cat), ripgrep (grep), zoxide (cd), fzf, pyenv (Python versions)
Git Sensible defaults, global gitignore, local identity override
Claude Code Full hierarchical global config — rules, commands, skills, agents, memory, hooks
Team setup Project template with shared hooks, MCP config, security rules, local override pattern

Install

Everything at once:

git clone https://github.com/cloudprobe/dotfiles ~/.dotfiles
cd ~/.dotfiles
make install

Or pick only what you need:

make zsh      # ZSH + Starship only
make git      # Git config only
make claude   # Claude Code config only

Then create your local overrides (never committed):

# Git identity — required
cat > ~/.gitconfig.local << EOF
[user]
  name = Your Name
  email = your@email.com
EOF

# Machine-specific env vars, paths, secrets
# A template is provided — copy and fill in what you need:
cp ~/.dotfiles/zsh/.zshrc.local.template ~/.zshrc.local

# AWS profiles — copy the sample and fill in your accounts:
mkdir -p ~/.aws
cp ~/.dotfiles/aws/config.sample ~/.aws/config

Structure

dotfiles/
├── zsh/
│   ├── .zshrc                  # zinit + starship + pyenv, no oh-my-zsh
│   ├── .aliases                # k8s, aws, git, docker, terraform + h() search
│   ├── starship.toml           # prompt: git, k8s, aws, terraform, go, python
│   └── .zshrc.local.template   # copy to ~/.zshrc.local for machine-specific config
├── git/
│   ├── .gitconfig              # defaults, identity via ~/.gitconfig.local
│   └── .gitignore_global       # .DS_Store, .env, .terraform, secrets
├── aws/
│   └── config.sample           # copy to ~/.aws/config, fill in your profiles/roles
├── claude/
│   ├── CLAUDE.md               # global instructions
│   ├── settings.json           # permissions + hooks (gofmt on save, notifications)
│   ├── rules/
│   │   ├── code-style.md       # Go, Shell conventions
│   │   └── infra.md            # Terraform, K8s, AWS rules
│   ├── commands/
│   │   ├── commit.md           # /commit — staged diff → commit message
│   │   ├── review.md           # /review — branch diff review
│   │   └── standup.md          # /standup — daily standup from git log + open PRs
│   ├── skills/
│   │   ├── infra-context.md    # auto: apply infra rules when touching infra files
│   │   ├── secret-guard.md     # auto: flag secrets in every session
│   │   └── go-conventions.md   # auto: apply Go rules when editing .go files
│   ├── agents/
│   │   ├── infra-reviewer.md   # specialized infra review agent
│   │   └── pr-reviewer.md      # PR review via gh with CRITICAL/WARNING/INFO output
│   ├── memory/
│   │   └── README.md           # how Claude uses persistent memory across sessions
│   └── project-template/       # copy into new repos as .claude/
│       ├── CLAUDE.md           # team-ready template with conventions, CI/CD, reviewers
│       ├── settings.json       # shared hooks: secret protection + auto-format
│       ├── settings.local.json.template  # copy → settings.local.json (gitignored)
│       ├── .mcp.json           # GitHub MCP server for PR/issue access
│       ├── .gitignore          # ensures settings.local.json is never committed
│       ├── rules/
│       │   ├── project-rules.md  # branching, dependencies
│       │   ├── testing.md        # test structure and requirements
│       │   └── security.md       # secrets, IAM, K8s security rules
│       └── commands/
│           └── ship.md           # /ship — pre-PR checklist
├── .editorconfig               # consistent indentation across editors/tools
└── install.sh                  # one-click or modular bootstrap

Claude Code — hierarchical setup

This repo sets up the global layer (~/.claude/). There are three layers in total:

~/.claude/CLAUDE.md       ← global baseline: stack, style, preferences (this repo)
~/CLAUDE.md               ← personal layer: org/team/work context (private, not committed)
project/.claude/CLAUDE.md ← per-project: committed to that repo, extends both layers above

The dotfiles CLAUDE.md is intentionally public-safe — it describes your stack and preferences but nothing org-specific. For work context (company tools, team conventions, Jira/Slack config, internal URLs), create ~/CLAUDE.md:

cat > ~/CLAUDE.md << 'EOF'
# Personal context

## Work environment
- Company: <your org>
- Primary repo: ~/work/...

## Tools and access
- ...
EOF

Claude Code loads all three layers every session, from most general to most specific.

For each new project, copy claude/project-template/ into your repo as .claude/ and fill in the project-specific CLAUDE.md.

Team setup

The claude/project-template/ is designed for teams. Copy it into a repo once — every team member gets the same Claude behavior automatically:

cp -r ~/.dotfiles/claude/project-template/ my-repo/.claude
cd my-repo
# Edit .claude/CLAUDE.md with your project context
# Edit .claude/.mcp.json with your GitHub token env var name
git add .claude/
git commit -m "add Claude Code team config"

Each team member then creates their local override (never committed):

cp .claude/settings.local.json.template .claude/settings.local.json
# Edit with machine-specific paths and AWS profiles

What the team config gives you:

Feature How
Secret file protection PreToolUse hook blocks writes to .env, *.key, *.pem
Auto-format on save PostToolUse hooks run gofmt, terraform fmt, shellcheck
GitHub PR/issue access .mcp.json with GitHub MCP server
Security rules .claude/rules/security.md — IAM, K8s, secrets
Testing standards .claude/rules/testing.md — table tests, boundary testing
PR review /pr-reviewer <number> — CRITICAL/WARNING/INFO output via gh
Standup summary /standup — git log + open PRs formatted for standup
Local overrides settings.local.json (gitignored) for per-dev machine config

Prompt preview

~/work/myproject  main ✓  ⎈ prod(default)  ☁️  prod-aws
❯

Shows: directory · git branch/status · Kubernetes context · AWS profile

About

Zero-to-productive dotfiles — ZSH + Starship + Claude Code setup for engineers

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors