main
 1{lib, ...}: {
 2  den.aspects.services.artalk = {
 3    settings.host = {
 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 = 7364;
14      };
15    };
16
17    persist = {config, ...}: let
18      cfg = config.services.artalk;
19    in {
20      directories = [
21        {
22          directory = cfg.workdir;
23          inherit (cfg) user group;
24          mode = "0700";
25        }
26      ];
27      files = lib.optional (cfg.allowModify) {
28        file = cfg.configFile;
29        inherit (cfg) user group;
30        parent = {
31          inherit (cfg) user group;
32          mode = "0700";
33        };
34      };
35    };
36
37    reverseProxy = {host, ...}: let
38      cfg = host.settings.services.artalk;
39    in {
40      ${cfg.domain} = {
41        port = cfg.port;
42      };
43    };
44
45    nixos = {host, ...}: let
46      cfg = host.settings.services.artalk;
47    in {
48      services.artalk = {
49        enable = true;
50        allowModify = true;
51        settings = {
52          host = cfg.address;
53          port = cfg.port;
54          debug = false;
55          db = {
56            type = "sqlite";
57            file = "./data/artalk.db";
58            user = "artalk";
59            charset = "utf8mb4";
60          };
61          log = {
62            enabled = true;
63            filename = "./data/artalk.log";
64          };
65        };
66      };
67    };
68  };
69}