ln -sf folgt bestehenden Verzeichnis-Symlinks und legt den neuen Link darin ab statt ihn zu ersetzen. -n behandelt Symlinks auf Verzeichnisse als normale Dateien und überschreibt sie korrekt. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
123 lines
3.5 KiB
Bash
Executable File
123 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
||
set -euo pipefail
|
||
|
||
REPO="/mnt/projekte/claude-workflow"
|
||
|
||
echo "=== Claude-Workflow Bootstrap ==="
|
||
|
||
# Skills (als Verzeichnis-Symlinks: ~/.claude/skills/<name> → repo/skills/<name>/)
|
||
mkdir -p ~/.claude/skills
|
||
for d in "$REPO/skills/"/*/; do
|
||
name=$(basename "$d")
|
||
ln -sfn "$d" ~/.claude/skills/"$name"
|
||
done
|
||
echo "✓ Skills verlinkt"
|
||
|
||
# Agents
|
||
mkdir -p ~/.claude/agents
|
||
for f in "$REPO/agents/"*.md; do
|
||
ln -sf "$f" ~/.claude/agents/
|
||
done
|
||
echo "✓ Agents verlinkt"
|
||
|
||
# Dotfiles
|
||
ln -sf "$REPO/dotfiles/CLAUDE.md" ~/.claude/CLAUDE.md
|
||
ln -sf "$REPO/dotfiles/settings.json" ~/.claude/settings.json
|
||
ln -sf "$REPO/dotfiles/statusline-command.sh" ~/.claude/statusline-command.sh
|
||
ln -sf "$REPO/dotfiles/gitea-mcp-wrapper.sh" ~/.claude/gitea-mcp-wrapper.sh
|
||
chmod +x "$REPO/dotfiles/gitea-mcp-wrapper.sh"
|
||
echo "✓ Dotfiles verlinkt"
|
||
|
||
# Hooks ausführbar machen
|
||
chmod +x "$REPO/hooks/"*.sh
|
||
echo "✓ Hooks ausführbar"
|
||
|
||
echo ""
|
||
echo "=== Voraussetzungen prüfen ==="
|
||
|
||
# --- gh (GitHub CLI, wird auch für Gitea-PRs genutzt) ---
|
||
if command -v gh &>/dev/null; then
|
||
echo "✓ gh $(gh --version | head -1)"
|
||
else
|
||
echo " gh fehlt – installiere via apt..."
|
||
sudo apt-get install -y gh
|
||
echo "✓ gh installiert"
|
||
fi
|
||
|
||
# --- jq ---
|
||
if command -v jq &>/dev/null; then
|
||
echo "✓ jq $(jq --version)"
|
||
else
|
||
echo " jq fehlt – installiere via apt..."
|
||
sudo apt-get install -y jq
|
||
echo "✓ jq installiert"
|
||
fi
|
||
|
||
# --- ruff ---
|
||
if command -v ruff &>/dev/null; then
|
||
echo "✓ ruff $(ruff --version)"
|
||
else
|
||
echo " ruff fehlt – installiere via pipx..."
|
||
if ! command -v pipx &>/dev/null; then
|
||
sudo apt-get install -y pipx
|
||
pipx ensurepath
|
||
fi
|
||
pipx install ruff
|
||
echo "✓ ruff installiert"
|
||
fi
|
||
|
||
# --- gitea-mcp Binary ---
|
||
if [[ -x ~/go/bin/gitea-mcp ]]; then
|
||
echo "✓ gitea-mcp vorhanden"
|
||
else
|
||
echo " gitea-mcp fehlt – installiere via go install..."
|
||
go install gitea.com/gitea/gitea-mcp@latest
|
||
echo "✓ gitea-mcp installiert"
|
||
fi
|
||
|
||
# --- context7 Plugin-Check ---
|
||
if claude mcp list 2>/dev/null | grep -q "context7"; then
|
||
echo "✓ context7 Plugin aktiv"
|
||
else
|
||
echo "⚠ context7 Plugin nicht aktiv – prüfe enabledPlugins in settings.json"
|
||
echo " Ggf. Claude Code neu starten oder Plugin manuell aktivieren."
|
||
fi
|
||
|
||
# --- gitea-mcp in Claude Code registrieren ---
|
||
if claude mcp list 2>/dev/null | grep -q "^gitea:"; then
|
||
echo "✓ gitea MCP bereits registriert"
|
||
else
|
||
echo " Registriere gitea MCP..."
|
||
claude mcp add --scope user gitea -- bash ~/.claude/gitea-mcp-wrapper.sh
|
||
echo "✓ gitea MCP registriert"
|
||
fi
|
||
|
||
# --- secret-tool + Gitea-Token ---
|
||
if ! command -v secret-tool &>/dev/null; then
|
||
echo " secret-tool fehlt – installiere libsecret-tools..."
|
||
sudo apt-get install -y libsecret-tools
|
||
echo "✓ secret-tool installiert"
|
||
else
|
||
echo "✓ secret-tool vorhanden"
|
||
fi
|
||
|
||
echo " Gitea-Token prüfen..."
|
||
if secret-tool lookup user claude-code token gitea &>/dev/null; then
|
||
echo "✓ Gitea-Token vorhanden"
|
||
else
|
||
echo ""
|
||
echo " Gitea-Token für claude-code nicht gefunden."
|
||
read -r -p " Gitea-Token eingeben (https://gitea.troeger-net.org): " GITEA_TOKEN
|
||
if [[ -n "${GITEA_TOKEN// /}" ]]; then
|
||
echo -n "$GITEA_TOKEN" | secret-tool store \
|
||
--label="Gitea claude-code token" \
|
||
user claude-code token gitea
|
||
echo "✓ Gitea-Token gespeichert"
|
||
else
|
||
echo "⚠ Kein Token eingegeben – übersprungen"
|
||
fi
|
||
fi
|
||
|
||
echo ""
|
||
echo "✓ Bootstrap abgeschlossen"
|