feat: add separate skill lists per target (claudeCodeSkills, openCodeSkills)

This commit is contained in:
dan 2025-11-30 15:16:30 -08:00
parent ec5386cf57
commit 35a357eb9d

View file

@ -4,15 +4,9 @@ with lib;
let
cfg = config.services.ai-skills;
in {
options.services.ai-skills = {
enable = mkEnableOption "AI agent skills for Claude Code and OpenCode";
skills = mkOption {
type = types.listOf types.str;
default = [];
description = ''
List of skills to deploy. Available skills:
skillsList = ''
Available skills:
- niri-window-capture: Invisibly capture window screenshots
- screenshot-latest: Find latest screenshots
- tufte-press: Generate study card JSON
@ -22,8 +16,9 @@ in {
- web-search: Search the web via Claude
- web-research: Deep web research with multiple backends
'';
example = [ "worklog" "web-search" ];
};
in {
options.services.ai-skills = {
enable = mkEnableOption "AI agent skills for Claude Code and OpenCode";
skillsPath = mkOption {
type = types.path;
@ -31,24 +26,26 @@ in {
description = "Path to skills repository (e.g., ~/proj/skills/skills)";
};
enableClaudeCode = mkOption {
type = types.bool;
default = true;
description = "Deploy skills to Claude Code (~/.claude/skills/)";
# Per-target skill lists
claudeCodeSkills = mkOption {
type = types.listOf types.str;
default = [];
description = "Skills to deploy to Claude Code (~/.claude/skills/). ${skillsList}";
example = [ "worklog" "niri-window-capture" ];
};
enableOpenCode = mkOption {
type = types.bool;
default = true;
description = "Deploy skills to OpenCode (~/.config/opencode/skills/)";
openCodeSkills = mkOption {
type = types.listOf types.str;
default = [];
description = "Skills to deploy to OpenCode (~/.config/opencode/skills/). ${skillsList}";
example = [ "worklog" "web-search" ];
};
};
config = mkIf cfg.enable {
# Deploy skills to Claude Code
home.file = mkMerge [
# Claude Code skills
(mkIf cfg.enableClaudeCode (
(mkIf (cfg.claudeCodeSkills != []) (
builtins.listToAttrs (
map (skillName: {
name = ".claude/skills/${skillName}";
@ -56,12 +53,12 @@ in {
source = "${cfg.skillsPath}/${skillName}";
recursive = true;
};
}) cfg.skills
}) cfg.claudeCodeSkills
)
))
# OpenCode skills
(mkIf cfg.enableOpenCode (
(mkIf (cfg.openCodeSkills != []) (
builtins.listToAttrs (
map (skillName: {
name = ".config/opencode/skills/${skillName}";
@ -69,7 +66,7 @@ in {
source = "${cfg.skillsPath}/${skillName}";
recursive = true;
};
}) cfg.skills
}) cfg.openCodeSkills
)
))
];