| name | debug |
| description | Debug Nix build failures, eval errors, and runtime issues. Use when asked to debug, fix errors, troubleshoot, diagnose build/eval failures, greetd crashes, or systemd failed services. |
Debug
错误分类
| 特征 | 类型 | 查什么 |
|---|
error: undefined variable | 未定义变量 | 拼写、with 污染 |
error: attribute 'xxx' missing | 属性缺失 | nixpkgs API 变更、包名错误 |
error: The option 'xxx' is used but not defined | 选项未声明 | 去 modules/options.nix 声明 |
error: infinite recursion | 无限递归 | 自引用配置 |
error: value is X while a Y was expected | 类型不匹配 | 选项类型声明 |
error: A definition for option 'xxx' is not of type '...' | 选项类型错误 | 检查赋值类型 |
诊断流程
nix flake check 2>&1
nixos-rebuild build --flake /etc/nixos#<machine> 2>&1 | tee build.log
nix log /nix/store/<hash>-<name>.drv
nix flake check --show-trace 2>&1 | head -100
常见陷阱
| 症状 | 根因 | 修复 |
|---|
No such file or directory (新 .nix 文件) | 没 git add | git add <文件> |
mcb.xxx is used but not defined | 在功能模块中声明选项 | 移到 modules/options.nix |
undefined variable | with lib; 污染 | 显式 lib.xxx |
| 列表被覆盖 | 直接赋值 = [pkg] | 用 lib.mkAfter |
greetd 问题
journalctl -u greetd -b --no-pager | tail -80
| 日志特征 | 原因 | 修复 |
|---|
| greeter 不断重启 | greeter 崩溃 → greetd restart loop | 检查 greeter 命令是否正确;agreety 是最可靠的选项 |
unrecognized option '-s' / '-d' / '-m' | cage >=0.2 废弃旧参数 | 清空 cageArgs,移除 greetd command 中的对应参数 |
Failed to initialize GTK / 白屏 | Mesa 回归(regreet 等图形 greeter) | 切换到 agreety(无 GTK/Mesa 依赖),或加 GSK_RENDERER=ngl |
| cage 找不到 GPU/DRM | 内核模块未加载 | lsmod | grep i915;检查 hardware-gpu.nix |
运行时
systemctl --failed
journalctl -u <service> -b
loginctl list-sessions