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

时间:2016-12-07 00:14:44

标签: nix nixos pppd

我想获得一条路径,该路径会导致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 

3 个答案:

答案 0 :(得分:1)

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

  1. 将connect指令的值设为字符串文字connect /etc/ppp/peers/huawei
  2. etc.huawei属性设置为target attribute,以便属性可以相互引用然后执行

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

答案 1 :(得分:1)

您可以像/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

答案 2 :(得分:0)

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

因此,要引用文件,最好直接使用/etc

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