1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7let
8
9 cfg = config.services.tiddlywiki;
10 listenParams = lib.concatStrings (
11 lib.mapAttrsToList (n: v: " '${n}=${toString v}' ") cfg.listenOptions
12 );
13 exe = "${pkgs.nodePackages.tiddlywiki}/lib/node_modules/.bin/tiddlywiki";
14 name = "tiddlywiki";
15 dataDir = "/var/lib/" + name;
16
17in
18{
19
20 options.services.tiddlywiki = {
21
22 enable = lib.mkEnableOption "TiddlyWiki nodejs server";
23
24 listenOptions = lib.mkOption {
25 type = lib.types.attrs;
26 default = { };
27 example = {
28 credentials = "../credentials.csv";
29 readers = "(authenticated)";
30 port = 3456;
31 };
32 description = ''
33 Parameters passed to `--listen` command.
34 Refer to <https://tiddlywiki.com/#WebServer>
35 for details on supported values.
36 '';
37 };
38 };
39
40 config = lib.mkIf cfg.enable {
41 systemd = {
42 services.tiddlywiki = {
43 description = "TiddlyWiki nodejs server";
44 after = [ "network.target" ];
45 wantedBy = [ "multi-user.target" ];
46 serviceConfig = {
47 Type = "simple";
48 Restart = "on-failure";
49 DynamicUser = true;
50 StateDirectory = name;
51 ExecStartPre = "-${exe} ${dataDir} --init server";
52 ExecStart = "${exe} ${dataDir} --listen ${listenParams}";
53 };
54 };
55 };
56 };
57}