programs.claude-code.plugins
Home-Manager option
Plugins to use when running Claude Code. The attribute name becomes the plugin directory name, and the value is either: - A path to the plugin directory - The plugin package, whether a nix package or the output of a fetcher With Claude Code 2.1.157 or later, each plugin is symlinked into the skills/ subdirectory of programs.claude-code.configDir and loaded as a personal plugin, exposing its skills, agents, commands, hooks, and MCP servers. Versions 2.1.76 through 2.1.156 fall back to a legacy --plugin-dir wrapper, as do packages without detectable version metadata. Strict-parser subcommands such as claude rc may reject arguments from that compatibility path. A plugin that lives in a subdirectory of a larger repository can be referenced through a store path, in which case only that subdirectory is linked and the surrounding repository is left out. A plain list of plugins is still accepted but deprecated, since the directory name is then derived from each entry's base name and store paths produce unstable names such as bxa1s0m3h4sh-source.
type: (attribute set of (package or absolute path)) or list of (package or absolute path){ }{ my-local-plugin = ./my-local-plugin; claude-plugin = fetchFromGitHub { owner = "some-github-org"; repo = "claude-plugin"; rev = "779a68ebc2a75e4a184d2c87e5a43a758e6458a1"; sha256 = "228fdd7e5908ea1d2f65218ecd9c71e1eefa0834d200d55fbb8bf8b5563acec0"; }; # A plugin can also be a subdirectory within a package source # (store path). nested-plugin = "${pkgs.some-package.src}/claude-plugin"; }