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        parent = {
30          inherit (cfg) user group;
31          mode = "0700";
32        };
33      };
34    };
35
36    reverseProxy = {host, ...}: let
37      cfg = host.settings.services.artalk;
38    in {
39      ${cfg.domain} = {
40        port = cfg.port;
41      };
42    };
43
44    nixos = {host, ...}: let
45      cfg = host.settings.services.artalk;
46    in {
47      services.artalk = {
48        enable = true;
49        allowModify = true;
50        settings = {
51          host = cfg.address;
52          port = cfg.port;
53          debug = false;
54          db = {
55            type = "sqlite";
56            file = "./data/artalk.db";
57            user = "artalk";
58            charset = "utf8mb4";
59          };
60          log = {
61            enabled = true;
62            filename = "./data/artalk.log";
63          };
64        };
65      };
66    };
67  };
68}