Nix, как я могу ссылаться на имя пользователя из users.extraUsers?

Я хотел бы сослаться на пользователя в каком-нибудь выражении nix. Однако вместо того, чтобы просто установить для него строковое значение типа bob, я хочу сослаться на пользователя, который уже определен в users.extraUsers, поэтому я предполагаю что-то вроде users.extraUsers.bob.userName. Это возможно?

Причина в том, что это дает мне дополнительную статическую гарантию того, что я ссылаюсь на пользователя, который будет существовать.


person Chris Stryczynski    schedule 19.06.2020    source источник


Ответы (1)


Вы можете убедиться, что пользователь определен, посмотрев его.

$ 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 не выполняет статическую проверку за пределами проверки ограниченного объема, но я надеюсь, что это поможет.

person Robert Hensing    schedule 20.06.2020