在 VCS 中跟踪 /etc/nixos/result?

在 VCS 中跟踪 /etc/nixos/result?

虽然可以轻松回滚 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-envnix-shellnixos-rebuild等使用,因为这些命令用于$NIX_PATH定位配置。当你可能能够解决这个问题(参见这里)我不推荐它,因为当你运行它时,nixos-rebuild它会使用错误的配置文件(/etc/nixos/configuration.nix而不是 Nix 存储中的副本,无论如何它都是只读的)。事情很快就会变得不稳定。

当然,Nix 商店是世界可读

相关内容