使用指南

组合 Checker 与 Fetcher

从包注册表、Git 或自定义命令选择版本,再独立选择下载方式。

Checker 回答「锁定哪个 Version」,Fetcher 回答「如何获取这个 Version 的内容」。二者不必来自同一个平台。

从 crates.io 获取版本

{ pin }: {
  ripgrep = pin.mk {
    checker = pin.checker.crate { target = "ripgrep"; };
    fetcher = pin.fetcher.zip {
      url = version: "https://github.com/BurntSushi/ripgrep/archive/refs/tags/${version}.tar.gz";
    };
  };
}

这个例子从 crates.io 读取版本,但从 GitHub 的压缩包获取源码。实际使用前应确认注册表版本和仓库 tag 的命名一致。Fetcher 的版本映射不改变 Pins File 中保存的原始 Version。

跟踪 Git 分支

{ pin }: {
  project = pin.git {
    target = "https://github.com/NixOS/patchelf.git";
    mode = "branch";
    branch = "master";
  };
}

Git 的 head、branch 和 ref 模式返回提交号;tag 模式返回原始 tag。即使分支继续前进,下游仍使用 Pins File 中锁定的提交。

从 npm 获取版本

{ pin }: {
  vite = pin.mk {
    checker = pin.checker.npm { target = "vite"; distTag = "latest"; };
    fetcher = pin.fetcher.url {
      url = version: "https://registry.npmjs.org/vite/-/vite-${version}.tgz";
    };
  };
}

url 保留下载文件,zip 解压支持的归档。选择哪种取决于下游需要文件本身还是源码目录。

所有内置选项分别见 Checker和 Fetcher。