From eee85320c21a121cc32376374ae176064d0691a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Mon, 12 Jan 2026 20:01:34 +0100 Subject: [PATCH] chore: update claude code ddev installation --- .../addon-metadata/claude-code/manifest.yaml | 12 --------- .ddev/addon-metadata/claude/manifest.yaml | 11 ++++++++ .ddev/claude-code/.gitignore | 4 --- .ddev/claude/.gitignore | 5 ++++ .ddev/commands/web/claude | 21 ++++++++++----- .ddev/config.claude-code.yaml | 9 ------- .ddev/config.claude.yaml | 26 +++++++++++++++++++ .ddev/docker-compose.claude.yaml | 12 +++++++++ .ddev/web-build/Dockerfile.claude-code | 3 --- 9 files changed, 69 insertions(+), 34 deletions(-) delete mode 100644 .ddev/addon-metadata/claude-code/manifest.yaml create mode 100644 .ddev/addon-metadata/claude/manifest.yaml delete mode 100644 .ddev/claude-code/.gitignore create mode 100644 .ddev/claude/.gitignore delete mode 100644 .ddev/config.claude-code.yaml create mode 100644 .ddev/config.claude.yaml create mode 100644 .ddev/docker-compose.claude.yaml delete mode 100644 .ddev/web-build/Dockerfile.claude-code diff --git a/.ddev/addon-metadata/claude-code/manifest.yaml b/.ddev/addon-metadata/claude-code/manifest.yaml deleted file mode 100644 index b3d32e8..0000000 --- a/.ddev/addon-metadata/claude-code/manifest.yaml +++ /dev/null @@ -1,12 +0,0 @@ -name: claude-code -repository: /Users/fromme/Development/Misc/ddev-claude-code -version: "" -install_date: "2026-01-07T12:08:23+01:00" -project_files: - - web-build/Dockerfile.claude-code - - commands/web/claude - - config.claude-code.yaml - - claude-code/.claude.json - - claude-code/.gitignore -global_files: [] -removal_actions: [] diff --git a/.ddev/addon-metadata/claude/manifest.yaml b/.ddev/addon-metadata/claude/manifest.yaml new file mode 100644 index 0000000..3ae6f92 --- /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-12T20:01:02+01:00" +project_files: + - commands/web/claude + - config.claude.yaml + - docker-compose.claude.yaml + - claude/.gitignore +global_files: [] +removal_actions: [] diff --git a/.ddev/claude-code/.gitignore b/.ddev/claude-code/.gitignore deleted file mode 100644 index 1aa6766..0000000 --- a/.ddev/claude-code/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -#ddev-generated -# Claude Code internal config -.claude.json -.claude/ diff --git a/.ddev/claude/.gitignore b/.ddev/claude/.gitignore new file mode 100644 index 0000000..cffe851 --- /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 index 828b55e..9516cf8 100755 --- a/.ddev/commands/web/claude +++ b/.ddev/commands/web/claude @@ -1,10 +1,19 @@ -#ddev-generated #!/bin/bash -## Description: Claude Code! -## Usage: claude -## Example: ddev claude [...] +## Description: Run Claude Code +## Usage: claude [args] +## Example: ddev claude +## Example: ddev claude --help +## Example: ddev claude doctor -set -e +# Ensure ~/.local/bin is in PATH +export PATH="$HOME/.local/bin:$PATH" -claude $@ \ No newline at end of file +# 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/config.claude-code.yaml b/.ddev/config.claude-code.yaml deleted file mode 100644 index bde9814..0000000 --- a/.ddev/config.claude-code.yaml +++ /dev/null @@ -1,9 +0,0 @@ -#ddev-generated -hooks: - post-start: - - exec: ">> /var/www/html/.ddev/claude-code/.claude.json && ln -s /var/www/html/.ddev/claude-code/.claude.json ~/.claude.json" - - exec: "mkdir -p /var/www/html/.ddev/claude-code/.claude && ln -s /var/www/html/.ddev/claude-code/.claude ~/.claude" - -webimage_extra_packages: - - xdg-utils - diff --git a/.ddev/config.claude.yaml b/.ddev/config.claude.yaml new file mode 100644 index 0000000..6f33e8f --- /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/docker-compose.claude.yaml b/.ddev/docker-compose.claude.yaml new file mode 100644 index 0000000..be917c0 --- /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/web-build/Dockerfile.claude-code b/.ddev/web-build/Dockerfile.claude-code deleted file mode 100644 index 59d0f38..0000000 --- a/.ddev/web-build/Dockerfile.claude-code +++ /dev/null @@ -1,3 +0,0 @@ -#ddev-generated - -RUN npm install -g @anthropic-ai/claude-code