我们如何从 NixOS 配置中引用 etc 包?

How do we refer to etc package from NixOS configuration?

我想要一条通往 nixos /etc 位置(/run/current-system/etc/nix/store/hashhere-etc-1.0 中的任何一个)的路径。我使用此路径配置 pppd connect 脚本,如下所示,

  environment.etc."huawei" =
    { text = ''
        /dev/ttyUSB0
        38400
        lock
        crtscts
        nodetach
        noipdefault
        # Below here what I've struggled
        connect ${pkgs.etc}/${environment.etc."huawei-script".target}
      '';
      mode = "0777";
      target = "ppp/peers/huawei"; };

我曾尝试编写 ${pkgs.etc}${system.build.etc} 甚至 ${environment.etc} 结果错误。

目录结构其实是相对的,不过我觉得还是用绝对路径比较安全

    /nix/store/...etc.../ppp/peers
    |- huawei
    |- huawei.d
       |- huawei.sh
       |- huawei.chat 

如果我理解正确,你的问题是你只需要将 target 属性的字符串值传递给 huawei.text connect 指令。根据 target attribute 的描述,该值是相对于 /etc 的路径,因此您应该能够:

  1. 将连接指令的值设为字符串文字 connect /etc/ppp/peers/huawei
  2. etc.huawei属性设置为recursive,这样属性就可以相互引用,然后

    environment.etc.huawei = rec {
        target = "ppp/peers/huawei";
        text = ''...
                 # Below here what I've struggled
                 connect ${target}
        '';
    };
    

您可以像这样引用 /nix/store/...etc... 中的文件路径:

{ config, pkgs, lib, ... }:

{
  environment.etc."test".text = "helo";
  environment.etc."test2".text = "${config.environment.etc."test".source.outPath}";
}

现在我在 /etc/test2:

$ cat /etc/test2
/nix/store/1igc2rf011jmrr3cprsgbdp3hhm5d4l0-etc-test

抱歉,我忽略了一个事实,即 NixOS 实际上将 /nix/store/...etc../ 中的任何文件映射到 /etc 本身。

所以,要引用一个文件,最好直接使用/etc

connect /etc/${environment.etc."huawei-script".target}