Declarative system configuration for macOS via Nix Flakes.
# One command to rule them all
darwin-rebuild switch --flake ~/dotfilesThis single command:
- Rebuilds nix-darwin system configuration
- Applies Home Manager user configuration
- Generates Quality System artifacts (skills, personas, memories)
- Symlinks Claude Code/Desktop config
- Validates all checks pass
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Nix Flakes β
β flake.nix β flake/ β
β βββ darwin.nix (macOS system config) β
β βββ home.nix (user environment) β
β βββ checks.nix (CI validation) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
darwin-rebuild switch
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Quality System β
β config/quality/src/ β
β βββ memories/ (17 engineering patterns) β
β βββ critic-mode/ (5 metacognitive behaviors) β
β βββ skills/ (9 domain skills) β
β βββ personas/ (6 AI personas) β
β βββ rules/ (12 AST-based rules) β
β βββ stack/ (frozen versions SSOT) β
β βββ hooks/ (PARAGON enforcement) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
bun run generate
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Generated Output β
β config/quality/generated/ β
β βββ memories.md (canonical engineering knowledge) β
β βββ critic-mode.md (self-review protocol) β
β βββ settings.json (Claude Code settings) β
β βββ skills/ (SKILL.md files) β
β βββ personas/ (persona.md files) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
Home Manager symlinks
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Runtime Config β
β ~/.claude/ β
β βββ settings.json β generated/settings.json β
β βββ skills/ β generated/skills/ β
β βββ agents/ β generated/personas/ β
β β
β ~/.config/claude/mcp-servers.json (12 MCP servers) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The Quality System is a TypeScript-based code quality framework that generates Claude Code configuration from a single source of truth.
| Component | Count | Description |
|---|---|---|
| Memories | 17 | Engineering patterns (principles, constraints, patterns, gotchas) |
| Critic Behaviors | 5 | Metacognitive protocols (3 planning, 2 execution) |
| Skills | 9 | Domain expertise (Effect-TS, testing, observability, etc.) |
| Personas | 6 | AI agent configurations (effect-architect, debugger, etc.) |
| Rules | 12 | AST-based code validation (no-any, no-try-catch, etc.) |
49 quality guards enforced at multiple layers:
| Layer | Mechanism |
|---|---|
| Claude | PreToolUse hooks (paragon-guard.ts) |
| Git | pre-commit hooks (git-hooks.nix) |
| CI | GitHub Actions (paragon-check.yml) |
Blocking guards: bash safety, conventional commits, forbidden files/imports, any type, z.infer, no-mock, TDD, DevOps files/commands, assumption language
6 Model Context Protocol servers configured (optimized Jan 2026):
| Server | Purpose |
|---|---|
| ref | SOTA documentation search (60-95% fewer tokens) |
| exa | Code context search across repos |
| github | GitHub API integration |
| playwright | Browser automation |
| ast-grep | AST-based code search |
| repomix | Codebase packaging for AI |
# Run Quality System tests
cd config/quality && bun test
# Regenerate artifacts
cd config/quality && bun run generate
# Full validation
cd config/quality && bun run validate
# Check Nix flake
nix flake check
# Rebuild system
darwin-rebuild switch --flake ~/dotfiles~/dotfiles/
βββ flake.nix # Nix flake entry point
βββ flake/ # Flake modules
β βββ darwin.nix # macOS system config
β βββ home.nix # User environment
β βββ checks.nix # CI validation
βββ modules/ # Nix modules
β βββ darwin/ # nix-darwin modules
β βββ home/ # Home Manager modules
βββ config/ # Configuration sources
β βββ quality/ # Quality System (TypeScript)
β βββ agents/ # Claude Code agent configs
βββ .github/workflows/ # CI workflows
- TypeScript types are SSOT: Define Effect Schema first, derive types via
Schema.Type - Result types for errors: Never throw, use
Effect<A, E, R>orEither<A, E> - Parse at boundaries:
Schema.decodeUnknownat entry points, trust types internally - Single source of truth: versions.ts for deps, ports.nix for ports
- Conventional commits:
type(scope): description