{ 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"; }; fullName = lib.mkOption { type = lib.types.str; default = "mainuser"; description = "Full display name for the user"; }; extraGroups = lib.mkOption { type = lib.types.listOf lib.types.str; default = []; description = "Additional groups for the user beyond the base set"; }; }; config = lib.mkIf cfg.enable { users.users.${cfg.userName} = lib.mkMerge [ { isNormalUser = true; initialPassword = "password"; description = cfg.fullName; shell = pkgs.zsh; } (lib.mkIf (!cfg.isDesktopUser) { extraGroups = [ "wheel" "networkmanager" cfg.userName ] ++ cfg.extraGroups; }) (lib.mkIf cfg.isDesktopUser { extraGroups = [ "wheel" "networkmanager" cfg.userName "video" "audio" "adbusers" ] ++ cfg.extraGroups; }) ]; }; }