ctucx.git: nixfiles

ctucx' nixfiles

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 { pkgs, config, ... }:

{

  dns.zones."ctu.cx".subdomains.vault.CNAME = [ "${config.networking.fqdn}." ];

  age.secrets = {
    restic-vaultwarden.file = ./. + "/../../secrets/${config.networking.hostName}/restic/vaultwarden.age";
    vaultwarden-secrets = {
      file  = ./. + "/../../secrets/${config.networking.hostName}/vaultwarden-secrets.age";
      owner = "vaultwarden";
      group = "vaultwarden";
    };
  };

  restic-backups.vaultwarden = {
    user         = "vaultwarden";
    passwordFile = config.age.secrets.restic-vaultwarden.path;
    paths        = [ "/var/lib/bitwarden_rs" ];
  };

  systemd.services.vaultwarden.onFailure = [ "email-notify@%i.service" ];

  services = {
    vaultwarden = {
      enable          = true;
      dbBackend       = "sqlite";
      backupDir       = "/var/lib/bitwarden_rs/backups";
      environmentFile = config.age.secrets.vaultwarden-secrets.path;
      config          = {
        DOMAIN          = "https://vault.ctu.cx";
        SIGNUPS_ALLOWED = false;

        PUSH_ENABLED = true;

        SMTP_HOST     = "trabbi.ctu.cx";
        SMTP_FROM     = "vaultwarden@ctu.cx";
        SMTP_USERNAME = "vaultwarden@ctu.cx";
        SMTP_PORT     = 587;
        SMTP_SECURITY = "starttls";

        ROCKET_ADDRESS = "::1";
        ROCKET_PORT = 8582;
      };
    };

    nginx = {
      enable = true;
      virtualHosts."vault.ctu.cx" = {
        enableACME = true;
        forceSSL   = true;
        kTLS       = true;
        locations."/".proxyPass = "http://[::1]:${toString config.services.vaultwarden.config.ROCKET_PORT}/";
        locations."/notifications/hub" = {
          proxyPass = "http://[::1]:${toString config.services.vaultwarden.config.ROCKET_PORT}/";
          proxyWebsockets = true;
        };
      };
    };
  };

}