在设置 NixOS(截至 22.11)时,我想将 Emacs 添加到系统中/etc/nixos/configuration.nix
,以便默认情况下它始终位于操作系统中。为了使用 Emacs 编辑系统配置,我必须首先安装 Emacs:
nix-env -i emacs
正如预期的那样,编辑environment.systemPackages
和nixos-rebuild
命令后,我的操作系统中就有了 emacs,下次我重建 nixos 时,Emacs 就会在那里(即使我nix-env --uninstall emacs
)。
现在的问题是,我安装的东西nix-env -i
没有反映在/etc/nixos/configuration.nix
文件中。由于它是在命令行中执行的,因此这些本地安装的命令集的重现性不太好。 (我要添加的配置也是如此~/.emacs.d
)
我的问题是:
有没有办法使本地安装(例如emacs
此处)或本地配置(例如.emacs.d
)也可以通过配置文件重现?
答案1
我不建议使用nix-env -i
安装任何软件,以确保系统可重现,所有系统更改都应通过编辑进行nixos-configuration.nix
。
至于emacs的配置,建议通过home-manager修改。
如果配置较少,可以直接通过家庭经理 -programs.emacs.extraConfig
)。
如果配置较多,建议使用家庭经理 -home.file.<name>.source
用于管理。
为了使系统更具可重复性,我建议将 NixOS 与 Flakes 一起使用,以下是相关指南:
答案2
不建议使用 nix-env 为系统安装软件包。如果您想为所有用户添加软件包到系统中,检查手册的这一部分。简而言之,您编辑configuration.nix以具有:
environment.systemPackages = with pkgs; [
<your package here>
]
然后,如果您想编辑它的配置,您可以访问这个网站查看该包的选项。例如,在 vim 的情况下,示例配置为:
programs.vim = {
enable = true;
defaultEditor = true;
};
这样,您就可以使整个配置都是声明性的。如果您想要每个用户的程序和配置,您可以按照 @Vladimír Čunát 对 home-manager 的评论中的指南进行操作。这是一些额外的设置,但它与为整个系统安装东西的方式非常相似。家庭管理器还为某些软件包提供了一些额外的选项,因此请务必在家庭管理器手册中检查它们,其中之一可以在这里找到。