main
 1{lib, ...}: {
 2  den.aspects.services.vaultwarden = {
 3    settings = {
 4      domain = lib.mkOption {
 5        type = lib.types.str;
 6      };
 7      address = lib.mkOption {
 8        type = lib.types.str;
 9        default = "127.0.0.1";
10      };
11      port = lib.mkOption {
12        type = lib.types.port;
13        default = 8222;
14      };
15    };
16
17    persist = {
18      directories = [
19        {
20          directory = "/var/lib/vaultwarden";
21          user = "vaultwarden";
22          group = "vaultwarden";
23          mode = "0700";
24        }
25      ];
26    };
27
28    reverseProxy = {host, ...}: let
29      cfg = host.settings.services.vaultwarden;
30    in {
31      ${cfg.domain} = {
32        port = cfg.port;
33      };
34    };
35
36    nixos = {host, ...}: let
37      cfg = host.settings.services.vaultwarden;
38    in {
39      services.vaultwarden = {
40        enable = true;
41
42        inherit (cfg) domain;
43        dbBackend = "sqlite";
44        config = {
45          SIGNUPS_ALLOWED = false;
46          ENABLE_WEBSOCKET = true;
47          ROCKET_ADDRESS = cfg.address;
48          ROCKET_PORT = cfg.port;
49        };
50      };
51    };
52  };
53}