Merge pull request #4485 from abbradar/parsoid

Add "parsoid" service

+101
+1
nixos/modules/module-list.nix
··· 189 189 ./services/misc/nix-gc.nix 190 190 ./services/misc/nixos-manual.nix 191 191 ./services/misc/nix-ssh-serve.nix 192 + ./services/misc/parsoid.nix 192 193 ./services/misc/phd.nix 193 194 ./services/misc/redmine.nix 194 195 ./services/misc/rippled.nix
+100
nixos/modules/services/misc/parsoid.nix
··· 1 + { config, lib, pkgs, ... }: 2 + 3 + with lib; 4 + 5 + let 6 + 7 + cfg = config.services.parsoid; 8 + 9 + conf = '' 10 + exports.setup = function( parsoidConfig ) { 11 + ${toString (mapAttrsToList (name: str: "parsoidConfig.setInterwiki('${name}', '${str}');") cfg.interwikis)} 12 + 13 + parsoidConfig.serverInterface = "${cfg.interface}"; 14 + parsoidConfig.serverPort = ${toString cfg.port}; 15 + 16 + parsoidConfig.useSelser = true; 17 + 18 + ${cfg.extraConfig} 19 + }; 20 + ''; 21 + 22 + confFile = builtins.toFile "localsettings.js" conf; 23 + 24 + in 25 + { 26 + ##### interface 27 + 28 + options = { 29 + 30 + services.parsoid = { 31 + 32 + enable = mkOption { 33 + type = types.bool; 34 + default = false; 35 + description = '' 36 + Whether to enable Parsoid -- bidirectional 37 + wikitext parser. 38 + ''; 39 + }; 40 + 41 + interwikis = mkOption { 42 + type = types.attrsOf types.str; 43 + example = { localhost = "http://localhost/api.php"; }; 44 + description = '' 45 + Used MediaWiki API endpoints. 46 + ''; 47 + }; 48 + 49 + workers = mkOption { 50 + type = types.int; 51 + default = 2; 52 + description = '' 53 + Number of Parsoid workers. 54 + ''; 55 + }; 56 + 57 + interface = mkOption { 58 + type = types.str; 59 + default = "127.0.0.1"; 60 + description = '' 61 + Interface to listen on. 62 + ''; 63 + }; 64 + 65 + port = mkOption { 66 + type = types.int; 67 + default = 8000; 68 + description = '' 69 + Port to listen on. 70 + ''; 71 + }; 72 + 73 + extraConfig = mkOption { 74 + type = types.lines; 75 + default = ""; 76 + description = '' 77 + Extra configuration to add to parsoid configuration. 78 + ''; 79 + }; 80 + 81 + }; 82 + 83 + }; 84 + 85 + ##### implementation 86 + 87 + config = mkIf cfg.enable { 88 + 89 + systemd.services.parsoid = { 90 + description = "Bidirectional wikitext parser"; 91 + wantedBy = [ "multi-user.target" ]; 92 + after = [ "network.target" ]; 93 + serviceConfig = { 94 + ExecStart = "${pkgs.nodePackages.parsoid}/lib/node_modules/parsoid/api/server.js -c ${confFile} -n ${toString cfg.workers}"; 95 + }; 96 + }; 97 + 98 + }; 99 + 100 + }