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