使用指南
多 Source 与补丁
用一个 Version 锁定多个具名来源,并给各来源配置独立的补丁和 Package。
一个 Pin 拥有一个 Checker 和一个 Version,但可以声明多个 Source。Source 的名字由配置作者决定,每个 Source 有自己的 Fetcher、源码 Hash 和 Package。
{ pin }: {
patchelf = pin.mk {
checker = pin.checker.github { target = "NixOS/patchelf"; };
sources = {
archive = {
fetcher = pin.fetcher.github { target = "NixOS/patchelf"; };
};
checkout = {
fetcher = pin.fetcher.git {
target = "https://github.com/NixOS/patchelf.git";
};
};
};
};
}
Reader 路径分别为 pins.patchelf.sources.archive.src 和 pins.patchelf.sources.checkout.src。这两个 Source 共享同一个 release Version;任意一个失败都使整个 Pin 保留旧结果。
每个 Source 的补丁
Source 可配置 patches 和 postPatch。单 Source 简写也可以直接在 pin.mk 或便捷构造器上配置这些字段:
{ pin }: {
patchelf = pin.github {
target = "NixOS/patchelf";
postPatch = ''
test -f README.md
'';
};
}
源码 hash 针对原始 Fetcher 内容。补丁后的 src 供 Package 和传入配置的 Reader 使用;如果希望 Reader 应用这些补丁,必须同时传入 config,见 Reader。补丁和 postPatch 来自受信任的 Nix 配置。
配置 sources 时,完整声明放在各 Source 中;不要同时依赖顶层单 Source 简写。工具以显式 sources 为准。