Назад | Перейти на главную страницу

как выполнить сценарий bash в nixos

Я пытаюсь создать файл .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, который тоже более полезен.

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