Open
Conversation
Addresses shell injection risk by using lib.escapeShellArg for all Nix-to-bash interpolations and jq --arg for filter parameters. Replaces install/update branching with always-install since the CLI is idempotent, fixing scope mismatch errors when project-scoped plugins exist. Adds missing entryAfter dependency on the claude activation step. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Introduces programs.claude.plugins as a custom home-manager option so language modules can declare their Claude Code plugins alongside their other tooling. The NixOS module system merges lists from all modules automatically. Marketplaces stay centralized in the AI module since attrsOf str does not merge duplicate keys. Consolidates the duplicate programs blocks and removes the now-inlined config/plugins.nix. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Demonstrates cross-module plugin contribution by declaring the Go LSP plugin alongside Go's other tooling in the Go module. Retains the remaining language-specific LSP plugins (pyright, swift, typescript) as AI module defaults until their respective modules adopt the pattern. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TL;DR
Introduces a custom
programs.claude.pluginshome-manager option so any module can declare its Claude Code plugins, and hardens the activation script along the way.Details
Defines
programs.claude.pluginsas alistOf stroption in the AI module with base plugins as defaults. Leverages the NixOS module system's automatic list merging — the same mechanism behindhome.packagesandprograms.neovim.plugins— so language modules contribute plugins alongside their other tooling.Hardens the activation script with
lib.escapeShellArgfor all Nix-to-bash interpolations andjq --argfor filter parameters. Replaces the fragile install/update branching with always-install since the CLI is idempotent, fixing scope mismatch errors when project-scoped plugins exist (e.g.strategy@shortrib-labsfailing update because it was installed at project scope). Adds the missingentryAfterdependency on theclaudeactivation step.Keeps marketplaces centralized in the AI module because
attrsOf strdoes not merge duplicate keys, even with identical values.Moves
gopls-lspto the Go module andcompound-engineeringto the development module as proof of concept. Remaining language-specific LSP plugins stay as AI module defaults until their modules adopt the pattern.🤖 Generated with Claude Code