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 nixos = {
46 host,
47 config,
48 ...
49 }: let
50 cfg = host.settings.services.wakapi;
51 in {
52 services.wakapi = {
53 enable = true;
54 settings = {
55 server = {
56 listen_ipv4 = cfg.address.ipv4;
57 listen_ipv6 = cfg.address.ipv6;
58 port = cfg.port;
59 public_url = "https://${cfg.domain}";
60 };
61 app = {
62 leaderboard_enabled = false;
63 avatar_url_template = "https://0.gravatar.com/avatar/{email_hash}";
64 date_format = "2006-01-02"; # Go
65 datetime_format = "2006-01-02 15:04";
66 };
67 };
68 environmentFiles = [
69 config.vaultix.templates.wakapi-env.path
70 ];
71 };
72
73 vaultix.secrets.wakapi-password-salt.file = cfg.passwordSaltFileAged;
74 vaultix.templates.wakapi-env.content = ''
75 WAKAPI_PASSWORD_SALT=${config.vaultix.placeholder.wakapi-password-salt}
76 '';
77 };
78 };
79}