虽然可以轻松回滚 NixOS 构建版本,但这不会返回/etc/nixos/configuration.nix
.因此,/etc/nixos/
在版本控制系统(VCS)(例如 Git)中进行跟踪似乎很常见。
这样做时,是否/etc/nixos/result
也应该跟踪符号链接?为什么?/为什么不?
答案1
我看不出这样做有任何显着的优势,但也许我的用例在这方面太简单了。
我更喜欢观看ls -l /nix/var/nix/profiles/
和/或ls -l /nix/var/nix/profiles/system-profiles
,根据您是否命名系统配置文件,并且我通常会手动删除我想要垃圾收集的符号链接。
答案2
您可以跟踪您的configuration.nix
相应世代。您只需要创建对它的引用(在其自身内部),以便它成为闭包的一部分。这是一个例子:
配置.nix
{ config, lib, pkgs, ... }:
{
# yada, yada
environment.etc."configuration.nix".source = /etc/nixos/configuration.nix;
};
这environment.etc
选项允许您以声明方式创建文件/etc
。 Nix 将检测/etc/nixos/configuration.nix
为一种path
类型(路径是 Nix 中的一流类型),从而将其内容复制到 Nix 存储中。结果是一个/etc/configuration.nix
(间接)指向 的符号链接/nix/store/blah-blah-configuration.nix
,这意味着每一代都会有一个/etc/configuration.nix
指向其相应配置的符号链接。然后,您可以对其他文件执行类似的操作,例如hardware-configuration.nix
.
陷阱
虽然上面将存储您的配置,但它不会使其可供nix-env
、nix-shell
、nixos-rebuild
等使用,因为这些命令用于$NIX_PATH
定位配置。当你可能能够解决这个问题(参见这里)我不推荐它,因为当你运行它时,nixos-rebuild
它会使用错误的配置文件(/etc/nixos/configuration.nix
而不是 Nix 存储中的副本,无论如何它都是只读的)。事情很快就会变得不稳定。
当然,Nix 商店是世界可读。