harness: declarative claude plugin marketplaces

new `hyperhive.claudeMarketplaces` option (list of strings — URL,
path, or github:owner/repo). harness boot adds each via
`claude plugin marketplace add` before updating + installing the
configured plugins, so specs like `foo@some-marketplace` resolve
on a fresh container. idempotent: 'already exists' stderr is
treated as success.
This commit is contained in:
müde 2026-05-17 01:36:18 +02:00
parent 608de57924
commit 597351ca4e
2 changed files with 66 additions and 0 deletions

View file

@ -96,6 +96,21 @@
'';
};
options.hyperhive.claudeMarketplaces = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
example = [ "github:anthropics/claude-plugins-official" ];
description = ''
Claude Code plugin marketplaces to add at harness boot. Each
entry is passed to `claude plugin marketplace add <source>`
(URL, path, or `github:owner/repo`). Idempotent re-adding an
existing marketplace is treated as success. Required before
`hyperhive.claudePlugins` entries that reference a marketplace
(e.g. `foo@some-marketplace`). Rendered to
`/etc/hyperhive/claude-marketplaces.json`.
'';
};
options.hyperhive.claudePlugins = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
@ -122,6 +137,9 @@
environment.etc."hyperhive/claude-plugins.json".text =
builtins.toJSON config.hyperhive.claudePlugins;
environment.etc."hyperhive/claude-marketplaces.json".text =
builtins.toJSON config.hyperhive.claudeMarketplaces;
boot.isNspawnContainer = true;
# `claude-code` is unfree. Each per-agent container's nixosConfiguration