学习如何使用Nix包管理器时遇到的第一类Nix表达式之一是default.nix; 上精彩NixOS IRC频道我学到的存在shell.nix,并release.nix为好.
我得到的印象是-大概- default.nix是用来用nix-build的只是建立包,shell.nix与用于nix-shell制造与封装的交互环境和release.nix使用与nixops部署包.
由于这可能是不完整和部分不正确的,并且由于这似乎没有明确记录,我想要清楚准确地解释这些"标准文件"; 特别是,对于每种文件类型(以及我缺少的任何其他标准文件),我想知道:
作为一个额外的奖励问题,我想知道在将软件包安装到NixOS模块时应该使用哪些标准文件(如果有的话)?怎么办?
dan*_*bst 32
首先,default.nix与shell.nix在尼克斯的工具特殊的含义,但是release.nix是一个方便的一个.
接下来,default.nix在运行时用作默认文件nix-build,并在运行时shell.nix用作默认文件nix-shell.就像你说的那样.
接下来,default.nix不仅用于nix-build.例如,<nixpkgs/lib/default.nix>用作函数的聚合器,不包含派生.因此,不是每个default.nix都应该被"构建"(但如果default.nix是一个派生的属性集,它将是可构建的,nix-build并将构建所有这些).
接下来,如果找不到,nix-shell 将使用.default.nixshell.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论点.
Eri*_*ric 29
正如@danbst所说,default.nix并且shell.nix对于nix工具具有特殊意义,因此没有真正的标准,每个人都可以自由地使用最符合他们需求的东西.
也就是说,这并不意味着您无法设置自己的规则集,个人对于单个派生项目我喜欢以下列方式排列nix文件:
default.nix:callpackage用于导入derivation.nix.derivation.nix:nixpkgs样式派生文件.shell.nix:nix-shell文件.module.nix:NixOS模块文件,导入default.nix.test.nix:NixOS测试文件.release.nix:Hydra jobset声明.我们在东京NixOS聚会上谈到了这个话题,可以在这里找到这样一个代码组织的例子.
| 归档时间: |
|
| 查看次数: |
5742 次 |
| 最近记录: |