在学习如何使用Nix包管理器时遇到的首批Nix表达式之一是default.nix;在精彩的NixOS IRC频道上,我也了解到shell.nix和release.nix的存在。
我得到的印象是--粗略地说- -default.nix将与nix-build一起使用,用于简单地构建包;shell.nix与nix-shell一起用于创建与包的交互环境;release.nix与nixops一起用于部署包。
由于这可能是不完整和部分不正确的,而且由于这似乎没有明确的记录,我想要对这些“标准文件”作出明确和准确的解释;特别是对于每一种文件类型(以及我遗漏的任何其他标准文件),我想知道:
作为一个额外的额外问题,我想知道在将包安装到NixOS模块时,应该使用哪些标准文件?如何做到这一点?
发布于 2017-06-19 02:48:29
正如@danbst所说,只有default.nix和shell.nix对nix工具有特殊的含义,没有真正的标准,每个人都可以自由地使用最适合他们需要的东西。
尽管如此,这并不意味着您不能为单个派生项目设置您自己的规则集,我喜欢以以下方式排列nix文件:
default.nix:使用callpackage导入derivation.nix。derivation.nix:nixpkgs样式派生文件。shell.nix:nix文件.module.nix:NixOS模块文件,导入default.nix。test.nix:NixOS测试文件。release.nix:九头蛇职务设定声明。我们在东京NixOS会议上讨论过这个话题,这里就是这样一个代码组织的例子。
发布于 2017-05-22 17:31:08
首先,default.nix和shell.nix在Nix工具中有着特殊的含义,但release.nix是一个方便的工具。
接下来,default.nix在运行nix-build时被用作默认文件,而shell.nix在运行nix-shell时被用作默认文件。就像你说的。
接下来,default.nix不仅仅用于nix-build。例如,被用作函数的聚合器,并且不包含派生。因此,并不是每个default.nix都应该“构建”(但是如果default.nix是一个派生的属性集,那么它将是可构建的,而nix-build将构建所有这些派生)。
接下来,如果没有找到nix-shell ,则将使用default.nix。
接下来,在导入目录时使用default.nix作为默认文件。因此,如果您编写x = import ./some/directory;,那么./some/directory/default.nix将被导入。这实际上应该解释为什么"nix-build ."使用default.nix。
最后,在default.nix中有两种常见的派生格式:派生格式和callPackage派生格式。你不能nix-build后者。几乎所有nixpkgs中的包都是以这种风格编写的,请参阅hello。但您可以使用nix-build -E 'with import <nixpkgs> { }; callPackage ./path/to/default.nix { }'作为解决方案。nix-shell也支持这个-E参数。
https://stackoverflow.com/questions/44088192
复制相似问题