python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / misc / languagetool.nix
blob20dc9b6b447dd0a5e3884dffda549e30d28b2990
1 { config, lib, options, pkgs, ... }:
3 with lib;
5 let
6   cfg = config.services.languagetool;
7   settingsFormat = pkgs.formats.javaProperties {};
8 in {
9   options.services.languagetool = {
10     enable = mkEnableOption (mdDoc "the LanguageTool server");
12     port = mkOption {
13       type = types.port;
14       default = 8081;
15       example = 8081;
16       description = mdDoc ''
17         Port on which LanguageTool listens.
18       '';
19     };
21     public = mkEnableOption (mdDoc "access from anywhere (rather than just localhost)");
23     allowOrigin = mkOption {
24       type = types.nullOr types.str;
25       default = null;
26       example = "https://my-website.org";
27       description = mdDoc ''
28         Set the Access-Control-Allow-Origin header in the HTTP response,
29         used for direct (non-proxy) JavaScript-based access from browsers.
30         `null` to allow access from all sites.
31       '';
32     };
34     settings = lib.mkOption {
35       type = types.submodule {
36         freeformType = settingsFormat.type;
38         options.cacheSize = mkOption {
39           type = types.ints.unsigned;
40           default = 1000;
41           apply = toString;
42           description = mdDoc "Number of sentences cached.";
43         };
44       };
45       default = {};
46       description = mdDoc ''
47         Configuration file options for LanguageTool, see
48         'languagetool-http-server --help'
49         for supported settings.
50       '';
51     };
52   };
54   config = mkIf cfg.enable {
56     systemd.services.languagetool =  {
57       description = "LanguageTool HTTP server";
58       wantedBy = [ "multi-user.target" ];
59       after = [ "network.target" ];
60       serviceConfig = {
61         DynamicUser = true;
62         User = "languagetool";
63         Group = "languagetool";
64         CapabilityBoundingSet = [ "" ];
65         RestrictNamespaces = [ "" ];
66         SystemCallFilter = [ "@system-service" "~ @privileged" ];
67         ProtectHome = "yes";
68         ExecStart = ''
69           ${pkgs.languagetool}/bin/languagetool-http-server \
70             --port ${toString cfg.port} \
71             ${optionalString cfg.public "--public"} \
72             ${optionalString (cfg.allowOrigin != null) "--allow-origin ${cfg.allowOrigin}"} \
73             "--configuration" ${settingsFormat.generate "languagetool.conf" cfg.settings}
74           '';
75       };
76     };
77   };