silx: 2.1.1 -> 2.1.2 (#361612)
[NixPkgs.git] / nixos / modules / services / misc / parsoid.nix
blobbb168c4eca85b39e90d1d5f5c22d35c865cac659
1 { config, lib, pkgs, ... }:
2 let
4   cfg = config.services.parsoid;
6   parsoid = pkgs.nodePackages.parsoid;
8   confTree = {
9     worker_heartbeat_timeout = 300000;
10     logging = { level = "info"; };
11     services = [{
12       module = "lib/index.js";
13       entrypoint = "apiServiceWorker";
14       conf = {
15         mwApis = map (x: if lib.isAttrs x then x else { uri = x; }) cfg.wikis;
16         serverInterface = cfg.interface;
17         serverPort = cfg.port;
18       };
19     }];
20   };
22   confFile = pkgs.writeText "config.yml" (builtins.toJSON (lib.recursiveUpdate confTree cfg.extraConfig));
26   imports = [
27     (lib.mkRemovedOptionModule [ "services" "parsoid" "interwikis" ] "Use services.parsoid.wikis instead")
28   ];
30   ##### interface
32   options = {
34     services.parsoid = {
36       enable = lib.mkOption {
37         type = lib.types.bool;
38         default = false;
39         description = ''
40           Whether to enable Parsoid -- bidirectional
41           wikitext parser.
42         '';
43       };
45       wikis = lib.mkOption {
46         type = lib.types.listOf (lib.types.either lib.types.str lib.types.attrs);
47         example = [ "http://localhost/api.php" ];
48         description = ''
49           Used MediaWiki API endpoints.
50         '';
51       };
53       workers = lib.mkOption {
54         type = lib.types.int;
55         default = 2;
56         description = ''
57           Number of Parsoid workers.
58         '';
59       };
61       interface = lib.mkOption {
62         type = lib.types.str;
63         default = "127.0.0.1";
64         description = ''
65           Interface to listen on.
66         '';
67       };
69       port = lib.mkOption {
70         type = lib.types.port;
71         default = 8000;
72         description = ''
73           Port to listen on.
74         '';
75       };
77       extraConfig = lib.mkOption {
78         type = lib.types.attrs;
79         default = {};
80         description = ''
81           Extra configuration to add to parsoid configuration.
82         '';
83       };
85     };
87   };
89   ##### implementation
91   config = lib.mkIf cfg.enable {
93     systemd.services.parsoid = {
94       description = "Bidirectional wikitext parser";
95       wantedBy = [ "multi-user.target" ];
96       after = [ "network.target" ];
97       serviceConfig = {
98         ExecStart = "${parsoid}/lib/node_modules/parsoid/bin/server.js -c ${confFile} -n ${toString cfg.workers}";
100         DynamicUser = true;
101         User = "parsoid";
102         Group = "parsoid";
104         CapabilityBoundingSet = "";
105         NoNewPrivileges = true;
106         ProtectSystem = "strict";
107         ProtectHome = true;
108         PrivateTmp = true;
109         PrivateDevices = true;
110         ProtectHostname = true;
111         ProtectKernelTunables = true;
112         ProtectKernelModules = true;
113         ProtectControlGroups = true;
114         RestrictAddressFamilies = [ "AF_INET" "AF_INET6" ];
115         RestrictNamespaces = true;
116         LockPersonality = true;
117         #MemoryDenyWriteExecute = true;
118         RestrictRealtime = true;
119         RestrictSUIDSGID = true;
120         RemoveIPC = true;
121       };
122     };
124   };