不使用Nixos时如何使用nix配置?

时间:2017-07-31 13:36:33

标签: nix nixos

所以我在Arch linux上安装了Nix,我能够运行nix-env -i example,但是如何定义Nix配置呢?

因为我没有任何/nixos/configuration.nix个文件。

这可能吗?

我的目标是能够定义一个配置,然后我可以使用nixos-rebuild switch之类的东西来安装和配置所有软件。

2 个答案:

答案 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的。因此,尽管您可以按照自己的要求进行操作,但您必须推出自己的解决方案。