aRustyDev / aRustyDev/dotfiles
feat: Add ai repo as submodule and create deployment layer
- Dominant language
- Jupyter Notebook
- Stars
- 1
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
## Overview
Add the `arustydev/ai` repository as a git submodule and create a deployment layer that installs AI configurations to the appropriate locations on each machine.
## Context
The `ai` repo is the **shareable source of truth** for AI configurations. The `dotfiles` repo serves as the **deployment layer** that:
1. Consumes `ai/` as a submodule
2. Builds/compiles configs (future - for now, just copies)
3. Deploys to target locations (`~/.claude/`, `~/.zed/`, etc.)
### Workflow
```
Project .claude/ ──promote──▶ ai/ (source) ──build──▶ global (~/.claude/)
│
▼
dotfiles/
(deployment layer)
```
## Target Structure
```
dotfiles/
├── ai/ ← git submodule (arustydev/ai)
│
├── .claude/ ← dotfiles' own project configs
│ ├── commands/
│ ├── skills/
│ └── justfile ← existing install logic
│
├── .ai/ ← dotfiles' own .ai configs (if needed)
│
└── justfile
├── install ← existing: install all dotfiles
├── ai-init ← initialize/update ai submodule
├── ai-build PROFILE TOOL ← future: compile components
├── ai-deploy PROFILE TOOL ← future: deploy to targets
└── ai-sync ← pull + build + deploy
```
## Implementation Phases
### Phase 1: Structure (Current Focus)
- [ ] Add `arustydev/ai` as git submodule at `dotfiles/ai/`
- [ ] Update `.gitmodules`
- [ ] Add `ai-init` recipe to justfile
### Phase 2: Basic Workflow
- [ ] Create `just install ai` recipe that copies to target locations:
- `ai/components/commands/` → `~/.claude/commands/`
- `ai/components/skills/` → `~/.claude/skills/`
- `ai/components/hooks/` → `~/.claude/hooks/`
- `ai/components/rules/` → `~/.claude/rules/`
- [ ] Handle Zed configs: `ai/tools/zed/` → `~/.zed/`
- [ ] Create `ai-sync` recipe for other machines
### Phase 3: Build System (Future)
- [ ] Add profile selection (env var `AI_PROFILE` or config file)
- [ ] Call `ai/build/compile.py` from justfile
- [ ] Deploy from `ai/dist/` instead of `ai/components/`
### Phase 4: Dynamic MCP (Future)
- [ ] Generate MCP configs from `ai/mcp/`
- [ ] Resolve `op://` secrets at deploy time using 1Password CLI
- [ ] Support tool-specific MCP formats
## Justfile Recipes
### Phase 1 (Now)
```just
# Initialize or update the ai submodule
ai-init:
git submodule update --init --recursive ai/
git submodule update --remote ai/
```
### Phase 2 (Soon)
```just
# Install AI configs to global locations (simple copy, no profiles yet)
[group('ai')]
install-ai:
@echo "Installing AI configs..."
mkdir -p ~/.claude/{commands,skills,hooks,rules}
cp -r ai/components/commands/* ~/.claude/commands/ 2>/dev/null || true
cp -r ai/components/skills/* ~/.claude/skills/ 2>/dev/null || true
cp -r ai/components/hooks/* ~/.claude/hooks/ 2>/dev/null || true
cp -r ai/components/rules/* ~/.claude/rules/ 2>/dev/null || true
@echo "✅ AI configs installed"
# Sync AI configs (pull latest + install)
[group('ai')]
ai-sync:
git submodule update --remote ai/
just install-ai
```
### Phase 3+ (Future)
```just
# Build AI configs for a specific profile and tool
[group('ai')]
ai-build profile="personal" tool="claude-code":
cd ai && python build/compile.py --profile {{profile}} --tool {{tool}}
# Deploy built configs
[group('ai')]
ai-deploy profile="personal" tool="claude-code":
@echo "Deploying {{tool}} configs for {{profile}} profile..."
# Copy from ai/dist/{{tool}}/{{profile}}/ to target
```
## Target Locations by Tool
| Tool | Target Location | Config Type |
|------|----------------|-------------|
| Claude Code | `~/.claude/` | commands, skills, hooks, rules, settings.json |
| Claude Desktop | `~/Library/Application Support/Claude/` | claude_desktop_config.json |
| Zed | `~/.zed/` | settings.json, prompts/ |
| VSCode | `~/.vscode/` | settings.json, extensions |
## Profile Selection (Future)
Options for selecting which profile to use:
1. **Environment variable**: `AI_PROFILE=personal just ai-sync`
2. **Config file**: `~/.config/ai-profile` contains profile name
3. **Hostname-based**: Lookup table mapping hostnames to profiles
4. **Manual**: Always specify as argument
## Secrets Handling
Configs may contain 1Password references like `op://vault/item/key`. At deploy time:
```bash
# Resolve secrets using 1Password CLI
op inject -i config.template.json -o config.json
```
## Related Issues
- arustydev/ai#1 - Restructure ai repo for composable architecture
## Migration Notes
### Current State
- `.claude/` exists with commands, skills, hooks, rules
- `.claude/justfile` has install recipe that copies to `~/.claude/`
- `.ai/` exists with various content
### After Migration
- `ai/` submodule is the source of truth
- `.claude/` contains only dotfiles-specific project configs
- `.ai/` may be removed or kept for dotfiles-specific plans
## Labels
- enhancement
- architecture
Contributor guide
Assessment
This issue has not been assessed yet.