From 4e6123de9a7f550b5a4ecf94fe350e317d7784f9 Mon Sep 17 00:00:00 2001 From: John Ogle Date: Thu, 8 Jan 2026 19:28:17 -0800 Subject: [PATCH] Simplify beads integration to use bd setup claude Replace complex marketplace plugin installation with simple 'bd setup claude' which installs hooks into ~/.claude/settings.json. This is the recommended approach for Claude Code (CLI + hooks) vs the MCP server approach. --- home/roles/development/default.nix | 51 ++++-------------------------- 1 file changed, 7 insertions(+), 44 deletions(-) diff --git a/home/roles/development/default.nix b/home/roles/development/default.nix index db1e7fa..6af4239 100644 --- a/home/roles/development/default.nix +++ b/home/roles/development/default.nix @@ -15,8 +15,6 @@ let ref = "main"; }; - # Beads repository is available via globalInputs.beads from the flake - beadsRepo = globalInputs.beads; in { options.home.roles.development = { @@ -93,49 +91,14 @@ in }" ''; - # Install beads Claude plugin as a marketplace - home.activation.claudeCodeBeadsPlugin = lib.hm.dag.entryAfter ["writeBoundary" "claudeCodeCommands"] '' - # Create plugin directories - mkdir -p ~/.claude/plugins/marketplaces - mkdir -p ~/.claude/plugins/repos + # Set up beads Claude Code integration (hooks for SessionStart/PreCompact) + # This uses the CLI + hooks approach which is recommended over MCP for Claude Code + home.activation.claudeCodeBeadsSetup = lib.hm.dag.entryAfter ["writeBoundary" "claudeCodeCommands"] '' + # Run bd setup claude to install hooks into ~/.claude/settings.json + # This is idempotent - safe to run multiple times + ${globalInputs.beads.packages.${system}.default}/bin/bd setup claude 2>/dev/null || true - # Remove old beads marketplace if it exists (to ensure clean update) - rm -rf ~/.claude/plugins/marketplaces/beads-marketplace - - # Copy beads repository to marketplaces directory - # Using cp -r because the source is a Nix store path (read-only) - cp -r ${beadsRepo} ~/.claude/plugins/marketplaces/beads-marketplace - chmod -R u+w ~/.claude/plugins/marketplaces/beads-marketplace - - # Update known_marketplaces.json to include beads-marketplace - KNOWN_MARKETPLACES="$HOME/.claude/plugins/known_marketplaces.json" - if [ ! -f "$KNOWN_MARKETPLACES" ]; then - echo '{}' > "$KNOWN_MARKETPLACES" - fi - - # Add beads-marketplace entry using jq (merge with existing) - ${pkgs.jq}/bin/jq --arg installPath "$HOME/.claude/plugins/marketplaces/beads-marketplace" \ - '. + {"beads-marketplace": { - "source": {"source": "github", "repo": "steveyegge/beads"}, - "installLocation": $installPath, - "lastUpdated": (now | strftime("%Y-%m-%dT%H:%M:%S.000Z")) - }}' "$KNOWN_MARKETPLACES" > "$KNOWN_MARKETPLACES.tmp" && mv "$KNOWN_MARKETPLACES.tmp" "$KNOWN_MARKETPLACES" - - # Update config.json to install the beads plugin - CONFIG_JSON="$HOME/.claude/plugins/config.json" - if [ ! -f "$CONFIG_JSON" ]; then - echo '{"repositories": {}}' > "$CONFIG_JSON" - fi - - # Add beads to installed repositories - ${pkgs.jq}/bin/jq --arg installPath "$HOME/.claude/plugins/marketplaces/beads-marketplace" \ - '.repositories["beads-marketplace/beads"] = { - "source": {"source": "marketplace", "marketplace": "beads-marketplace", "plugin": "beads"}, - "installLocation": $installPath, - "installedAt": (now | strftime("%Y-%m-%dT%H:%M:%S.000Z")) - }' "$CONFIG_JSON" > "$CONFIG_JSON.tmp" && mv "$CONFIG_JSON.tmp" "$CONFIG_JSON" - - $DRY_RUN_CMD echo "Claude Code beads plugin installed successfully" + $DRY_RUN_CMD echo "Claude Code beads integration configured (hooks installed)" ''; # Note: modules must be imported at top-level home config