77 lines
1.6 KiB
Nix
77 lines
1.6 KiB
Nix
|
{ config, pkgs, lib, ... }:
|
||
|
|
||
|
with lib;
|
||
|
|
||
|
let
|
||
|
|
||
|
cfg = config.system.custom.mainUser;
|
||
|
|
||
|
dockerGroup =
|
||
|
if (config.virtualisation.docker.enable)
|
||
|
then [ "docker" ]
|
||
|
else [];
|
||
|
|
||
|
vboxGroup =
|
||
|
if (config.virtualisation.virtualbox.host.enable)
|
||
|
then [ "vboxusers" ]
|
||
|
else [];
|
||
|
|
||
|
in {
|
||
|
|
||
|
options.system.custom.mainUser = {
|
||
|
|
||
|
enable = mkEnableOption "enable mainUser for a desktop system";
|
||
|
|
||
|
userName = mkOption {
|
||
|
type = with types; str;
|
||
|
description = ''
|
||
|
name of the main user
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
uid = mkOption {
|
||
|
type = with types; int;
|
||
|
default = 1337;
|
||
|
description = ''
|
||
|
uid of main user
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
extraGroups = mkOption {
|
||
|
default = [];
|
||
|
type = with types; listOf str;
|
||
|
description = ''
|
||
|
list of groups the main user should also be in
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
authorizedKeyFiles = mkOption {
|
||
|
default = [];
|
||
|
type = with types; listOf str;
|
||
|
description = ''
|
||
|
list of keys allowed to login as this user
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
};
|
||
|
|
||
|
config = mkIf cfg.enable {
|
||
|
|
||
|
users = {
|
||
|
|
||
|
mutableUsers = true;
|
||
|
defaultUserShell = pkgs.zsh;
|
||
|
|
||
|
users.mainUser = {
|
||
|
isNormalUser = true;
|
||
|
name = cfg.userName;
|
||
|
uid = cfg.uid;
|
||
|
home = "/home/${cfg.userName}";
|
||
|
initialPassword = cfg.userName;
|
||
|
extraGroups = [ "wheel" "networkmanager" "transmission" "wireshark" ] ++ dockerGroup ++ vboxGroup ++ cfg.extraGroups;
|
||
|
openssh.authorizedKeys.keyFiles = cfg.authorizedKeyFiles ;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
}
|