所以我在Arch linux上安装了Nix,我能够运行nix-env -i example
,但是如何定义Nix配置呢?
因为我没有任何/nixos/configuration.nix
个文件。
这可能吗?
我的目标是能够定义一个配置,然后我可以使用nixos-rebuild switch
之类的东西来安装和配置所有软件。
答案 0 :(得分:3)
我使用的是NixOS,但我使用/etc/nixos/configuration.nix
来描述我的系统;我保持相当小,并且不想安装"用户"软件编辑configuration.nix。
所以我所做的就是使用我的~/.nixpkgs/config.nix
(我相信即使在非NixOS nix安装中你也有相同的东西?我从来没有单独使用过nix)。
我使用的基本结构是:
{
packageOverrides = nixpkgs: with nixpkgs; rec {
mine = with pkgs; buildEnv {
name = "mine";
paths = [
# your packages here
];
};
};
}
buildEnv
是nix的一个便利功能,可以创建一个"环境"包装出其他一些;安装包mine
取决于(以及安装)paths
中列出的所有内容,并确保它们包含在PATH
等内容中。
然后我只使用nix-env -riA nixos.mine
来部署我对环境描述所做的更改(或者在频道更新后重建我的环境)。 -r
告诉它从我的新一代个人资料中移除mine
以外的所有其他内容,这意味着我可以(ab?)使用nix-env -i some-package
作为"临时& #34;安装some-package
,如果我不确定我是否喜欢将其实际记录在我的config.nix中,那么下次部署时它就会被删除。
答案 1 :(得分:1)
您当然可以创建自己的配置。例如,您可以执行以下操作:
let
pkgs = import <nixpkgs> {};
in
{
packages = [
pkgs.vim
pkgs.gimp
];
}
这会生成一个包含名为packages
的属性的集合,其中包含一个Nix包列表。但是,您需要开发一个工具来构建环境,这是nix-env
所做的一部分。例如,该工具可以使用nix-env
来确定已安装的内容,将其与配置中的选定软件包进行比较,然后相应地安装/卸载软件包。
你没有/etc/nixos/configuration.nix
,因为那是特定于NixOS的。因此,尽管您可以按照自己的要求进行操作,但您必须推出自己的解决方案。