使用lib.mkIf与lib.mkMerge按主机名配置时出错,求修正方案
修正后的Nix主机名条件配置
你的错误源于两个问题:运算符优先级错误和配置块路径冗余,以下是修正后的代码:
config = lib.mkMerge [ (lib.mkIf (config.networking.hostName == "nuc") { installconfig.hardware.intel = true; }) (lib.mkIf (config.networking.hostName == "xps") { installconfig = { hardware.intel = true; workstation-components.enable = true; users.allow-rad = true; }; }) ];
关键修改说明
给条件表达式加括号
原代码中lib.mkIf config.networking.hostName == "nuc"会被Nix解析为(lib.mkIf config.networking.hostName) == "nuc",也就是先把字符串类型的主机名传给lib.mkIf(而lib.mkIf需要的是布尔值条件),这直接触发了"调用非函数的字符串"错误。用括号(config.networking.hostName == "nuc")包裹条件,确保先计算出布尔值再传给lib.mkIf。移除配置块中的
config.前缀
在lib.mkIf的属性集里,直接写要修改的属性路径即可,不需要加config.——因为这些属性最终会合并到顶层的config对象中,冗余的config.不仅没必要,还可能导致意外的配置覆盖。
内容的提问来源于stack exchange,提问作者Sway
相关产品推荐
相关产品推荐

