gpt4 book ai didi

nix - 是否可以在不运行 NixOS 的机器之间保持我的 Nix 软件包同步?

转载 作者:行者123 更新时间:2023-12-02 06:53:04 24 4
gpt4 key购买 nike

我知道使用 NixOS,您可以简单地复制 configuration.nix文件同步您的操作系统状态,包括机器之间安装的软件包。

那么,是否有可能在非 NixOS 操作系统上使用 Nix 包管理器来仅同步已安装的包?

最佳答案

请注意,至少从 30.03.2017(对应于 17.03 Nix/NixOS channel /版本)开始,据我所知,官方、现代、支持和建议的解决方案是使用所谓的覆盖。

the chapter titled "Overlays"在 nixpkgs 手册中 有关如何使用新方法的很好的指南。

作为一个简短的总结:您可以在 $HOME/.config/nixpkgs/overlays/ 中放置任意数量的扩展名为 .nix 的文件。目录。它们将按字母顺序处理,并且每个都可以修改一组可用的 Nix 包。每个文件都必须按照以下模式编写:

self: super:
{
boost = super.boost.override {
python = self.python3;
};
rr = super.callPackage ./pkgs/rr {
stdenv = self.stdenv_32bit;
};
}
  • super set 对应于“旧”包集(在应用覆盖层之前)。如果你想引用旧版本的包(如上面的 boost),或者 callPackage ,您应该通过 super 引用它.
  • self set 对应于最终的“ future ”包集,代表应用所有叠加层后的最终结果。 (注意:不要害怕有时使用它们可能会被 Nix 拒绝,因为这会导致无限递归。可能你应该在这些情况下使用 super 代替。)

  • 注意:通过上述更改,我在下面的原始答案中提到的解决方案现在似乎“已弃用”——我相信它应该在 2017 年 4 月仍然有效,但我不知道持续多长时间。出现 marked as "obsolete" in the nixpkgs repository .



    17.03 之前的旧答案:

    假设您想为每个用户同步应用程序(因为非 NixOS Nix 使应用程序可见 on per-user basis, not system-wide ,据我所知),可以声明性地进行。它只是在手册中没有得到很好的宣传——尽管它在长期的 Nixers 中似乎很受欢迎!

    您必须在以下位置创建一个文本文件: $HOME/.nixpkgs/config.nix ——例如:
    $ mkdir -p ~/.nixpkgs
    $ $EDITOR ~/.nixpkgs/config.nix

    然后输入以下内容:
    {
    packageOverrides = defaultPkgs: with defaultPkgs; {
    home = with pkgs; buildEnv {
    name = "home";
    paths = [
    nethack mc pstree #...your favourite pkgs here...
    ];
    };
    };
    }

    然后你应该能够安装所有列出的软件包:
    $ nix-env -i home
    or:
    $ nix-env -iA nixos.home # *much* faster than above

    paths你可以像 /etc/nixos/configuration.nix 一样把东西放进去在 NixOS 上。另外, home这里实际上是一个“假包”。您可以在它旁边添加更多自定义包定义,然后将它们包含在您的“路径”中。

    (旁注:我希望写一篇博客文章,介绍我所学到的关于它究竟是如何工作的,并展示如何通过更多自定义来扩展它。如果我成功了,我会尽量记住将它链接到这里。)

    关于nix - 是否可以在不运行 NixOS 的机器之间保持我的 Nix 软件包同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38493704/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com