在“fileSystems”中引用“config.users.users.default.home”时如何避免无限递归?

在“fileSystems”中引用“config.users.users.default.home”时如何避免无限递归?

我有一个 LUKS-with-LVM 驱动器,我想像这样手动安装:

  1. 登录 GNOME
  2. 启动鹦鹉螺
  3. 单击相关驱动器
  4. 提交密码

为此,我必须将默认安装位置/run/media/user/foo(这是一个 tmpfs,因此需要 root 访问权限才能在每次启动后创建目录)更改为用户控制的位置,/home/user/foo.我希望能够做到这一点如下/etc/nixos/configuration.nix

fileSystems."${config.users.users.default.home}/foo" = {
  device = "/dev/mapper/luks-0179e7de-a468-4213-b932-ee2df135336d";
  options = [ "defaults" "noatime" "noauto" "user" ];
};

这会产生一条关于无限递归的消息:

$ sudo nixos-rebuild switch
building Nix...
building the system configuration...
error: infinite recursion encountered, at undefined position
(use '--show-trace' to show detailed location information)

我已经通过硬编码解决了这个问题fileSystems."/home/user/foo" = […],但是在此处引用用户主目录时是否可以避免无限递归?

答案1

是的,在 NixOS 设置中防止引用用户主目录时出现无限递归错误是可行的。因为$config.users.users.default.home是引用回顶级属性的属性路径config,所以将其放入fileSystems属性中会导致循环依赖。

为了避免这种情况,您可以使用简写来引用用户的主目录~。该快捷方式在运行时会延伸至完整路由,从而防止配置文件循环依赖。

这是一个应该适合您的示例设置:

fileSystems."~user/foo" = {
  device = "/dev/mapper/luks-0179e7de-a468-4213-b932-ee2df135336d";
  options = [ "defaults" "noatime" "noauto" "user" ];
};

另请注意,在给定的设置中,user应替换为您希望使用其主目录的用户的真实用户名。是的,这就是在此处引用用户主目录时避免无限递归的方法。

相关内容