如何在configuration.nix中正确引用用户主目录配置值?
解决方案
出现这个报错是因为你混淆了 Nix 作用域变量和 NixOS 配置选项的引用方式,users 不是 Nix 顶层作用域的变量,而是 NixOS 配置选项树的一个分支,需要通过全局 config 对象访问。
按以下步骤修改即可:
- 第一步:确认你的子配置文件作为 NixOS 模块,在头部参数列表中声明接收
config参数 - 第二步:引用配置项时加上
config.前缀
错误写法示例
# 子配置文件头部漏了 config 参数 { pkgs, ... }: { # 你的用户定义 users.users.username = { isNormalUser = true; # 其他用户配置 }; # 错误的引用方式,直接插值不存在的 users 变量 environment.variables.MY_HOME = "${users.users.username.home}"; }
正确写法示例
# 头部参数列表加上 config { config, pkgs, ... }: { # 你的用户定义不变 users.users.username = { isNormalUser = true; # 其他用户配置 }; # 加上 config. 前缀引用选项值 environment.variables.MY_HOME = "${config.users.users.username.home}"; }
补充说明
哪怕用户定义和引用语句在同一个子配置文件中,也需要通过 config 前缀访问。这是因为 NixOS 模块的求值逻辑是先收集所有模块的选项声明,再统一求值所有选项的最终值,同一模块内定义的选项也必须通过 config 才能拿到求值后的结果。
内容的提问来源于stack exchange,提问作者l0b0
相关产品推荐
相关产品推荐

