grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / misc / tiddlywiki.nix
blob7ae657dd862dd8b01176e3db8a4b4809f32f254e
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
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;
13 in {
15   options.services.tiddlywiki = {
17     enable = mkEnableOption "TiddlyWiki nodejs server";
19     listenOptions = mkOption {
20       type = types.attrs;
21       default = {};
22       example = {
23         credentials = "../credentials.csv";
24         readers="(authenticated)";
25         port = 3456;
26       };
27       description = ''
28         Parameters passed to `--listen` command.
29         Refer to <https://tiddlywiki.com/#WebServer>
30         for details on supported values.
31       '';
32     };
33   };
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   };