diff options
| author | Mike Vink <mike@pionative.com> | 2024-07-14 06:40:52 +0200 |
|---|---|---|
| committer | Mike Vink <mike@pionative.com> | 2024-07-14 06:40:52 +0200 |
| commit | 98c31cac3e931023b5afeb209af6b6eed2a025c7 (patch) | |
| tree | 4f78891affa3ce2cfbb7f0b1b3efc31d68c87ab7 /lib/machine.nix | |
| parent | f56f38fc344a80244266e0b69f909775599ba5b2 (diff) | |
wip
Diffstat (limited to 'lib/machine.nix')
| -rw-r--r-- | lib/machine.nix | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/lib/machine.nix b/lib/machine.nix new file mode 100644 index 0000000..10e766f --- /dev/null +++ b/lib/machine.nix @@ -0,0 +1,98 @@ +lib: systemOptions: with lib; let + modules = [ + { + options.machines = mkOption { + description = "Machine options"; + default = {}; + type = with types; attrsOf (submodule ({ name, config, ... }: { + freeformType = attrs; + options = { + modules = mkOption { + description = "Final list of modules to import"; + type = listOf str; + default = []; + }; + profiles = mkOption { + description = "List of profiles to use"; + type = listOf str; + default = []; + }; + hostname = mkOption { + description = "The machine's hostname"; + type = str; + readOnly = true; + default = name; + }; + ipv4 = mkOption { + description = "The machines public IPv4 addresses"; + type = listOf str; + default = []; + }; + ipv6 = mkOption { + description = "The machines public IPv6 addresses"; + type = listOf str; + default = []; + }; + isStation = mkOption { + description = "The machine is a desktop station"; + type = bool; + default = false; + }; + isServer = mkOption { + description = "The machine is a server"; + type = bool; + default = false; + }; + isFake = mkOption { + description = "The machine is a fake machine"; + type = bool; + default = false; + }; + isDarwin = mkOption { + description = "The machine is a fake machine"; + type = bool; + default = false; + }; + tailnet = mkOption { + default = {}; + type = with types; attrsOf (submodule ({ name, config, ... }: { + options = { + ipv4 = mkOption { + description = "The machine's tailnet IPv4 address"; + type = str; + default = null; + }; + ipv6 = mkOption { + description = "The machine's tailnet IPv6 address"; + type = str; + default = null; + }; + nodeKey = mkOption { + description = "The machine's tailnet public key"; + type = str; + default = null; + }; + }; + })); + }; + syncthing = mkOption { + default = {}; + type = with types; submodule { + freeformType = attrs; + options = { + id = mkOption { + description = "The machine's syncting public id"; + type = str; + default = ""; + }; + enable = mkEnableOption "Add to syncthing cluster"; + }; + }; + }; + }; + })); + }; + config.machines = systemOptions; + } + ]; +in (evalModules { inherit modules; }).config.machines |
