{ inputs, lib, ... }: let userOpt = with lib; { username = mkOption { type = types.str; }; wm = mkOption { type = types.enum [ "Wayland" "X11" "-" ]; default = "-"; }; git = { username = mkOption { type = types.str; }; email = mkOption { type = types.str; }; key = mkOption { type = types.str; }; }; }; netOpt = with lib; { wlp = { enable = mkOption { type = types.bool; default = false; }; nif = mkOption { type = types.str; default = ""; }; }; wg = { enable = mkOption { type = types.bool; default = false; }; ip4 = mkOption { type = types.str; default = ""; }; ip6 = mkOption { type = types.str; default = ""; }; }; }; makeOpt = with lib; { cli = mkOption { type = types.bool; default = true; }; gui = mkOption { type = types.bool; default = false; }; virt = mkOption { type = types.bool; default = true; }; power = mkOption { type = types.bool; default = false; }; game = mkOption { type = types.bool; default = false; }; develop = mkOption { type = types.bool; default = false; }; }; serverOpt = with lib; { hostDomain = mkOption {type = types.str;}; mailDomain = mkOption {type = types.str;}; mailServer = mkOption {type = types.str;}; dbHost = mkOption {type = types.str; default = "localhost";}; dbPort = mkOption {type = types.str; default = "3306";}; configPath = mkOption {type=types.str; default= "/media/config";}; dataPath = mkOption {type=types.str; default= "/media/data";}; }; in with lib; { options.usercfg = userOpt; options.syscfg = { hostname = mkOption { type = types.str; }; defaultUser = mkOption { type = types.str; }; make = makeOpt; net = netOpt; users = mkOption { type = types.listOf (types.submodule { options = userOpt; }); default = [ ]; }; }; }