nix复制一个具有覆盖层定义的nixpkgs



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

nix repl中的以下语句为例

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

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

退一步说,也许最好是发货关闭或共享git回购。运输构建的闭包是NixOps所做的,它的优点是所有东西都可以在一个Nix评估过程中定义,但不允许机器用户使用定义机器的表达式。对于推送部署的服务器来说,这是一个很好的折衷方案。类似地,您可以使用nixos-rebuild --target-host或基于nix-copy-closure自定义的东西在没有NixOps的情况下执行远程部署。

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

相关内容

  • 没有找到相关文章

最新更新