Как выполнить скрипт bash в nixos
Я пытаюсь создать файл.nix, который устанавливает NVM
Сначала я попытался добавить в файл configuration.nix:
system.activationScripts = {
dotfiles = pkgs.lib.stringAfters [ "users" ]
''
curl NVM_URL | bash
''
}
}
Но на это жаловались баш и локон не определены....
Поэтому я попытался создать небольшой пакет.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
В чем дело? Я читаю никс-страницы и бьюсь головой о стену.
1 ответ
Я должен думать not defined
ошибка в том, что ни curl, ни bash не присутствуют в PATH
когда system
деривация построена. Ручная запись для system.activationScripts
говорит:
Набор фрагментов сценария оболочки, которые выполняются при активации конфигурации системы NixOS. Примерами являются обновление /etc, создание учетных записей и так далее. Так как они выполняются каждый раз, когда вы загружаете систему или запускаете nixos-rebuild, важно, чтобы они были идемпотентными и быстрыми.
Поэтому я думаю, что по этой причине вы должны иметь минимальное количество кода в system.activationScripts
тем не мение.
cannot autocall
ошибка предполагает, что написанный вами пакет вызывается без предоставленных аргументов. Обычный способ позаботиться об этом - использовать функцию callPackage в pkgs.lib
задавать. Вы можете найти примеры его использования в nixpkgs.
Я думаю, что вы используете nix не для того, чтобы решить, какая у вас цель. Возможно, стоит посмотреть, сможете ли вы найти существующий config.nix, который использует пакеты узлов, чтобы увидеть, как это делается. Также я заметил, что в nix уже есть поддержка nodePackages, так что, возможно, это поможет вам. В IRC также есть канал nixos, который более полезен.
Надеюсь, это поможет!