Я пытаюсь создать файл .nix, который устанавливает nvm
Сначала я попытался добавить внутрь configuration.nix:
system.activationScripts = {
dotfiles = pkgs.lib.stringAfters [ "users" ]
''
curl NVM_URL | bash
''
}
}
Но он жаловался, что bash и curl не определены ....
Итак, я попытался создать небольшой пакет .nix,
{ stdenv, fileurl };
stdenv.mkDerivation {
name="nvm-0.33.0"
builder = ./install.sh;
fileurl{
url: NVM_GIT_MASTER.zip;
};
}
Но затем он жалуется, что `не может автоматически вызвать функцию, у которой есть аргумент без значения по умолчанию {'stdenv'}
После запуска nix-build --dry-run ./text,nix
В чем дело? Я читаю nix страниц и бьюсь головой об стену.
Я должен думать not defined
ошибка связана с тем, что ни curl, ни bash отсутствуют в PATH
когда system
вывод построен. Ручной ввод для system.activationScripts
говорит:
Набор фрагментов сценария оболочки, которые выполняются при активации конфигурации системы NixOS. Примеры: обновление / и т. Д., Создание учетных записей и т. Д. Поскольку они выполняются каждый раз, когда вы загружаете систему или запускаете nixos-rebuild, важно, чтобы они были идемпотентными и быстрыми.
Думаю, по этой причине у вас должно быть минимальное количество кода в system.activationScripts
тем не мение.
В cannot autocall
ошибка предполагает, что написанный вами пакет вызывается без аргументов. Обычный способ позаботиться об этом - использовать функцию callPackage в pkgs.lib
устанавливать. Вы можете найти примеры его использования в nixpkgs.
Я думаю, что вы используете nix неправильно, чтобы решить вашу задачу. Возможно, стоит посмотреть, сможете ли вы найти существующий config.nix, который использует пакеты узлов, чтобы увидеть, как это делается. Также я заметил, что уже есть поддержка nodePackages в nix так что, возможно, это может вам помочь. Также есть канал nixos в IRC, который тоже более полезен.
Надеюсь, это поможет!