main
 1{lib, ...}: {
 2  den.aspects.services.artalk = {
 3    settings = {
 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        parentDirectory = {
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 = {
45      host,
46      pkgs,
47      ...
48    }: let
49      cfg = host.settings.services.artalk;
50    in {
51      services.artalk = {
52        enable = true;
53        package = pkgs.nur.repos.hpcesia.artalk;
54        allowModify = true;
55        settings = {
56          host = cfg.address;
57          port = cfg.port;
58          debug = false;
59          db = {
60            type = "sqlite";
61            file = "./data/artalk.db";
62            user = "artalk";
63            charset = "utf8mb4";
64          };
65          log = {
66            enabled = true;
67            filename = "./data/artalk.log";
68          };
69        };
70      };
71    };
72  };
73}