{
config,
lib,
pkgs,
...
}:
let
cfg = config.claude;
settingsFile = (pkgs.formats.json { }).generate "claude-settings.json" cfg.settings;
in
{
options.claude = {
enable = lib.mkEnableOption "Claude Code";
package = lib.mkOption {
type = lib.types.package;
description = "The Claude Code package; must provide bin/claude.";
};
settings = lib.mkOption {
type = (pkgs.formats.json { }).type;
default = { };
description = "Settings layered over the account's settings.json via --settings.";
};
};
config.build.agents.claude = lib.mkIf cfg.enable {
exe = lib.getExe' cfg.package "claude";
stateEnvVar = "CLAUDE_CONFIG_DIR";
instructionsFile = "CLAUDE.md";
# Managed links: path relative to the state dir -> store path.
files = { };
flags = lib.optionals (cfg.settings != { }) [
"--settings"
"${settingsFile}"
];
};
}