main
 1{lib, ...}: {
 2  den.aspects.services.wakapi = {
 3    settings.host = {
 4      domain = lib.mkOption {
 5        type = lib.types.str;
 6      };
 7      address = {
 8        ipv4 = lib.mkOption {
 9          type = lib.types.str;
10          default = "127.0.0.1";
11        };
12        ipv6 = lib.mkOption {
13          type = lib.types.str;
14          default = "::1";
15        };
16      };
17      port = lib.mkOption {
18        type = lib.types.port;
19        default = 5423;
20      };
21      passwordSaltFileAged = lib.mkOption {
22        type = lib.types.path;
23      };
24    };
25
26    persist = {
27      directories = [
28        {
29          directory = "/var/lib/private/wakapi";
30          user = "nobody";
31          group = "nogroup";
32          mode = "0700";
33        }
34      ];
35    };
36
37    reverseProxy = {host, ...}: let
38      cfg = host.settings.services.wakapi;
39    in {
40      ${cfg.domain} = {
41        port = cfg.port;
42      };
43    };
44
45    backup = {
46      wakapi = {
47        paths = ["/var/lib/private/wakapi"];
48      };
49    };
50
51    nixos = {
52      host,
53      config,
54      ...
55    }: let
56      cfg = host.settings.services.wakapi;
57    in {
58      services.wakapi = {
59        enable = true;
60        settings = {
61          server = {
62            listen_ipv4 = cfg.address.ipv4;
63            listen_ipv6 = cfg.address.ipv6;
64            port = cfg.port;
65            public_url = "https://${cfg.domain}";
66          };
67          app = {
68            leaderboard_enabled = false;
69            avatar_url_template = "https://0.gravatar.com/avatar/{email_hash}";
70            date_format = "2006-01-02"; # Go
71            datetime_format = "2006-01-02 15:04";
72          };
73        };
74        environmentFiles = [
75          config.vaultix.templates.wakapi-env.path
76        ];
77      };
78
79      vaultix.secrets.wakapi-password-salt.file = cfg.passwordSaltFileAged;
80      vaultix.templates.wakapi-env.content = ''
81        WAKAPI_PASSWORD_SALT=${config.vaultix.placeholder.wakapi-password-salt}
82      '';
83    };
84  };
85}