参考文档
Pin 声明
pin.mk、pin.github、pin.git 与 Pin/Source/Package 的关系。
声明文件是 Nix 函数,返回以 Pin 名为键的属性集。可请求 pin、pkgs 和 lib 参数;仅声明需要的参数即可:
{ pin }: {
patchelf = pin.github "NixOS/patchelf";
}
数据层次
- Pin:一个 Checker、一个 Version 和若干 Source;是选择与更新的原子单元。
- Source:一个 Fetcher、一个源码 Hash,以及该来源的补丁和 Package。
- Package:一个 Builder 和对应的依赖产物、Derived Hash。
pin.mk
用于独立组合 Checker、Fetcher 和 Package。单 Source 可直接提供顶层 fetcher,它会被命名为 default:
{ pin }: {
demo = pin.mk {
checker = pin.checker.cmd "printf '0.18.0'";
fetcher = pin.fetcher.github {
target = "NixOS/patchelf";
};
};
}
| 字段 | 含义 |
|---|---|
checker | 必需,来自 pin.checker.* |
sources | 可选,非空的具名 Source 属性集 |
fetcher | 未提供 sources 时必需,属于单 Source 简写 |
patches | 单 Source 的补丁列表,默认 [] |
postPatch | 单 Source 的补丁脚本,默认空字符串 |
packages | 单 Source 的具名 Package 属性集,默认 {} |
多 Source 时,fetcher、patches、postPatch 和 packages 放入各 Source,见多 Source。
pin.github
接受 "owner/repo" 字符串或结构化参数,组合 GitHub release Checker 与 GitHub Fetcher,只生成 default Source。
{ pin }: {
patchelf = pin.github {
target = "NixOS/patchelf";
rev = version: version;
};
}
目标可使用 target,也可用 owner 与 repo;两种方式不能混用。其他字段为 rev、fetcherArgs、patches、postPatch 和 packages。
pin.git
接受仓库 URL 字符串或结构化参数,组合 Git Checker 与 Git Fetcher,只生成 default Source。默认追踪 Git HEAD:
{ pin }: {
patchelf = pin.git "https://github.com/NixOS/patchelf.git";
}
结构化参数必须使用 target。还可配置 Checker 的 mode、branch、ref、include、exclude、sort,以及 Fetcher 的 rev、fetcherArgs 和 Source 的 patches、postPatch、packages。
复杂组合使用 pin.mk。声明的未知字段、Fetcher 映射错误和确定性的配置错误会在运行 Checker 前报告。