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

Chr*_*ski 5 nixos nix

因此,我已经在Arch Linux上安装了Nix,并且能够运行nix-env -i example,但是如何定义Nix配置?

由于我没有任何/nixos/configuration.nix文件。

这可能吗?


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

Ben*_*Ben 9

我使用 NixOS,但我用它/etc/nixos/configuration.nix来描述我的系统;我将其保持在相当小的水平,并且不喜欢通过编辑configuration.nix来安装“用户”软件。

所以我所做的是使用 my ~/.nixpkgs/config.nix(我相信即使在非 NixOS nix 安装中你也有一个等效的东西?我从来没有真正单独使用过 nix)。

我使用的基本结构是这样的:

{
  packageOverrides = nixpkgs: with nixpkgs; rec {
    mine = with pkgs; buildEnv {
      name = "mine";
      paths = [
        # your packages here
      ];
    };
  };
}
Run Code Online (Sandbox Code Playgroud)

buildEnv是 nix 的一个便利函数,它从一堆其他函数中创建一个“环境”包;安装软件包mine取决于(因此安装)中列出的所有内容paths,并确保它们包含在PATH类似的内容中。

然后我只用它nix-env -riA nixos.mine来部署我对环境描述所做的更改(或在频道更新后重建我的环境)。告诉-r它删除除了mine我的新一代配置文件之外的所有其他内容,这意味着我可以(ab?)用作nix-env -i some-package“临时”安装的方式some-package,如果我不决定,我足够喜欢它来实际记录它在我的 config.nix 中,下次部署时它会被删除。


Emm*_*osa 2

您当然可以创建自己的配置。例如,您可以执行以下操作:

let
    pkgs = import <nixpkgs> {};
in
    {    
        packages = [
            pkgs.vim
            pkgs.gimp
        ];
    }
Run Code Online (Sandbox Code Playgroud)

这将生成一个包含名为 的属性的集合packages,其中包含 Nix 包的列表。但是,您需要开发一个工具来构建环境,这是其中的一部分nix-env。例如,该工具可用于nix-env确定已安装的内容,将其与配置中选定的包进行比较,然后相应地安装/卸载包。

您没有 ,/etc/nixos/configuration.nix因为这是 NixOS 特定的。因此,虽然您可以按照您的要求进行操作,但您必须推出自己的解决方案。