nixos 在执行 nixos-rebuild 时,会更新随着指定的的 nixpkgs 版本来更新软件。
虽然我使用了 flake 特性,但是我希望大部分情况下软件都保持最新,只有少数软件版本我需要固定。
具体来说:我有个 nixos 运行着 gitea,我希望我在编译这个系统时,不要更新 gitea 的版本。
sudo nixos-rebuild test --flake '.#gitea'
解决方案:
这里有个查询包版本对应的 nixpkgs commit 的网站:https://lazamar.co.uk/nix-versions/ 并带有 pin 包的提示代码
例如我需要 pin gitea 为 nixos-unstable 的 1.18.5 版
let
pkgs = import (builtins.fetchGit {
# Descriptive name to make the store path easier to identify
name = "my-old-revision";
url = "https://github.com/NixOS/nixpkgs/";
ref = "refs/heads/nixos-unstable";
rev = "64c27498901f104a11df646278c4e5c9f4d642db";
}) {};
myPkg = pkgs.gitea;
in
# 其他代码
# 修改 gitea 服务使用的包为pin的包
services.gitea.package = myPkg