feat(home-manager): place skills for Pi

This commit is contained in:
2026-07-29 08:07:09 -04:00
parent ea8e2c50bc
commit a4b88f8f42
2 changed files with 98 additions and 45 deletions

View File

@@ -87,15 +87,38 @@ let
programs.agents.skills = [ skillAlpha ];
};
# Claude Code disabled, with a skill still selected.
claudeCodeOff = homeFiles {
programs.claude-code.enable = false;
# Pi enabled and Claude Code disabled.
piOnly = homeFiles {
programs.pi-coding-agent.enable = true;
programs.agents.skills = [ skillAlpha ];
};
# An empty selection with Claude Code enabled.
# Both supported harnesses enabled.
bothHarnesses = homeFiles {
programs.claude-code.enable = true;
programs.pi-coding-agent.enable = true;
programs.agents.skills = [ skillAlpha ];
};
# A non-default Pi `configDir`, so the assertions can prove placement follows it
# rather than a hardcoded `.pi/agent`.
customPiConfigDir = homeFiles {
programs.pi-coding-agent.enable = true;
programs.pi-coding-agent.configDir = "/home/operator/.config/pi/agent";
programs.agents.skills = [ skillAlpha ];
};
# No compatible harness enabled, with a skill still selected.
agentsOff = homeFiles {
programs.claude-code.enable = false;
programs.pi-coding-agent.enable = false;
programs.agents.skills = [ skillAlpha ];
};
# An empty selection with both supported harnesses enabled.
emptySelection = homeFiles {
programs.claude-code.enable = true;
programs.pi-coding-agent.enable = true;
programs.agents.skills = [ ];
};
in
@@ -107,7 +130,10 @@ pkgs.runCommandLocal "skills-home-manager-module-check"
attrSetSkills
wholeDirSkills
customConfigDir
claudeCodeOff
piOnly
bothHarnesses
customPiConfigDir
agentsOff
emptySelection
;
}
@@ -142,13 +168,35 @@ pkgs.runCommandLocal "skills-home-manager-module-check"
test ! -e "$customConfigDir/.claude/skills/sample-alpha" \
|| fail "skill was placed under a hardcoded .claude, ignoring configDir"
echo "Claude Code disabled: no skill entry is written despite a selection"
test ! -e "$claudeCodeOff/.claude/skills/sample-alpha" \
|| fail "a skill was placed with claude-code disabled"
echo "Pi enabled: selected skills land in Pi's global skills directory"
test -f "$piOnly/.pi/agent/skills/sample-alpha/SKILL.md" \
|| fail "selected skill did not land under Pi's configDir"
test ! -e "$piOnly/.claude/skills/sample-alpha" \
|| fail "a skill was placed for Claude Code when only Pi was enabled"
echo "both harnesses enabled: selected skills land in both global skills directories"
test -f "$bothHarnesses/.claude/skills/sample-alpha/SKILL.md" \
|| fail "selected skill did not land under Claude Code when both harnesses were enabled"
test -f "$bothHarnesses/.pi/agent/skills/sample-alpha/SKILL.md" \
|| fail "selected skill did not land under Pi when both harnesses were enabled"
echo "custom Pi configDir: placement follows configDir rather than a hardcoded .pi/agent"
test -f "$customPiConfigDir/.config/pi/agent/skills/sample-alpha/SKILL.md" \
|| fail "skill was not placed under Pi's configured configDir"
test ! -e "$customPiConfigDir/.pi/agent/skills/sample-alpha" \
|| fail "skill was placed under a hardcoded .pi/agent, ignoring configDir"
echo "agents disabled: no skill entry is written despite a selection"
test ! -e "$agentsOff/.claude/skills/sample-alpha" \
|| fail "a skill was placed with Claude Code disabled"
test ! -e "$agentsOff/.pi/agent/skills/sample-alpha" \
|| fail "a skill was placed with Pi disabled"
echo "empty selection: nothing is installed"
test ! -e "$emptySelection/.claude/skills/sample-alpha" \
|| fail "an unselected skill was placed"
|| fail "an unselected skill was placed for Claude Code"
test ! -e "$emptySelection/.pi/agent/skills/sample-alpha" \
|| fail "an unselected skill was placed for Pi"
touch "$out"
''