![如何为 NixOS/nixpkgs 创建本地存储库?](https://linux22.com/image/47374/%E5%A6%82%E4%BD%95%E4%B8%BA%20NixOS%2Fnixpkgs%20%E5%88%9B%E5%BB%BA%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8%E5%BA%93%EF%BC%9F.png)
我找到的创建 Nix 软件包本地存储库的所有说明都涉及创建主nixpkgs
存储库的本地克隆并添加到其中。
有没有办法创建一个仅包含本地附加包的小型存储库?
答案1
是的,只需为单个包创建一个表达式即可。您可以通过从 nixpkgs 获取依赖项pkgs = import <nixpkgs> {};
。
答案2
这篇博文有一些细节:http://sandervanderburg.blogspot.no/2014/07/managing-private-nix-packages-outside.html
对于更多底层的从头开始的细节,有 nix-pill 系列:http://lethalman.blogspot.no/2014/07/nix-pill-1-why-you-should-give-it-try.html
但我认为基本方法是创建您自己的版本~/.nix-defexpr/channels_root/nixos/pkgs/top-level/all-packages.nix
,例如mypkgs.nix
通过导入从默认“repo”添加依赖项<nixpkgs>
。
通过执行以下操作安装软件包nix-env -f mypkgs.nix -i DERIVATION_NAME
但由于 nix 是基于一种成熟的语言,所以我猜你可以有无数种方法来做到这一点。
答案3
我绝不是 Nix 专家,所以我不知道这是否是最好的方法,但这就是我所做的。我有一个本地包存储库$HOME/nix-local
,其中包含许多包文件vault/default.nix
等blackbox/default.nix
以及一个config.nix
定义packageOverrides
调用它们的文件。所以像这样:
$ cat nix-local/config.nix
{
packageOverrides = pkgs: rec {
vault = pkgs.callPackage ./vault {};
blackbox = pkgs.callPackage ./blackbox {};
# ...
}
$ export NIXPKGS_CONFIG=$HOME/nix-local/config.nix
您可以在以下位置查看完整的存储库:https://github.com/telent/nix-local