{ myvars, config, ... }: { # Don't allow mutation of users outside the config. users.mutableUsers = false; users.groups = { "${myvars.username}" = {}; docker = {}; wireshark = {}; # for android platform tools's udev rules adbusers = {}; dialout = {}; # for openocd (embedded system development) plugdev = {}; # misc uinput = {}; }; users.users."${myvars.username}" = { # generated by `mkpasswd -m scrypt` # we have to use initialHashedPassword here when using tmpfs for / initialHashedPassword = "$7$CU..../....KDvTIXqLTXpmCaoUy2yC9.$145eM358b7Q0sRXgEBvxctd5EAuEEdao57LmZjc05D."; home = "/home/${myvars.username}"; isNormalUser = true; extraGroups = [ myvars.username "users" "networkmanager" "wheel" "docker" "wireshark" "adbusers" "libvirtd" ]; }; # root's ssh key are mainly used for remote deployment users.users.root = { initialHashedPassword = config.users.users."${myvars.username}".initialHashedPassword; openssh.authorizedKeys.keys = config.users.users."${myvars.username}".openssh.authorizedKeys.keys; }; }