可重现的 nix-env -i 只有 Nix,没有 NixOS
Reproducible nix-env -i with only Nix, no NixOS
我只使用 Nix
作为包管理器,并没有使用所有 NixOS
。我想要一个可以共享和备份的可重现 nix-env -i
包安装。
我知道 config.nix
用于 NixOS
,但我正在寻找与 Nix
包类似的功能。
从 Nixpkgs 中,您可以使用 buildEnv
函数构建符号链接场,类似于 nix-env
生成它们的方式。
这让您可以将软件包分组到您想要单独更新的组中。当然,如果适合您的应用程序,单个组是完全有效的。
这是一个例子greeting-tools.nix
:
let
pkgs = import <nixpkgs> {};
inherit (pkgs) buildEnv;
in buildEnv {
name = "greeting-tools";
paths = [ pkgs.hello pkgs.cowsay pkgs.figlet ];
}
您可以按如下方式安装和删除
$ nix-env -i -f greeting-tools.nix
installing 'greeting-tools'
$ hello
Hello, world!
$ nix-env -e greeting-tools
uninstalling 'greeting-tools'
$ hello
The program ‘hello’ is currently not installed. [...]
要更新您的软件包,您必须重新运行 安装命令。 nix-env -u
将无法正常工作,因为它只查看 Nixpkgs,可能 没有类似的名称。
备选方案可能是 home manager。
我还是新手,但发现 https://nixos.org/manual/nixpkgs/stable/#sec-building-environment 应该做的和被问到的完全一样。
例如里面 ~/.config/nixpkgs/config.nix
{
packageOverrides = pkgs: with pkgs; {
myPackages = pkgs.buildEnv {
name = "greeting-tools";
paths = [
hello
cowsay
figlet
];
};
};
}
并通过 nix-env -iA nixpkgs.myPackages
安装
另一种方法是定义一个新的叠加层,例如在 ~/.config/nixpkgs/overlays/greeting-tools/default.nix
:
self: super: {
greetingTools = super.buildEnv {
name = "greeting-tools";
paths = [
self.hello
self.cowsay
self.figlet
];
};
}
然后可以像安装任何其他包一样安装:nix-env -i my-packages
我只使用 Nix
作为包管理器,并没有使用所有 NixOS
。我想要一个可以共享和备份的可重现 nix-env -i
包安装。
我知道 config.nix
用于 NixOS
,但我正在寻找与 Nix
包类似的功能。
从 Nixpkgs 中,您可以使用 buildEnv
函数构建符号链接场,类似于 nix-env
生成它们的方式。
这让您可以将软件包分组到您想要单独更新的组中。当然,如果适合您的应用程序,单个组是完全有效的。
这是一个例子greeting-tools.nix
:
let
pkgs = import <nixpkgs> {};
inherit (pkgs) buildEnv;
in buildEnv {
name = "greeting-tools";
paths = [ pkgs.hello pkgs.cowsay pkgs.figlet ];
}
您可以按如下方式安装和删除
$ nix-env -i -f greeting-tools.nix
installing 'greeting-tools'
$ hello
Hello, world!
$ nix-env -e greeting-tools
uninstalling 'greeting-tools'
$ hello
The program ‘hello’ is currently not installed. [...]
要更新您的软件包,您必须重新运行 安装命令。 nix-env -u
将无法正常工作,因为它只查看 Nixpkgs,可能 没有类似的名称。
备选方案可能是 home manager。
我还是新手,但发现 https://nixos.org/manual/nixpkgs/stable/#sec-building-environment 应该做的和被问到的完全一样。
例如里面 ~/.config/nixpkgs/config.nix
{
packageOverrides = pkgs: with pkgs; {
myPackages = pkgs.buildEnv {
name = "greeting-tools";
paths = [
hello
cowsay
figlet
];
};
};
}
并通过 nix-env -iA nixpkgs.myPackages
另一种方法是定义一个新的叠加层,例如在 ~/.config/nixpkgs/overlays/greeting-tools/default.nix
:
self: super: {
greetingTools = super.buildEnv {
name = "greeting-tools";
paths = [
self.hello
self.cowsay
self.figlet
];
};
}
然后可以像安装任何其他包一样安装:nix-env -i my-packages