{ lib, config, ... }: let retired_host = "retired.dgnum.eu"; mkRetired = hosts: builtins.listToAttrs ( builtins.map (name: { inherit name; value = { enableACME = true; forceSSL = true; locations."/".return = "301 https://${retired_host}/${name}"; }; }) hosts ); mkSub = domain: builtins.map (s: "${s}.${domain}"); mkSubs = attrs: builtins.concatLists (builtins.attrValues (builtins.mapAttrs mkSub attrs)); mkRedirection = _: { to }: { globalRedirect = to; enableACME = true; forceSSL = true; }; cfg = config.dgn-redirections; in { options.dgn-redirections = { redirections = lib.mkOption { type = with lib.types; attrsOf (submodule { options.to = lib.mkOption { type = str; }; }); default = { }; }; retired = lib.mkOption { type = with lib.types; listOf str; default = [ ]; }; }; config = { dgn-redirections = { redirections = { "calendrier.eleves.ens.fr".to = "calendrier.dgnum.eu"; "docs.beta.rz.ens.wtf".to = "pads.dgnum.eu"; "git.rz.ens.wtf".to = "git.dgnum.eu"; "notion.rz.ens.wtf".to = "docs.dgnum.eu"; "nuage.beta.rz.ens.wtf".to = "cloud.dgnum.eu"; "rdv.dgnum.eu".to = "meet.dgnum.eu"; "www.bda.ens.fr".to = "bda.ens.fr"; "bda.wp.dgnum.eu".to = "bda.ens.fr"; "www.tuteurs.ens.fr".to = "tuteurs.ens.fr"; "www.interq.ens.fr".to = "interq.ens.fr"; "www.lanuit.ens.fr".to = "lanuit.ens.fr"; }; retired = mkSubs { "ens.fr" = [ "alevins" "www.climatenavigator" ]; "ens.wtf" = [ "photos" ]; "rz.ens.wtf" = [ "s3" "cdn" ]; "beta.rz.ens.wtf" = [ "todo" "minecraft" "factorio" "home" "pads" "api.pads" "files.pads" "sandbox.pads" "jurisprudens" "rstudio" ]; }; }; services.nginx.virtualHosts = { ${retired_host}.default = true; } // (builtins.mapAttrs mkRedirection cfg.redirections) // (mkRetired cfg.retired); }; }