]> git.immae.eu Git - perso/Immae/Config/Nix.git/blobdiff - modules/private/environment.nix
Add backup MX
[perso/Immae/Config/Nix.git] / modules / private / environment.nix
index 5f5f6c86c43c3377257bcc0c60043bde60e9e3ff..98d50b1d47c5dabea20b21757629f8cfda6828e7 100644 (file)
@@ -1,4 +1,4 @@
-{ lib, ... }:
+{ config, lib, name, ... }:
 with lib;
 with types;
 with lists;
@@ -23,6 +23,7 @@ let
   };
   mysqlOptions = {
     host = mkOption { description = "Host to access Mysql"; type = str; };
+    remoteHost = mkOption { description = "Host to access Mysql from outside"; type = str; };
     port = mkOption { description = "Port to access Mysql"; type = str; };
     socket = mkOption { description = "Socket to access Mysql"; type = path; };
     systemUsers = mkOption {
@@ -107,6 +108,63 @@ let
       };
     };
   };
+  hostEnv = submodule {
+    options = {
+      fqdn = mkOption {
+        description = "Host FQDN";
+        type = str;
+      };
+      emails = mkOption {
+        default = [];
+        description = "List of e-mails that the server can be a sender of";
+        type = listOf str;
+      };
+      ldap = mkOption {
+        description = ''
+          LDAP credentials for the host
+        '';
+        type = submodule {
+          options = {
+            password = mkOption { type = string; description = "Password for the LDAP connection"; };
+            dn = mkOption { type = string; description = "DN for the LDAP connection"; };
+          };
+        };
+      };
+      mx = mkOption {
+        description = "subdomain and priority for MX server";
+        default = { enable = false; };
+        type = submodule {
+          options = {
+            enable = mkEnableOption "Enable MX";
+            subdomain = mkOption { type = nullOr str; description = "Subdomain name (mx-*)"; };
+            priority = mkOption { type = nullOr str; description = "Priority"; };
+          };
+        };
+      };
+      ips = mkOption {
+        description = ''
+          attrs of ip4/ip6 grouped by section
+        '';
+        type = attrsOf (submodule {
+          options = {
+            ip4 = mkOption {
+              type = string;
+              description = ''
+                ip4 address of the host
+              '';
+            };
+            ip6 = mkOption {
+              type = listOf string;
+              default = [];
+              description = ''
+                ip6 addresses of the host
+              '';
+            };
+          };
+        });
+      };
+    };
+  };
 in
 {
   options.myEnv = {
@@ -115,48 +173,7 @@ in
         Attrs of servers information in the cluster (not necessarily handled by nixops)
       '';
       default = {};
-      type = attrsOf (submodule {
-        options = {
-          emails = mkOption {
-            default = [];
-            description = "List of e-mails that the server can be a sender of";
-            type = listOf str;
-          };
-          ldap = mkOption {
-            description = ''
-              LDAP credentials for the host
-            '';
-            type = submodule {
-              options = {
-                password = mkOption { type = string; description = "Password for the LDAP connection"; };
-                dn = mkOption { type = string; description = "DN for the LDAP connection"; };
-              };
-            };
-          };
-          ips = mkOption {
-            description = ''
-              attrs of ip4/ip6 grouped by section
-            '';
-            type = attrsOf (submodule {
-              options = {
-                ip4 = mkOption {
-                  type = string;
-                  description = ''
-                    ip4 address of the host
-                  '';
-                };
-                ip6 = mkOption {
-                  type = listOf string;
-                  default = [];
-                  description = ''
-                    ip6 addresses of the host
-                  '';
-                };
-              };
-            });
-          };
-        };
-      });
+      type = attrsOf hostEnv;
     };
     hetznerCloud = mkOption {
       description = ''
@@ -1172,12 +1189,10 @@ in
         '';
     };
   };
-  options.hostEnv = {
-    FQDN = mkOption {
-      type = string;
-      description = ''
-        FQDN of the current host.
-        '';
-    };
+  options.hostEnv = mkOption {
+    readOnly = true;
+    type = hostEnv;
+    default = config.myEnv.servers."${name}";
+    description = "Host environment";
   };
 }