zaphyra's git: nixfiles

zaphyra and void's nixfiles

commit 8db4863ff030f1293fe5c2acc9e66cb1db52d9e0
parent 92ce7e40b4f4244206fd26cb5c3ac658bf2b218e
Author: Katja (zaphyra) <git@ctu.cx>
Date: Fri, 23 May 2025 11:23:57 +0200

config/nixos/modules/websites: add `restic.novus.infra.zaphyra.eu` (and enable on host `novus`)
4 files changed, 74 insertions(+), 4 deletions(-)
A
config/nixos/modules/websites/restic.novus.infra.zaphyra.eu.nix
|
62
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
M
hosts/novus/default.nix
|
4
++++
M
secrets/common.yaml
|
6
++++--
M
secrets/novus.yaml
|
6
++++--
diff --git a/config/nixos/modules/websites/restic.novus.infra.zaphyra.eu.nix b/config/nixos/modules/websites/restic.novus.infra.zaphyra.eu.nix
@@ -0,0 +1,62 @@
+{
+  povSelf,
+  hostConfig,
+  config,
+  lib,
+  dnsNix,
+  ...
+}:
+
+let
+  inherit (lib) types;
+  cfg = lib.getAttrFromPath povSelf config;
+
+in
+{
+
+  options = {
+    enable = {
+      type = types.bool;
+      default = false;
+    };
+    domain = {
+      type = types.str;
+      default = "zaphyra.eu";
+    };
+    subdomain = {
+      type = types.str;
+      default = "restic.${config.networking.hostName}.infra";
+    };
+  };
+
+  config = lib.mkIf cfg.enable {
+    dns.zones."${cfg.domain}".subdomains."${cfg.subdomain}".CNAME = [ "${config.networking.fqdn}." ];
+
+    sops.secrets = {
+      rcloneConfig = { };
+      resticServerHtpasswd = {
+        owner = "nginx";
+      };
+    };
+
+    modules.services.rcloneResticServer = {
+      enable = true;
+      configFile = config.sops.secrets.rcloneConfig.path;
+      nginx = {
+        enable = true;
+        domain = "${cfg.subdomain}.${cfg.domain}";
+        basicAuthFile = config.sops.secrets.resticServerHtpasswd.path;
+      };
+    };
+
+    services.nginx = {
+      enable = true;
+      virtualHosts."${cfg.subdomain}.${cfg.domain}" = {
+        useACMEHost = "${config.networking.fqdn}";
+        forceSSL = true;
+        kTLS = true;
+      };
+    };
+  };
+
+}
diff --git a/hosts/novus/default.nix b/hosts/novus/default.nix
@@ -53,6 +53,10 @@
           };
         };
 
+        websites = {
+          "restic.novus.infra.zaphyra.eu".enable = true;
+        };
+
         users.katja.enable = true;
       };
 
diff --git a/secrets/common.yaml b/secrets/common.yaml
@@ -1,4 +1,6 @@
 katjaPassword: ENC[AES256_GCM,data:JrW2Pyd3rkvc3qz59m9ftHFOTX0GM9uNEkfRIoIdyJv3xLLG2JNRoL+mUm2/fzhaAyfHCX6xxt7yXuy0,iv:Qir8r6omlkeG22z2AoO4p4XwLPMGAhXrB2IOrcMkoUM=,tag:9jlRV6Xj4GjvyY4dZ6KNhA==,type:str]
+resticEnv:
+    novus: ENC[AES256_GCM,data:KTTd0UMQiOHrrFIbY9pIJWO9MVIFWs2pvjm4Vo46CE/CrgGfxJur5uYtxHvR94bwaoLXd8RpdlONSRzbShQlH0xE86C/MyRNWiZR5QLyWj6YwzFd+DSdHQD0h0AlRviZY/vFze1EJRPZ0d6XCMJBX+aTizVSxw==,iv:pSfa9Kgpwq/wqn6nOKozgEy2h9C22oVWSCA7X07aW1w=,tag:+aD8wh33mA9hqQ1TKT1m8w==,type:str]
 sops:
     kms: []
     gcp_kms: []

@@ -32,8 +34,8 @@ sops:
             Ti9mMzB1Ri9LbnhVYnB4S1ZRdktreEEKNCi9wEdj4qruCrL+pdq8D8Q/mTimBLaR
             pQIFd6SZLf93PnOiza/9xfhAMYqjk5EIL49jVVZ9m5OOMGOzGn9HiA==
             -----END AGE ENCRYPTED FILE-----
-    lastmodified: "2025-05-21T10:21:20Z"
-    mac: ENC[AES256_GCM,data:B/s3mTdeFWVsMJwE3DmMEzN9/WC3V0MgWXDIdEDsuWX000Bjy4GnDAKiBZAwqj2DEsPjOsaxVa5QqHOOfY6D0Ld/IbFgJ4+7TOz9qstRV37G2gjCB5IS770jL/snxRXpmqZzWTvpBsJcQAyqONx6tXW2aIfw94YB+7ut3+jHupY=,iv:fCIF7iK+OlLcBujOxkKRR5sp6zf19LTYD74Fz+NOe4Q=,tag:Ha9k9v4JY/el61inZbMXFQ==,type:str]
+    lastmodified: "2025-05-22T22:49:04Z"
+    mac: ENC[AES256_GCM,data:UkVp3IEknRO5/JcfdqX19imbukjpwZ5p12hrKhyI6nJjiIr8oFhrc2l50knyhx6qWmywzg0RUIxFMmqTrDlkXij+XgHa6L4BidpMBoZSWmQ/LH9uVPTm8KcHU/YI4+C39XcKSXlyXG6f09q8COl7RFnH3dJEsBtarEnGfjO8wMQ=,iv:O4kCZeFMCMrOuCmCcxmRSdugY7ZX9gpVrt3LC6Mus88=,tag:tEO8QqwElRZxg4OT6qAnKA==,type:str]
     pgp:
         - created_at: "2025-05-21T10:21:09Z"
           enc: |-
diff --git a/secrets/novus.yaml b/secrets/novus.yaml
@@ -1,4 +1,6 @@
 acmeTSIGKey: ENC[AES256_GCM,data:a34wyBRoW3Mo6Mep66wi99xfuZLecCrDgpH4EFy4T8PpHYnhR/pLubXVzZpwouKrC+g0E+3hyBR6Bmc/1arKmQ==,iv:938iHOR2NwCjZEBQpjhnCEG11DcxtfeBLGmRh06LaRg=,tag:uhMkBrc9G7inEBg7ddWvZg==,type:str]
+resticServerHtpasswd: ENC[AES256_GCM,data:cjva4AXQw37feKs1wFl5o0pLJjfkW5sh5U8jZ2gWUYBlMQgBmdhYAuUwcR8jvismBafL6gSW4esvxPnBpcZC5yTP7TwQh/f18pouaTVH,iv:LJkvhOgTNt065K5kQNlP6zQUTK0bqd9smTIt7meUA4c=,tag:CkzAqsoKOXIdtTgqdOxORA==,type:str]
+rcloneConfig: ENC[AES256_GCM,data:ELWBEt1akcyQkL+bZN6HfkSvaARMEVKqwN0gZuzJv7zrdnd35nLJu/aAU2tSqsuPK8T7B+J3VqpLYuKZALHTOwm6dzOLnM8tBuBEO/Qy0Fb2wzj/U4/LHo1XBwAZC4pO4seyWi07IxfiafcPQ2YdZyoJcGzLXnmpOCTOn3C09C6foaIaOGBlh8weBIyKpCNM9YhjljyID9MoWFAc3+PCuASrHssSapTSX8gIgylgD37YiFY2s6ICZKCsa+TxXF6DD2qfnnf3zGNpozTMcH4bThaGB2BcqUPspylApAEIbig4jxFb/jb7PLy63E5WGpsskGYF5CT3zbzaNgYzaFZZdlZcBUcX3BUU37qXPAaRZg2f7NJopAdFlG0u8SPqetIrOikwSdL157+0WuixhPqHFC0S0erQ3fSSrXyhbhrt5kG+MO1LK34CS1aB/UZEnd2LYIJtGscH9QQMd6J7I1pW3Lgq6onS5/hE77G5mGXAKiVdLKu9E65C6X1PnUl2PwkvnioAPtMJ6bfzELEdfuD79kPq9P4HnDG1geP7Sv+BUCKzdZ+mTct7LNqXlA7hd18tAgYvt1LFumq7KV0lX3JqUGZdqSrhDJU6SYudN/BYRaPrvWCabCxJ1HzjM6lKynEuXuq41Y9RrEaekJv4/yJA33x5G+rq2CPnQEHjMu05rwXRGiCrOHCiPtPioxPFvAn5nZsZruPCZII8hKhC8Bno/aAgnVA3Ud29Ddvl9a3Rh8XCTKXpeg==,iv:Zq7DGFKxBw5tmEXXK8W7Aun1Gk78iwgju6NJJZcwBe0=,tag:3a0hn76gMiEX1imuQT0qaQ==,type:str]
 sops:
     kms: []
     gcp_kms: []

@@ -14,8 +16,8 @@ sops:
             N0dBZExjdWpSVDJmYlFmOHluZEJUWkUKhkWONhK0LiVhAY+pdemXOBHtBALV65ZP
             EClQs/bns2HUF4E5Lc6mv8WvogFNhm/TLGYX/sOWSvAYExRNiHtssQ==
             -----END AGE ENCRYPTED FILE-----
-    lastmodified: "2025-05-21T10:30:19Z"
-    mac: ENC[AES256_GCM,data:V5M4wAn+CL1pJvWTC1sXIGorR3cFgIXrTKI40orO7FOqkisod6KB5ln5bVZ+OU61NzwdDUPqYXms8qlnwJzRVglAEqceCd7bnmiOPWPQWpLDZY602QPNW1UXkKfHM9BaLT84lnown8Gqt9JTAAo23ZyOtBjP9MUT3FvgRAvRMw0=,iv:lGgu4dJzjsw9g1vro34VSowD6+IXap+hDDE2uYbTaWs=,tag:fwSuJZSMVRTdqaDABWx3OA==,type:str]
+    lastmodified: "2025-05-22T07:59:22Z"
+    mac: ENC[AES256_GCM,data:KVDR3eVJJM8y/aD3+EFGkyiM4T1W06PQeufmk8j1TMp71KuZVw/xqxCKiIUiDN9OC4fQ5EI7+WXfVgsPrcSQXnjx8J9CRlSyzNMa+99bMt4jms98c5QU1Jf4PFfqQ9FxBy+AIEyEjcPHKs458oMVaoOROjkIpWMc0hSGfZZha/A=,iv:XoiYFlCoqEiTmhkwLJ3bVjO2xnhukea3AzRXZJ8dkUY=,tag:oyb538WsxNAy/DxThJ4leQ==,type:str]
     pgp:
         - created_at: "2025-05-21T10:26:58Z"
           enc: |-