我正在尝试创建一个安装 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 defined
curl 和 bash 都不存在。手册条目显示:PATH
system
system.activationScripts
激活 NixOS 系统配置时执行的一组 shell 脚本片段。示例包括更新 /etc、创建帐户等。由于每次启动系统或运行 nixos-rebuild 时都会执行这些脚本,因此确保这些脚本具有幂等性和快速性非常重要。
因此我想出于这个原因你无论如何都应该拥有最少的代码system.activationScripts
。
该cannot autocall
错误表明您编写的包在调用时没有提供其参数。处理此问题的正常方法是使用集合中的 callPackage 函数pkgs.lib
。您可以在 nixpkgs 中找到其使用示例。
我认为你没有以正确的方式使用 nix 来解决你的目标。如果你能找到使用 node 包的现有 config.nix 来了解这是如何实现的,那可能值得一看。我还注意到已经支持nix 中的 nodePackages所以也许这会对你有帮助。IRC 上的 nixos 频道也更有帮助。
希望有帮助!