repos
/ taproot main

taproot

mirror

The dotfiles and containers I use to set up a machine for development, one container to write code in and another that runs a local coding model on the desktop's GPU.

alpine-linuxcaddydevelopment-environmentdockerdotfileshomelabinfrastructureneovimserver-configurationtmux

2.6 KB · 54 lines · markdown Raw History
 1# Claude Code config
 2
 3Version-controlled Claude Code config for the webdev machine: skills, the status line,
 4and shareable global settings. Lives in taproot (a **public** repo), symlinked into the
 5untracked `~/.claude/` volume so edits here are live immediately and survive container
 6rebuilds.
 7
 8## What lives here (and what must not)
 9
10taproot is public, so only non-secret config goes here.
11
12| In taproot (public)        | What it is                                              |
13|----------------------------|--------------------------------------------------------|
14| `skills/`                  | Our own skills (no MCPs, no plugins)                    |
15| `status-line.sh`           | The status line script (usg/ctx/cwd/git/ET clock)      |
16| `settings.json`            | Reference template of global settings (NOT symlinked)  |
17
18`settings.json` here is a **reference copy**, not a live symlink. The live
19`~/.claude/settings.json` carries permission-posture flags
20(`skipDangerousModePermissionPrompt`, `defaultMode`), which the Claude Code harness
21will not let an agent auto-symlink or auto-edit (it flags self-modification). Keep the
22live file machine-local and update this template by hand when the posture changes.
23
24**Never put here** (kept in the `~/.claude` volume + restic only): `.credentials.json`,
25`.claude.json`, `settings.local.json` (per-machine permission grants), and anything with
26tokens, keys, or session/auth state.
27
28## Skills
29
30Plain skill dirs, each `skills/<name>/SKILL.md` with YAML frontmatter (`name`,
31`description`) and a Markdown body. We use skills instead of MCPs/plugins:
32
33- **journal** wrap the session into the `~/code/memory` vault (the memory contract).
34- **playwright** browser automation via `playwright-cli` (token-efficient, replaces the
35  Playwright MCP).
36- **rust** working on the axum + Vite + SQLite projects (replaces rust-analyzer-lsp, note
37  this drops live LSP diagnostics, a skill is instructions only).
38
39## Setup on a fresh machine
40
41`~/.claude` is a Docker volume (persistent, restic-backed), so on an existing machine
42these symlinks already survive rebuilds. Only a brand-new volume needs this one-time
43wiring, after `~/code/taproot` is cloned:
44
45```bash
46ln -snf ~/code/taproot/dotfiles/claude/skills         ~/.claude/skills
47ln -snf ~/code/taproot/dotfiles/claude/status-line.sh ~/.claude/status-line.sh
48# settings.json is machine-local, so copy the template instead of symlinking:
49cp ~/code/taproot/dotfiles/claude/settings.json ~/.claude/settings.json   # then re-add machine-local bits
50```
51
52`settings.json`'s `statusLine.command` points at `~/.claude/status-line.sh`, which the
53status-line symlink redirects back here, so no path edit is needed.