aRustyDev / aRustyDev/dotfiles

feat: Add ai repo as submodule and create deployment layer

Open
#176 0 comments 0 reactions 0 assignees View on GitHub
enhancement
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.