Fetcher
Fetcher 使用 Checker 已选出的 Version,得到内容和源码 Hash。Version 在 Pins File 中保持原样;rev 或 url 映射只改变获取参数。
通用规则
rev、url映射必须是从 Version 到字符串的 Nix 函数。target与对应旧字段不能混用。fetcherArgs是传给 Nixpkgs Fetcher 的额外属性集;不能覆盖工具管理的目标、版本映射和哈希字段。- 不手写
hash。它由update计算并由 Reader 注入。
GitHub:pin.fetcher.github
目标为 target = "owner/repo",或 owner 与 repo。rev 默认 version: version;底层使用 pkgs.fetchFromGitHub。
{ pin }: {
example = pin.mk {
checker = pin.checker.cmd "printf '0.18.0'";
fetcher = pin.fetcher.github {
target = "NixOS/patchelf";
rev = version: version;
};
};
}
fetcherArgs 不得覆盖 owner、repo、rev、hash。如果版本不带 v,而上游 tag 使用 v,可以设置 rev = version: "v${version}";先确认上游命名规则。
Git:pin.fetcher.git
目标为 target 或 url,rev 默认直接使用 Version。底层使用 pkgs.fetchgit,可通过 fetcherArgs 配置 fetchSubmodules 等参数。
{ pin }: {
example = pin.mk {
checker = pin.checker.git { target = "https://github.com/NixOS/patchelf.git"; };
fetcher = pin.fetcher.git {
target = "https://github.com/NixOS/patchelf.git";
fetcherArgs.fetchSubmodules = true;
};
};
}
保留字段为 url、rev、hash。
Hugging Face:pin.fetcher.huggingface
目标为 target 或 repoId,值为仓库标识。rev 默认直接使用 Version;底层使用 pkgs.fetchFromHuggingFace,默认 backend 为 lfs。所用 Nixpkgs 必须提供该 Fetcher。
{ pin }: {
model = pin.mk {
checker = pin.checker.git {
target = "https://huggingface.co/bert-base-uncased";
};
fetcher = pin.fetcher.huggingface { target = "bert-base-uncased"; };
};
}
仓库内容可能包含大模型权重;实际下载前确认容量和访问要求。保留字段为 repoId、rev、tag、hash。
文件:pin.fetcher.url
必需 url = version: "...",底层使用 pkgs.fetchurl。target 是同一字段的别名,也必须提供映射函数。下载内容按文件保存,不解压。
{ pin }: {
example = pin.mk {
checker = pin.checker.cmd "printf '0.18.0'";
fetcher = pin.fetcher.url {
url = version: "https://github.com/NixOS/patchelf/archive/refs/tags/${version}.tar.gz";
};
};
}
归档:pin.fetcher.zip
字段与 url 相同,底层使用 pkgs.fetchzip。名称为 zip,也可解压 Nixpkgs 支持的 tar 等归档,并计算解压结果的哈希。
{ pin }: {
example = pin.mk {
checker = pin.checker.cmd "printf '0.18.0'";
fetcher = pin.fetcher.zip {
url = version: "https://github.com/NixOS/patchelf/archive/refs/tags/${version}.tar.gz";
fetcherArgs.stripRoot = true;
};
};
}
url 与 zip 的保留字段均为 url、hash。从文件 Fetcher 改为归档 Fetcher 会改变哈希对应的内容,需重新执行 update。