{ pkgs, lib, profiles, ... }: { options.machine.meta = lib.mkOption { description = "Machine metadata"; type = with lib; types.submodule ( { name, ... }: { freeformType = with types; oneOf [ str attrs ]; options = { hostname = mkOption { description = "The machine's hostname"; type = types.str; default = name; readOnly = true; }; sshPort = mkOption { description = "The port for the ssh server of the machine"; type = types.int; default = 45; }; sshUser = mkOption { description = "The user for ssh connection to the machine"; default = "julien"; }; tld = mkOption { description = "tld for local addressing of the machine"; default = "luj"; }; profiles = mkOption { description = "profiles applied to the machine"; default = with profiles; [ base ]; }; probes = { monitors = lib.mkOption { type = types.attrsOf (pkgs.formats.json { }).type; default = { }; }; tags = lib.mkOption { type = types.attrsOf (pkgs.formats.json { }).type; default = { }; }; notifications = lib.mkOption { type = types.attrsOf (pkgs.formats.json { }).type; default = { }; }; status_pages = lib.mkOption { type = types.attrsOf (pkgs.formats.json { }).type; default = { }; }; settings = lib.mkOption { type = types.attrsOf (pkgs.formats.json { }).type; default = { }; }; }; defaultInterface = mkOption { description = "default interface of the machine"; default = "ens18"; }; }; } ); default = { }; }; config = { machine.meta.profiles = [ profiles.base ]; }; }