diff --git a/.ddev/addon-metadata/claude/manifest.yaml b/.ddev/addon-metadata/claude/manifest.yaml new file mode 100644 index 00000000..1d7df3b3 --- /dev/null +++ b/.ddev/addon-metadata/claude/manifest.yaml @@ -0,0 +1,11 @@ +name: claude +repository: /Users/fromme/Development/Misc/ddev-claude-code +version: "" +install_date: "2026-01-13T12:52:26+01:00" +project_files: + - commands/web/claude + - config.claude.yaml + - docker-compose.claude.yaml + - claude/.gitignore +global_files: [] +removal_actions: [] diff --git a/.ddev/addon-metadata/opencode/manifest.yaml b/.ddev/addon-metadata/opencode/manifest.yaml deleted file mode 100644 index 10017fab..00000000 --- a/.ddev/addon-metadata/opencode/manifest.yaml +++ /dev/null @@ -1,11 +0,0 @@ -name: opencode -repository: /Users/fromme/Development/Misc/ddev-opencode -version: "" -install_date: "2026-01-05T16:57:43+01:00" -project_files: - - web-build/Dockerfile.opencode - - commands/web/opencode - - config.opencode.yaml - - opencode/.gitignore -global_files: [] -removal_actions: [] diff --git a/.ddev/claude/.gitignore b/.ddev/claude/.gitignore new file mode 100644 index 00000000..cffe8515 --- /dev/null +++ b/.ddev/claude/.gitignore @@ -0,0 +1,5 @@ +# Auth tokens - do not commit +.claude.json + +# Claude data directory +.claude/ diff --git a/.ddev/commands/web/claude b/.ddev/commands/web/claude new file mode 100755 index 00000000..9516cf8b --- /dev/null +++ b/.ddev/commands/web/claude @@ -0,0 +1,19 @@ +#!/bin/bash + +## Description: Run Claude Code +## Usage: claude [args] +## Example: ddev claude +## Example: ddev claude --help +## Example: ddev claude doctor + +# Ensure ~/.local/bin is in PATH +export PATH="$HOME/.local/bin:$PATH" + +# Check if claude is installed +if [ ! -f "$HOME/.local/bin/claude" ]; then + echo "Claude Code is not installed. Installing now..." + curl -fsSL https://claude.ai/install.sh | bash +fi + +# Run claude with all arguments +exec "$HOME/.local/bin/claude" "$@" diff --git a/.ddev/commands/web/opencode b/.ddev/commands/web/opencode deleted file mode 100755 index 9cc814c6..00000000 --- a/.ddev/commands/web/opencode +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -#ddev-generated - -## Description: OpenCode AI coding assistant -## Usage: opencode -## Example: ddev opencode [...] - -set -e - -opencode $@ - diff --git a/.ddev/config.claude.yaml b/.ddev/config.claude.yaml new file mode 100644 index 00000000..6f33e8f6 --- /dev/null +++ b/.ddev/config.claude.yaml @@ -0,0 +1,26 @@ +#ddev-generated +# Claude Code add-on configuration +# This file is merged with your project's .ddev/config.yaml + +hooks: + post-start: + # Fix volume permissions for binaries + - exec: "sudo chown -R $(id -u):$(id -g) /mnt/claude-binaries" + - exec: "mkdir -p /mnt/claude-binaries/local-bin /mnt/claude-binaries/local-share" + # Create config directories if needed + - exec: "mkdir -p /mnt/claude-config/.claude" + - exec: "test -s /mnt/claude-config/.claude.json || echo '{}' > /mnt/claude-config/.claude.json" + # Copy global CLAUDE.md and skills from homeadditions (if they exist) + - exec: "test -f ~/.claude-global/CLAUDE.md && cp -n ~/.claude-global/CLAUDE.md /mnt/claude-config/.claude/ || true" + - exec: "test -d ~/.claude-global/skills && cp -rn ~/.claude-global/skills /mnt/claude-config/.claude/ || true" + # Remove existing dirs/files and create symlinks + - exec: "rm -rf ~/.claude && ln -sfn /mnt/claude-config/.claude ~/.claude" + - exec: "rm -f ~/.claude.json && ln -sfn /mnt/claude-config/.claude.json ~/.claude.json" + # Symlink ~/.local/bin to volume (for claude binary) + - exec: "mkdir -p ~/.local && rm -rf ~/.local/bin && ln -sfn /mnt/claude-binaries/local-bin ~/.local/bin" + # Symlink ~/.local/share to volume (for claude versions) + - exec: "rm -rf ~/.local/share && ln -sfn /mnt/claude-binaries/local-share ~/.local/share" + # Set up PATH + - exec: "mkdir -p ~/.bashrc.d && echo 'export PATH=\"$HOME/.local/bin:$PATH\"' > ~/.bashrc.d/claude.sh" + # Install Claude Code if not already installed + - exec: "ls /mnt/claude-binaries/local-share/claude/versions/* >/dev/null 2>&1 || curl -fsSL https://claude.ai/install.sh | bash" diff --git a/.ddev/config.opencode.yaml b/.ddev/config.opencode.yaml deleted file mode 100644 index 57e5c8bb..00000000 --- a/.ddev/config.opencode.yaml +++ /dev/null @@ -1,6 +0,0 @@ -#ddev-generated -webimage_extra_packages: - - xdg-utils -hooks: - post-start: - - exec: "mkdir -p /var/www/html/.ddev/opencode/.opencode && ln -sf /var/www/html/.ddev/opencode/.opencode ~/.opencode" diff --git a/.ddev/docker-compose.claude.yaml b/.ddev/docker-compose.claude.yaml new file mode 100644 index 00000000..be917c0e --- /dev/null +++ b/.ddev/docker-compose.claude.yaml @@ -0,0 +1,12 @@ +#ddev-generated +# Mount a named Docker volume for Claude Code binaries (isolated) +# Config files are stored in .ddev/claude/ (host-accessible) + +services: + web: + volumes: + - claude-binaries:/mnt/claude-binaries + - ./claude:/mnt/claude-config + +volumes: + claude-binaries: diff --git a/.ddev/opencode/.gitignore b/.ddev/opencode/.gitignore deleted file mode 100644 index 3180cda2..00000000 --- a/.ddev/opencode/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -#ddev-generated - -# OpenCode internal config -/.opencode/ - diff --git a/.ddev/web-build/Dockerfile.opencode b/.ddev/web-build/Dockerfile.opencode deleted file mode 100644 index 65b98e0a..00000000 --- a/.ddev/web-build/Dockerfile.opencode +++ /dev/null @@ -1,4 +0,0 @@ -#ddev-generated - -RUN npm install -g opencode-ai -