Nix 如何引用 users.extraUsers 中的用户名?

Nix how can I reference a username from users.extraUsers?

我想在某些 nix 表达式中引用用户。然而,我不想将它设置为像 bob 这样的字符串值,而是想引用一个已经在 users.extraUsers 中定义的用户,所以我假设像 users.extraUsers.bob.userName 这样的东西。这可能吗?

这样做的原因是,它为我提供了一些额外的静态保证,即我正在引用一个将存在的用户。

您可以通过查找来确保定义了用户。

$ nix repl '<nixpkgs/nixos>'
Welcome to Nix version 2.3.4. Type :? for help.

Loading '<nixpkgs/nixos>'...
Added 6 variables.

nix-repl> config.users.users.${"root"}.name 
"root"

nix-repl> user = "bob"
      
nix-repl> config.users.users.${user}.name
error: attribute 'bob' missing, at (string):1:1

nix-repl> config.users.users.${user}.name or builtins.throw "You referenced a user `${user}' which was not defined."
error: You referenced a user `bob' which was not defined.

请注意 extraUsers 只是 users 的别名。

从 Nix 不进行超出有限范围检查的静态检查的意义上说,它不是静态的,但我希望它能有所帮助。