{ lib, ... }: let emailType = lib.types.submodule ( { ... }: { options = { address = lib.mkOption { type = lib.types.str; }; primary = lib.mkOption { type = lib.types.bool; }; type = lib.mkOption { type = lib.types.str; }; }; } ); userType = lib.types.submodule ( { ... }: { options = { name = lib.mkOption { type = lib.types.str; }; realName = lib.mkOption { type = lib.types.str; }; homeDirectory = lib.mkOption { type = lib.types.str; }; emails = lib.mkOption { type = lib.types.attrsOf emailType; }; }; } ); displayModeType = lib.types.submodule ( { ... }: { options = { width = lib.mkOption { type = lib.types.int; }; height = lib.mkOption { type = lib.types.int; }; refresh = lib.mkOption { type = lib.types.float; }; }; } ); displayType = lib.types.submodule ( { ... }: { options = { primary = lib.mkOption { type = lib.types.bool; default = false; }; x = lib.mkOption { type = lib.types.int; }; y = lib.mkOption { type = lib.types.int; }; scale = lib.mkOption { type = lib.types.nullOr lib.types.float; default = null; }; mode = lib.mkOption { type = lib.types.nullOr displayModeType; default = null; }; }; } ); hostType = lib.types.submodule ( { ... }: { options = { name = lib.mkOption { type = lib.types.str; }; displays = lib.mkOption { type = lib.types.attrsOf displayType; default = { }; }; users = lib.mkOption { type = lib.types.attrsOf userType; default = { }; }; }; } ); in { flake.modules.nixos.meta = { options.meta.host = lib.mkOption { type = hostType; }; }; flake.modules.homeManager.meta = { options.meta = { host = lib.mkOption { type = lib.types.nullOr hostType; default = null; }; user = lib.mkOption { type = lib.types.nullOr userType; default = null; }; }; }; }