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