首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nix复制具有覆盖定义的nixpkgs

nix复制具有覆盖定义的nixpkgs
EN

Stack Overflow用户
提问于 2021-07-02 00:49:02
回答 1查看 46关注 0票数 1

有没有一种方法可以用一种与nix copy兼容的方式恢复由覆盖的nixpkgs创建的包集

nix repl中的以下语句为例

代码语言:javascript
复制
overlays = [(self: super: {aardvark = "does aardvark";})]
pkgs = import <nixpkgs> { inherit overlays; }
pkgs2 = import pkgs.path {}
pkgs3 = import pkgs.path { inherit (pkgs) overlays; }

pkgs.aardvark存在并被覆盖放在那里,但是如果我尝试重新导入生成的pkgs路径,我只导入<nixpkgs>的商店版本。

pkgs3.aardvark也存在,但这不是我想要的解决方案。

我的目标用途是使用覆盖图执行pkgsnix copy。我可以复制pkgs.path定义,但不能复制覆盖,因为它是lambda的列表,而不是路径。我希望有一个非常简单的解决方案,比如有一个像pkgs.drvpkgs.out这样的属性,可以用import pkgs.out导入并提供覆盖的包集,而不是pkgs.path

EN

回答 1

Stack Overflow用户

发布于 2021-07-02 03:24:23

覆盖仅存在于Nix语言级别。它们只是函数属性集的一种模式。Nix语言的实现不提供序列化任意表达式和复制这些表达式的操作。因此,如果你想复制Nix表达式,你必须自己在文件级来做。

退一步说,要么发布构建的闭包,要么共享git repo,这可能会更好。发布构建的闭包是NixOps所做的,它的优点是所有东西都可以在一个Nix求值过程中定义,但是不允许机器的用户使用定义机器的表达式。对于推送部署的服务器来说,这是一个很好的折衷方案。类似地,您可以在没有NixOps的情况下使用nixos-rebuild --target-host或其他基于nix-copy-closure的定制工具执行远程部署。

另一方面,如果你想从远程机器启动安装,你需要有表达式,而git repo可能是实现这一目标的最实用的方法。

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

https://stackoverflow.com/questions/68214083

复制
相关文章

相似问题

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