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}