You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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;
    };
  })
];

关键修改说明

  1. 给条件表达式加括号
    原代码中lib.mkIf config.networking.hostName == "nuc"会被Nix解析为(lib.mkIf config.networking.hostName) == "nuc",也就是先把字符串类型的主机名传给lib.mkIf(而lib.mkIf需要的是布尔值条件),这直接触发了"调用非函数的字符串"错误。用括号(config.networking.hostName == "nuc")包裹条件,确保先计算出布尔值再传给lib.mkIf。

  2. 移除配置块中的config.前缀
    在lib.mkIf的属性集里,直接写要修改的属性路径即可,不需要加config.——因为这些属性最终会合并到顶层的config对象中,冗余的config.不仅没必要,还可能导致意外的配置覆盖。

内容的提问来源于stack exchange,提问作者Sway

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 18:43:15