grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / misc / languagetool.nix
blobc2921ea0f047ad8bfcbf08098f3d155a51a43251
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.languagetool;
4   settingsFormat = pkgs.formats.javaProperties { };
5 in
7   options.services.languagetool = {
8     enable = lib.mkEnableOption "the LanguageTool server, a multilingual spelling, style, and grammar checker that helps correct or paraphrase texts";
10     package = lib.mkPackageOption pkgs "languagetool" { };
12     port = lib.mkOption {
13       type = lib.types.port;
14       default = 8081;
15       example = 8081;
16       description = ''
17         Port on which LanguageTool listens.
18       '';
19     };
21     public = lib.mkEnableOption "access from anywhere (rather than just localhost)";
23     allowOrigin = lib.mkOption {
24       type = lib.types.nullOr lib.types.str;
25       default = null;
26       example = "https://my-website.org";
27       description = ''
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 = lib.types.submodule {
36         freeformType = settingsFormat.type;
38         options.cacheSize = lib.mkOption {
39           type = lib.types.ints.unsigned;
40           default = 1000;
41           apply = toString;
42           description = "Number of sentences cached.";
43         };
44       };
45       default = {};
46       description = ''
47         Configuration file options for LanguageTool, see
48         'languagetool-http-server --help'
49         for supported settings.
50       '';
51     };
53     jrePackage = lib.mkPackageOption pkgs "jre" { };
55     jvmOptions = lib.mkOption {
56       description = ''
57         Extra command line options for the JVM running languagetool.
58         More information can be found here: https://docs.oracle.com/en/java/javase/19/docs/specs/man/java.html#standard-options-for-java
59       '';
60       default = [ ];
61       type = lib.types.listOf lib.types.str;
62       example = [
63         "-Xmx512m"
64       ];
65     };
66   };
68   config = lib.mkIf cfg.enable {
70     systemd.services.languagetool = {
71       description = "LanguageTool HTTP server";
72       wantedBy = [ "multi-user.target" ];
73       after = [ "network.target" ];
74       serviceConfig = {
75         DynamicUser = true;
76         User = "languagetool";
77         Group = "languagetool";
78         CapabilityBoundingSet = [ "" ];
79         RestrictNamespaces = [ "" ];
80         SystemCallFilter = [ "@system-service" "~ @privileged" ];
81         ProtectHome = "yes";
82         Restart = "on-failure";
83         ExecStart = ''
84           ${cfg.jrePackage}/bin/java \
85             -cp ${cfg.package}/share/languagetool-server.jar \
86             ${toString cfg.jvmOptions} \
87             org.languagetool.server.HTTPServer \
88               --port ${toString cfg.port} \
89               ${lib.optionalString cfg.public "--public"} \
90               ${lib.optionalString (cfg.allowOrigin != null) "--allow-origin ${cfg.allowOrigin}"} \
91               "--config" ${settingsFormat.generate "languagetool.conf" cfg.settings}
92         '';
93       };
94     };
95   };