使用指南

多 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 为准。