{ lib, config, pkgs, ... }: let cfg = config.main_user; in { options.main_user = { enable = lib.mkEnableOption "enable user module"; isDesktopUser = lib.mkOption { default = false; example = true; description = "Add additional user groups for desktop users"; }; userName = lib.mkOption { default = "mainuser"; description = "username"; }; }; config = lib.mkIf cfg.enable { users.users.${cfg.userName} = lib.mkMerge [ { isNormalUser = true; initialPassword = "password"; description = "main user"; shell = pkgs.zsh; } (lib.mkIf (!cfg.isDesktopUser) { extraGroups = [ "wheel" "networkmanager" cfg.userName ]; }) (lib.mkIf cfg.isDesktopUser { extraGroups = [ "wheel" "networkmanager" cfg.userName "video" "audio" # For android "adbusers" # For serial interfaces "dialout" # For docker "docker" "syncthing" ]; }) ]; }; }