如何在 nixos 中执行 bash 脚本

如何在 nixos 中执行 bash 脚本

我正在尝试创建一个安装 nvm 的 .nix 文件

首先我尝试在 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 页,并且用头撞墙。

答案1

我认为错误是因为在构建派生时not definedcurl 和 bash 都不存在。手册条目显示:PATHsystemsystem.activationScripts

激活 NixOS 系统配置时执行的一组 shell 脚本片段。示例包括更新 /etc、创建帐户等。由于每次启动系统或运行 nixos-rebuild 时都会执行这些脚本,因此确保这些脚本具有幂等性和快速性非常重要。

因此我想出于这个原因你无论如何都应该拥有最少的代码system.activationScripts

cannot autocall错误表明您编写的包在调用时没有提供其参数。处理此问题的正常方法是使用集合中的 callPackage 函数pkgs.lib。您可以在 nixpkgs 中找到其使用示例。

我认为你没有以正确的方式使用 nix 来解决你的目标。如果你能找到使用 node 包的现有 config.nix 来了解这是如何实现的,那可能值得一看。我还注意到已经支持nix 中的 nodePackages所以也许这会对你有帮助。IRC 上的 nixos 频道也更有帮助。

希望有帮助!

相关内容