at 25.11-pre 3.1 kB view raw
1{ 2 config, 3 lib, 4 pkgs, 5 ... 6}: 7let 8 cfg = config.services.languagetool; 9 settingsFormat = pkgs.formats.javaProperties { }; 10in 11{ 12 options.services.languagetool = { 13 enable = lib.mkEnableOption "the LanguageTool server, a multilingual spelling, style, and grammar checker that helps correct or paraphrase texts"; 14 15 package = lib.mkPackageOption pkgs "languagetool" { }; 16 17 port = lib.mkOption { 18 type = lib.types.port; 19 default = 8081; 20 example = 8081; 21 description = '' 22 Port on which LanguageTool listens. 23 ''; 24 }; 25 26 public = lib.mkEnableOption "access from anywhere (rather than just localhost)"; 27 28 allowOrigin = lib.mkOption { 29 type = lib.types.nullOr lib.types.str; 30 default = null; 31 example = "https://my-website.org"; 32 description = '' 33 Set the Access-Control-Allow-Origin header in the HTTP response, 34 used for direct (non-proxy) JavaScript-based access from browsers. 35 `"*"` to allow access from all sites. 36 ''; 37 }; 38 39 settings = lib.mkOption { 40 type = lib.types.submodule { 41 freeformType = settingsFormat.type; 42 43 options.cacheSize = lib.mkOption { 44 type = lib.types.ints.unsigned; 45 default = 1000; 46 apply = toString; 47 description = "Number of sentences cached."; 48 }; 49 }; 50 default = { }; 51 description = '' 52 Configuration file options for LanguageTool, see 53 'languagetool-http-server --help' 54 for supported settings. 55 ''; 56 }; 57 58 jrePackage = lib.mkPackageOption pkgs "jre" { }; 59 60 jvmOptions = lib.mkOption { 61 description = '' 62 Extra command line options for the JVM running languagetool. 63 More information can be found here: <https://docs.oracle.com/en/java/javase/19/docs/specs/man/java.html#standard-options-for-java> 64 ''; 65 default = [ ]; 66 type = lib.types.listOf lib.types.str; 67 example = [ 68 "-Xmx512m" 69 ]; 70 }; 71 }; 72 73 config = lib.mkIf cfg.enable { 74 75 systemd.services.languagetool = { 76 description = "LanguageTool HTTP server"; 77 wantedBy = [ "multi-user.target" ]; 78 after = [ "network.target" ]; 79 serviceConfig = { 80 DynamicUser = true; 81 User = "languagetool"; 82 Group = "languagetool"; 83 CapabilityBoundingSet = [ "" ]; 84 RestrictNamespaces = [ "" ]; 85 SystemCallFilter = [ 86 "@system-service" 87 "~ @privileged" 88 ]; 89 ProtectHome = "yes"; 90 Restart = "on-failure"; 91 ExecStart = '' 92 ${cfg.jrePackage}/bin/java \ 93 -cp ${cfg.package}/share/languagetool-server.jar \ 94 ${toString cfg.jvmOptions} \ 95 org.languagetool.server.HTTPServer \ 96 --port ${toString cfg.port} \ 97 ${lib.optionalString cfg.public "--public"} \ 98 ${lib.optionalString (cfg.allowOrigin != null) "--allow-origin ${cfg.allowOrigin}"} \ 99 "--config" ${settingsFormat.generate "languagetool.conf" cfg.settings} 100 ''; 101 }; 102 }; 103 }; 104}