用途:在 edmundmiller/dotfiles 仓库中,把 Pi(配置/扩展/技能)的设置转换为该仓库的 Nix 组织方式,或在 Nix 与 Pi 之间互推等效结果。
该仓库职责划分:Pi 的 packages 与 extensions 位于 config/pi/settings.jsonc(渲染为 ~/.pi/agent/settings.json);本地 Pi 扩展位于 config/pi/extensions/*.ts,由 Nix 链接到 ~/.pi/agent/extensions/;技能不再通过 Pi packages[].skills 加载,而由 agent-skills-nix(子 flake skills/)安装。若出现技能冲突,通常意味着两种方式同时启用了技能。
主要映射规则:
- Pi settings.jsonc 的 packages 条目保持 Pi 语法,不做 Nix 重写,Nix 仅确保文件放到 ~/.pi/agent/settings.json。
- 本地扩展文件:代码放在 config/pi/extensions/<name>.ts,并在 modules/shell/pi/default.nix 中通过 home.file 链接,例如 home.file.".pi/agent/extensions/<name>.ts".source = "${configDir}/pi/extensions/<name>.ts";该目录下任何 .ts 必须默认导出工厂函数。
- Pi 技能改用 agent-skills-nix 目录:本地技能添加 config/agents/skills/<skill-name>/SKILL.md,默认启用(skills.enableAll = ["local"]);远程/固定技能在 skills/flake.nix 中用 programs.agent-skills.sources.<src> 与 programs.agent-skills.skills.explicit.<skillId> 指定。为避免嵌套符号链接冲突,需扁平化嵌套 ID(如用 skill-creator 而非 extending-pi/skill-creator)。
转换判断:远程扩展包(git:、npm:、https:)保留在 config/pi/settings.jsonc 的 packages 中;本地扩展建 config/pi/extensions/<name>.ts 并在 default.nix 中添加 home.file 链接;技能按本地或远程分别处理,并确保 settings.jsonc 包条目带 "skills": [] 以避免冲突。Nix→Pi 时,若 Nix 链接扩展文件,则 Pi 侧即存在该扩展;若 Nix 生成 settings.json,则复制对应 JSONC 片段;若用 agent-skills-nix 装技能,则技能位于 ~/.pi/agent/skills/<name>/SKILL.md,不来自 packages[].skills。
模板:新增本地技能放在 config/agents/skills/<name>/SKILL.md,frontmatter 必须与目录名一致;新增本地扩展放在 config/pi/extensions/<name>.ts,需 export default function (pi: ExtensionAPI) { ... },并在 default.nix 的 home.file 中链接。
限制:以上为仓库约定,具体命令、完整配置与版本细节资料暂未提供。