at 23.11-pre 1.3 kB view raw
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}