Как выполнить скрипт 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, который более полезен.

Надеюсь, это поможет!

Другие вопросы по тегам