Я написал очень простой файл default.nix, с помощью которого я смог бы собрать пакет gnu hello (аналогично nix-pills).
Но теперь я столкнулся с ошибкой:
[jane@nixos: ~ / graphviz] $ nix-build -A привет
ошибка: неопределенная переменная 'pkgs' в /home/jane/graphviz/default.nix:3: 47
это исходный код:
[jane@nixos:~/graphviz]$ cat default.nix
{
pkgs = import <nixpkgs> {};
mkDerivation = import ./autotools.nix pkgs;
hello = import ./hello.nix { inherit mkDerivation ;};
}
, который не имеет абсолютно никакого смысла (для меня), как правая строка выше, я определил pkgs.
Как я не мог понять, что не так, я открыл nix repl и ввел строки.
nix-repl> pkgs = import <nixpkgs> {}
nix-repl> mkDerivation = import ./autotools.nix pkgs
nix-repl> hello = import ./hello.nix { inherit mkDerivation ;}
nix-repl> hello
«derivation /nix/store/g2y6sf5q236icvv2gwyg0lnij3mkr36j-hellooo.drv»
И вуаля, там все работает. Так что я не понимаю, почему это не удается с default.nix. Я мог только предположить, что default.nix является чем-то особенным, но с синтаксисом все должно быть хорошо, иначе nix repl также не будет работать.
Может кто-нибудь объяснить, почему я получаю эту неопределенную переменную ошибку?
Редактировать: Сразу после задания вопроса я нашел один способ решения ошибки неопределенной переменной, если я поставлю это так:
let pkgs = import <nixpkgs> {}; mkDerivation = import ./autotools.nix pkgs;
in
{
hello = import ./hello.nix { inherit mkDerivation ;};
}
это работает.
Но мой оригинальный вопрос все еще остается.