at 23.11-pre 2.3 kB view raw
1{ config, lib, options, pkgs, ... }: 2 3with lib; 4 5let 6 cfg = config.services.languagetool; 7 settingsFormat = pkgs.formats.javaProperties {}; 8in { 9 options.services.languagetool = { 10 enable = mkEnableOption (mdDoc "the LanguageTool server"); 11 12 port = mkOption { 13 type = types.port; 14 default = 8081; 15 example = 8081; 16 description = mdDoc '' 17 Port on which LanguageTool listens. 18 ''; 19 }; 20 21 public = mkEnableOption (mdDoc "access from anywhere (rather than just localhost)"); 22 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 }; 33 34 settings = lib.mkOption { 35 type = types.submodule { 36 freeformType = settingsFormat.type; 37 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 }; 53 54 config = mkIf cfg.enable { 55 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 "--config" ${settingsFormat.generate "languagetool.conf" cfg.settings} 74 ''; 75 }; 76 }; 77 }; 78}