我知道使用NixOS,您可以简单地复制configuration.nix文件以同步您的操作系统状态,包括机器之间安装的软件包.
那么,是否有可能使用非NixOS操作系统上的Nix包管理器来同步仅安装已安装的包?
请注意,至少从2017年3月30日开始(对应于17.03 Nix/NixOS频道/发布),据我所知,官方,现代,支持和建议的解决方案是使用所谓的叠加.
请参阅nixpkgs手册中标题为"Overlays"的章节,以获取有关如何使用新方法的精彩指南.
作为简短摘要:您可以在目录中放置任意数量的扩展名为.nix的文件$HOME/.config/nixpkgs/overlays/.它们将按字母顺序处理,每个都可以修改可用的Nix包集.必须按以下模式编写每个文件:
self: super:
{
boost = super.boost.override {
python = self.python3;
};
rr = super.callPackage ./pkgs/rr {
stdenv = self.stdenv_32bit;
};
}
Run Code Online (Sandbox Code Playgroud)
该super集合对应于"旧"包的集合(在应用叠加之前).如果你想引用旧版本的软件包(boost如上所述),或者callPackage你应该通过它来引用它super.
该self集合对应于最终的"未来"包组,表示应用所有叠加后的最终结果.(注意:当有时使用它们时,不要害怕被Nix拒绝,因为它会导致无限递归.可能你应该只是super在这些情况下使用.)
注意:通过上述更改,我在原始答案中提到的解决方案现在似乎已"弃用" - 我相信它应该仍然可以在2017年4月开始工作,但我不知道多长时间.它在nixpkgs存储库中显示为"过时".
老答案,17.03之前:
假设你要同步应用程序的每用户(非NixOS尼克斯保持可见的应用程序在每个用户的基础,而不是全系统,据我所知),它是可能的声明做.它只是在手册中没有得到很好的宣传 - 虽然它似乎在长期的Nixers中很受欢迎!
您必须在以下位置创建文本文件:$HOME/.nixpkgs/config.nix- 例如:
$ mkdir -p ~/.nixpkgs
$ $EDITOR ~/.nixpkgs/config.nix
Run Code Online (Sandbox Code Playgroud)
然后输入以下内容:
{
packageOverrides = defaultPkgs: with defaultPkgs; {
home = with pkgs; buildEnv {
name = "home";
paths = [
nethack mc pstree #...your favourite pkgs here...
];
};
};
}
Run Code Online (Sandbox Code Playgroud)
然后你应该能够安装所有列出的包:
$ nix-env -i home
or:
$ nix-env -iA nixos.home # *much* faster than above
Run Code Online (Sandbox Code Playgroud)
在paths你可以像在/etc/nixos/configuration.nixNixOS上类似的方式放东西.此外,home这里实际上是一个"假包".您可以在其旁边添加更多自定义程序包定义,然后将它们包含在"路径"中.
(旁注:我希望写一篇博客文章,了解我如何运作,以及如何通过更多自定义来扩展它.如果我成功,我会尽量记住在这里链接它.)
| 归档时间: |
|
| 查看次数: |
667 次 |
| 最近记录: |