{ 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."; }; plugins = lib.mkOption { type = lib.types.listOf lib.types.path; default = [ ]; description = "Plugin directories, loaded with --plugin-dir. Nothing is installed into the account."; }; }; 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}" ] ++ lib.concatMap (p: [ "--plugin-dir" "${p}" ]) cfg.plugins; }; }