首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时以及如何使用default.nix、shell.nix和release.nix?

何时以及如何使用default.nix、shell.nix和release.nix?
EN

Stack Overflow用户
提问于 2017-05-20 16:18:01
回答 2查看 20.4K关注 0票数 76

在学习如何使用Nix包管理器时遇到的首批Nix表达式之一是default.nix;在精彩的NixOS IRC频道上,我也了解到shell.nixrelease.nix的存在。

我得到的印象是--粗略地说- -default.nix将与nix-build一起使用,用于简单地构建包;shell.nixnix-shell一起用于创建与包的交互环境;release.nixnixops一起用于部署包。

由于这可能是不完整和部分不正确的,而且由于这似乎没有明确的记录,我想要对这些“标准文件”作出明确和准确的解释;特别是对于每一种文件类型(以及我遗漏的任何其他标准文件),我想知道:

  1. 这类文件的典型用例是什么?它们不应该被用来做什么?
  2. 这种文件类型通常是如何构造的?它的最低要求是什么?
  3. 您能否在其使用上下文中展示这样一个文件的范例示例,即使用指令,并包括在shell或另一个Nix表达式中使用它所需的代码行?

作为一个额外的额外问题,我想知道在将包安装到NixOS模块时,应该使用哪些标准文件?如何做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-19 02:48:29

正如@danbst所说,只有default.nixshell.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会议上讨论过这个话题,这里就是这样一个代码组织的例子。

票数 55
EN

Stack Overflow用户

发布于 2017-05-22 17:31:08

首先,default.nixshell.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参数。

票数 66
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44088192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档