到目前为止,我一直在通过nix-env -i
安装软件包来尝试 Nix 软件包管理器。现在,我想用一个来管理它~/configuration.nix
,就像例子在这里,以便我可以在我的点文件中对其进行版本控制。有没有办法从我当前的环境生成此配置?
我能找到的有关用户或系统级配置的所有信息都特定于 NixOS,并假设我已运行nixos-generate-config
来创建该文件。 nixpkgs 中不提供此工具,这让我认为它仅用于创建 NixOS 安装,而不是用于创建一般配置文件。
另外,为什么 Nix 包管理器在安装时不创建这个文件? Nix(不是 NixOS)用户如何在没有此文件的情况下配置他们安装的软件(例如 Vim 插件)?
答案1
该文件确实特定于 NixOS,并且在安装 NixOS 时自动创建。也就是说,有解决方法。
其中之一描述于https://nixos.org/nixpkgs/manual/#sec-declarative-package-management在 Nixpkgs 手册中。 (添加于这个公关.)
请注意,从那时起,覆盖机制就出现了,并且根据第 12 章叠加:“覆盖与自定义 Nixpkg 的其他方法类似,特别是
packageOverrides
中描述的属性第 6.5 节 “通过修改包packageOverrides
”。事实上,packageOverrides
它仅与 super 参数一起充当覆盖层。因此,它适合基本使用,但覆盖层更强大且更易于分发。”似乎还有一个用户端声明性配置正在进行中,但它已经有一段时间没有更新了:https://github.com/NixOS/nixpkgs/pull/9250
另请参阅普通用户的声明式包管理关于 NixOS Discourse 的讨论。
答案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
然后应用任何更改。