不久前,我有一个 flake.nix 可以工作:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils, }:
flake-utils.lib.eachDefaultSystem (system:
let pkgs = import nixpkgs { inherit system; };
in {
packages = rec {
hello = pkgs.nim2Packages.buildNimPackage {
pname = "hello";
version = "0.1.0";
src = ./hello;
};
default = hello;
};
});
}
运行后
nix flake update
它停止工作并显示此错误消息:
error: attribute 'nimPackages' missing
at /nix/store/rkp543s3nhhichwg03kffd515411mikm-source/test/samples/greeter/flake.nix:12:19:
11| packages = rec {
12| hello = pkgs.nimPackages.buildNimPackage {
| ^
13| pname = "hello";
Did you mean elmPackages?
我该如何修复它?
我做了一个 git bisect 并追踪到 this nixpkgs PR
有两个更改,第一个只是重命名/重组:
pkgs.nim2Packages.buildNimPackage
-> pkgs.buildNimPackage
另一个要求我生成一个锁定文件:
❯ nix-shell -p nim_lk
$ nim_lk ./hello > ./hello/lock.json
$ exit
❯ git add ./hello/lock.json
然后我需要在调用中引用锁定文件
buildNimPackage
。这是更改后的flake.nix
:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils, }:
flake-utils.lib.eachDefaultSystem (system:
let pkgs = import nixpkgs { inherit system; };
in {
packages = rec {
hello = pkgs.buildNimPackage {
pname = "hello";
version = "0.1.0";
src = ./hello;
lockFile = ./hello/lock.json;
};
default = hello;
};
});
}