如何在 NixOS 之外配置 Nix 环境?

如何在 NixOS 之外配置 Nix 环境?

到目前为止,我一直在通过nix-env -i安装软件包来尝试 Nix 软件包管理器。现在,我想用一个来管理它~/configuration.nix,就像例子在这里,以便我可以在我的点文件中对其进行版本控制。有没有办法从我当前的环境生成此配置?

我能找到的有关用户或系统级配置的所有信息都特定于 NixOS,并假设我已运行nixos-generate-config来创建该文件。 nixpkgs 中不提供此工具,这让我认为它仅用于创建 NixOS 安装,而不是用于创建一般配置文件。

另外,为什么 Nix 包管理器在安装时不创建这个文件? Nix(不是 NixOS)用户如何在没有此文件的情况下配置他们安装的软件(例如 Vim 插件)?

答案1

该文件确实特定于 NixOS,并且在安装 NixOS 时自动创建。也就是说,有解决方法。

答案2

您可以使用如下所示的 nix 表达式来管理“nix shell”环境:

shell.nix

{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
  buildInputs = [ pkgs.bash pkgs.zsh pkgs.curl pkgs.wget ];
}

然后要“进入”此环境,请运行:nix-shell shell.nix

答案3

configuration.nix您可以使用 Ben Creasy 建议的工具复制文件的 [NixOS 文档](nixos-rebuild 开关)中描述的工作流程。家庭经理

它有一个针对非 NixOS Linux 发行版的选项 [1]:

targets.genericLinux.enable = true;

哪个

自动设置一些环境变量,以方便在非 NixOS linux 上使用 nix 安装的软件(修复本地问题、设置 XDG_DATA_DIRS 等):

您可以使用 home-manager 以声明方式管理您的包/程序。这是home.nix文档中的一个最小示例:

{ pkgs, ... }:

{
  home.packages = [
    pkgs.htop
    pkgs.fortune
  ];

  programs.emacs = {
    enable = true;
    extraPackages = epkgs: [
      epkgs.nix-mode
      epkgs.magit
    ];
  };

  programs.firefox = {
    enable = true;
    profiles = {
      myprofile = {
        settings = {
          "general.smoothScroll" = false;
        };
      };
    };
  };

  services.gpg-agent = {
    enable = true;
    defaultCacheTtl = 1800;
    enableSshSupport = true;
  };

  programs.home-manager = {
    enable = true;
    path = "…";
  };
}

home-manager switch然后应用任何更改。

  1. https://nixos.wiki/wiki/Home_Manager#Usage_on_non-NixOS_Linux

答案4

我使用 Nix 在 Ubuntu 上管理我的点文件。我跑这个脚本这只是一个包装这个安装程序

安装程序将点文件版本转换为尼克斯套餐,并使用GNU 存储将它们链接回您的主目录。

对于大多数人来说,它可能有点复杂,但我用它来管理 NixOS、Ubuntu 和 OSX 之间的点文件。

相关内容