codex: manage generated skills with home-manager

This commit is contained in:
2026-04-25 16:28:17 -07:00
committed by Ivan Anthony Malison
parent 5907395512
commit 4b97e6c5f1
3 changed files with 77 additions and 1 deletions

View File

@@ -0,0 +1,67 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.myModules.codexGeneratedSkills;
in {
options.myModules.codexGeneratedSkills = {
enable = lib.mkEnableOption "generated Codex skill setup";
codexHome = lib.mkOption {
type = lib.types.str;
default = "${config.home.homeDirectory}/.codex";
description = "Codex home directory.";
};
skillsDir = lib.mkOption {
type = lib.types.str;
default = "${cfg.codexHome}/skills";
description = "Codex skills directory.";
};
primaryRuntimeDir = lib.mkOption {
type = lib.types.str;
default = "${config.home.homeDirectory}/.cache/codex-runtimes/codex-primary-runtime";
description = "Codex primary runtime cache directory.";
};
};
config = lib.mkIf cfg.enable {
home.activation.setupCodexGeneratedSkills = lib.hm.dag.entryAfter ["writeBoundary"] ''
codex_home=${lib.escapeShellArg cfg.codexHome}
skills_dir=${lib.escapeShellArg cfg.skillsDir}
runtime_skills_root=${lib.escapeShellArg "${cfg.primaryRuntimeDir}/skills/skills"}
mkdir -p "$skills_dir"
if [ -x ${lib.escapeShellArg "${pkgs.codex}/bin/codex"} ]; then
if ! CODEX_HOME="$codex_home" ${lib.escapeShellArg "${pkgs.codex}/bin/codex"} debug prompt-input "bootstrap generated Codex skills" >/dev/null; then
echo "setupCodexGeneratedSkills: codex failed to bootstrap .system skills" >&2
fi
else
echo "setupCodexGeneratedSkills: codex binary not found; skipping .system skill bootstrap" >&2
fi
if [ -d "$runtime_skills_root" ]; then
tmp_dir="$(mktemp -d "''${TMPDIR:-/tmp}/codex-primary-runtime.XXXXXX")"
trap 'rm -rf "$tmp_dir"' EXIT
mkdir -p "$tmp_dir/codex-primary-runtime"
for skill_name in slides spreadsheets; do
if [ -d "$runtime_skills_root/$skill_name" ]; then
cp -R "$runtime_skills_root/$skill_name" "$tmp_dir/codex-primary-runtime/$skill_name"
fi
done
if [ "$(find "$tmp_dir/codex-primary-runtime" -mindepth 1 -maxdepth 1 -type d | wc -l | tr -d ' ')" != "0" ]; then
rm -rf "$skills_dir/codex-primary-runtime"
mv "$tmp_dir/codex-primary-runtime" "$skills_dir/codex-primary-runtime"
fi
else
echo "setupCodexGeneratedSkills: runtime skills not found at $runtime_skills_root; skipping codex-primary-runtime" >&2
fi
'';
};
}