[披露:我早些时候在 NixOS channel 上问过这个问题,但 30 分钟后没有得到答复,这是一个繁忙的 channel 。如果我在那里得到一个,我会在这里复制它]
我正在尝试向 NixOS 中的配置文件添加一些行(例如 /etc/pam.d/sudo
)。 pam.nix 中可用的配置选项不包括我想添加的行(在本例中为 account requisite pam_time.so
),并且不包括 extraConfig
选项。
我知道我可以使用 environement.etc.filename.text
创建新的配置文件所以我去了,但是 sudo nixos-rebuild switch
然后提示它有两个配置文件的来源,官方的和我的( mismatched duplicate entry /nix/… <-> /nix/…
):
environment.etc."pam.d/sudo".text = ''blah'';
在 NixOS 中是否有附加到/etc/配置文件(或修补它)的通用方法?
或者是修改系统 .nix 文件的唯一方法(例如修改
pam.nix
,我不愿意这样做,因为它会与 future 的更新发生冲突)?
最佳答案
您可以将行添加到默认值 security.pam.services.sudo.text
使用 mkOverride
或快捷方式 mkDefault
为您的值赋予与默认值相同的优先级。您可以使用 mkOrder
控制订单或快捷方式 mkBefore
和 mkAfter
.所以要追加,你可以这样做:
security.pam.services.sudo.text = pkgs.lib.mkDefault( pkgs.lib.mkAfter "# hi" );
当一个选项有多个值时,只保留优先级最低的值。如果仍然有多个值,则对它们进行排序和合并。
mkOverride
和 mkOrder
创建特殊值,代码在 modules.nix识别它何时执行此操作。普通值具有默认优先级 (100) 和排序顺序 (1000)。 pam.nix用途 mkDefault
它为 text
创造的值(value)选项,它使优先级为 1000,因此普通值将替换它而不是被合并。NixOS manual section on Modularity再解释一下。
我不认为你可以为
environment.etc
一般地做这件事因为目标文件不必匹配属性名称,而 pam.nix特别是在 environment.etc
中没有命名它的任何条目。 .它更像是一个按顺序处理的指令列表。见 etc.nix和make-etc.sh
关于config - 如何在 NixOS 中将文本附加到/etc/... 配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45575297/