Personal config files for macOS, managed via symlinks.
~/dotfiles/ is the source of truth. Edit configs here, commit, and push. Target paths (~/.config/, ~/.claude/, etc.) just hold symlinks that point back to this repo — never edit files there directly.
dotfiles/
│
│ # ~/.config/ targets
├── amp/ → ~/.config/amp/
│ ├── settings.json # Amp agent settings + MCP servers
│ └── skills/ # Custom Amp skills (symlinks → skills/ + amp/skills/)
│ └── obsidian-markdown/ # Obsidian Flavored Markdown reference
├── fish/ → ~/.config/fish/
│ ├── config.fish # Shell config (PATH, interactive tools)
│ ├── completions/ # Custom completions
│ ├── conf.d/ # Auto-sourced config snippets
│ └── functions/ # Custom functions
├── ghostty/ → ~/.config/ghostty/
│ └── config # Terminal emulator settings
├── zed/settings.json → ~/.config/zed/settings.json
├── starship.toml → ~/.config/starship.toml
│
│ # Agent dotdir targets (~/.claude/, ~/.qwen/, ~/.kimi/)
├── claude/ (files symlinked individually)
│ ├── mcp.json → ~/.mcp.json
│ ├── settings.json → ~/.claude/settings.json
│ └── statusline.sh → ~/.claude/statusline.sh
├── qwen/ → ~/.qwen/
│ └── settings.json # Qwen Code settings + context config
├── kimi/ → ~/.kimi/
│ ├── config.toml # Kimi Code settings
│ └── mcp.json # MCP servers (context7)
│
│ # Skills (source of truth, symlinked to agent skill directories)
├── skills/
│ ├── rams/ # A11y + visual design review (scored)
│ ├── baseline-ui/ # Anti-AI-slop UI constraints
│ ├── web-interface-guidelines/ # Vercel's 80+ web UI rules
│ └── modern-python/ # Python tooling guide (uv, ruff, ty)
│
│ # Shared across agents
└── AGENTS.md → ~/.config/AGENTS.md + ~/.claude/CLAUDE.md
All coding agents share a single AGENTS.md — one file, symlinked per agent:
| Agent | Reads from | Symlink |
|---|---|---|
| Claude Code | ~/.claude/CLAUDE.md |
~/dotfiles/AGENTS.md → ~/.claude/CLAUDE.md |
| Amp | ~/.config/AGENTS.md |
~/dotfiles/AGENTS.md → ~/.config/AGENTS.md |
| Qwen Code | ~/.qwen/QWEN.md |
~/dotfiles/AGENTS.md → ~/.qwen/QWEN.md |
| Kimi Code | AGENTS.md in working dir |
Reads ~/dotfiles/AGENTS.md directly |
Every repo can have a local/ directory for agent scratch space (shaping docs, spikes, plans, debug output). It's globally gitignored via ~/.config/git/ignore but accessible to all agents and editors:
| Tool | How local/ is discovered |
|---|---|
| Amp | amp.fuzzy.alwaysIncludePaths: ["local/**"] in settings.json |
| Zed | file_scan_inclusions: ["local/**"] + search.include_ignored: true |
| Claude/Kimi/Qwen | Read any file on disk when asked — AGENTS.md instructs them to check local/docs/ proactively |
Run these commands to symlink configs to ~/.config/:
# Fish shell (entire directory)
ln -s ~/dotfiles/fish ~/.config/fish
# Ghostty (entire directory)
ln -s ~/dotfiles/ghostty ~/.config/ghostty
# Amp (entire directory)
ln -s ~/dotfiles/amp ~/.config/amp
# Starship prompt
ln -s ~/dotfiles/starship.toml ~/.config/starship.toml
# Zed (settings file only — Zed manages the rest of ~/.config/zed/)
mkdir -p ~/.config/zed
ln -s ~/dotfiles/zed/settings.json ~/.config/zed/settings.json
# AGENTS.md (global agent instructions — Amp reads ~/.config/AGENTS.md)
ln -s ~/dotfiles/AGENTS.md ~/.config/AGENTS.md
# Claude Code reads ~/.claude/CLAUDE.md (symlink to same file)
ln -s ~/dotfiles/AGENTS.md ~/.claude/CLAUDE.md
# Claude Code settings + statusline + global MCP servers
ln -s ~/dotfiles/claude/mcp.json ~/.mcp.json
ln -s ~/dotfiles/claude/settings.json ~/.claude/settings.json
ln -s ~/dotfiles/claude/statusline.sh ~/.claude/statusline.sh
# Qwen Code settings + global instructions
mkdir -p ~/.qwen
ln -s ~/dotfiles/qwen/settings.json ~/.qwen/settings.json
ln -s ~/dotfiles/AGENTS.md ~/.qwen/QWEN.md
# Kimi Code settings + MCP servers
ln -s ~/dotfiles/kimi/config.toml ~/.kimi/config.toml
ln -s ~/dotfiles/kimi/mcp.json ~/.kimi/mcp.json
# Design skills (symlink to Claude Code + Amp)
ln -s ~/dotfiles/skills/rams ~/.claude/skills/rams
ln -s ~/dotfiles/skills/baseline-ui ~/.claude/skills/baseline-ui
ln -s ~/dotfiles/skills/web-interface-guidelines ~/.claude/skills/web-interface-guidelines
ln -s ~/dotfiles/skills/rams ~/dotfiles/amp/skills/rams
ln -s ~/dotfiles/skills/baseline-ui ~/dotfiles/amp/skills/baseline-ui
ln -s ~/dotfiles/skills/web-interface-guidelines ~/dotfiles/amp/skills/web-interface-guidelines
# Obsidian skill (lives in amp/skills/ directly, symlink to ~/.config/amp/skills/)
ln -s ~/dotfiles/amp/skills/obsidian-markdown ~/.config/amp/skills/obsidian-markdownPATH additions:
/opt/homebrew/bin,/opt/homebrew/sbin— Homebrew~/.local/bin— pip, pipx, cargo installs~/.amp/bin— Amp CLI~/.opencode/bin— OpenCode CLI~/.nvm/versions/node/v24.1.0/bin— Node.js (via nvm)
Interactive tools:
fzf— Fuzzy finder keybindingszoxide— Smart cd (zcommand)starship— Prompt theme
- Font: Berkeley Mono @ 14pt
- Default shell: fish
- Theme: One Light / macOS Classic Dark (system mode)
- Font: Berkeley Mono @ 15pt
- Helix keybindings enabled
- Agent: Claude Opus 4.5 / Sonnet 4.5
amp.fuzzy.alwaysIncludePaths: ["local/**"]— exposes gitignoredlocal/to fuzzy search- MCP servers (
amp.mcpServers): context7, linear, tldraw
- Two-line statusline: model/folder/branch + context bar/cost/duration
- Context bar goes dim
░→ solid█as context fills up - Global MCP servers (
mcp.json→~/.mcp.json): context7 - Add project-specific servers to
.mcp.jsonin the project root
- Model:
coder-model(via OAuth) - Context files: reads
QWEN.mdandAGENTS.mdfrom project dirs (viacontext.fileName) - Global instructions:
~/dotfiles/AGENTS.md→~/.qwen/QWEN.md - MCP servers: context7, linear, sentry, tldraw
- Model:
kimi-for-coding(Kimi K2.5, 262k context, via OAuth) - Thinking mode enabled by default
- MCP servers (
mcp.json→~/.kimi/mcp.json): context7
Skills (skills/)
Reusable capabilities for Claude Code (/skill) and Amp. All skills live in ~/dotfiles/skills/ and are symlinked to agent-specific directories.
| Skill | Source | What it does | When to use |
|---|---|---|---|
| rams | rams.ai | WCAG 2.1 accessibility + visual design review with scored output | Reviewing components for a11y violations, visual inconsistencies, missing states |
| baseline-ui | ibelick/ui-skills | Opinionated anti-AI-slop constraints (Tailwind, motion, a11y) | Starting UI work—apply these constraints before generating any code |
| web-interface-guidelines | vercel-labs/web-interface-guidelines | Comprehensive web UI compliance (80+ rules) | Detailed compliance check covering forms, animation, typography, perf, i18n, hydration |
These three complement each other:
- baseline-ui prevents slop at generation time (guardrails)
- rams scores existing components with actionable fixes
- web-interface-guidelines is the complete rulebook for production polish
| Skill | Source | What it does | When to use |
|---|---|---|---|
| modern-python | — | Modern Python tooling guide (uv, ruff, ty) | Creating Python projects, writing scripts, migrating from pip/poetry/mypy/black |
| obsidian-markdown | kepano/obsidian-skills | Obsidian Flavored Markdown reference (wikilinks, embeds, callouts, properties) | Working with .md files in Obsidian vaults |
Quick usage:
# In Claude Code
/skill rams src/Button.tsx
/skill baseline-ui
/skill modern-python
# In Amp
@rams src/Button.tsx
@baseline-ui
@modern-pythonCurrently using defaults (empty config).
Install these via Homebrew:
brew install fish fzf zoxide starship- Zed recreates
~/.config/zed/on launch, so onlysettings.jsonis symlinked (not the whole directory). - Node.js is managed via nvm with a hardcoded path. If you upgrade node, update the path in
fish/config.fish. - Kimi Code credentials live in
~/.kimi/credentials/(not tracked). Install viacurl -L code.kimi.com/install.sh | bash.