我有一个 LUKS-with-LVM 驱动器,我想像这样手动安装:
- 登录 GNOME
- 启动鹦鹉螺
- 单击相关驱动器
- 提交密码
为此,我必须将默认安装位置/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
应替换为您希望使用其主目录的用户的真实用户名。是的,这就是在此处引用用户主目录时避免无限递归的方法。