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}