at 23.11-pre 2.1 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 pkg = pkgs.haste-server; 7 cfg = config.services.haste-server; 8 9 format = pkgs.formats.json {}; 10in 11{ 12 options.services.haste-server = { 13 enable = mkEnableOption (lib.mdDoc "haste-server"); 14 openFirewall = mkEnableOption (lib.mdDoc "firewall passthrough for haste-server"); 15 16 settings = mkOption { 17 description = lib.mdDoc '' 18 Configuration for haste-server. 19 For documentation see [project readme](https://github.com/toptal/haste-server#settings) 20 ''; 21 type = format.type; 22 }; 23 }; 24 25 config = mkIf (cfg.enable) { 26 networking.firewall.allowedTCPPorts = mkIf (cfg.openFirewall) [ cfg.settings.port ]; 27 28 services.haste-server = { 29 settings = { 30 host = mkDefault "::"; 31 port = mkDefault 7777; 32 33 keyLength = mkDefault 10; 34 maxLength = mkDefault 400000; 35 36 staticMaxAge = mkDefault 86400; 37 recompressStaticAssets = mkDefault false; 38 39 logging = mkDefault [ 40 { 41 level = "verbose"; 42 type = "Console"; 43 colorize = true; 44 } 45 ]; 46 47 keyGenerator = mkDefault { 48 type = "phonetic"; 49 }; 50 51 rateLimits = { 52 categories = { 53 normal = { 54 totalRequests = mkDefault 500; 55 every = mkDefault 60000; 56 }; 57 }; 58 }; 59 60 storage = mkDefault { 61 type = "file"; 62 }; 63 64 documents = { 65 about = mkDefault "${pkg}/share/haste-server/about.md"; 66 }; 67 }; 68 }; 69 70 systemd.services.haste-server = { 71 wantedBy = [ "multi-user.target" ]; 72 requires = [ "network.target" ]; 73 after = [ "network.target" ]; 74 75 serviceConfig = { 76 User = "haste-server"; 77 DynamicUser = true; 78 StateDirectory = "haste-server"; 79 WorkingDirectory = "/var/lib/haste-server"; 80 ExecStart = "${pkg}/bin/haste-server ${format.generate "config.json" cfg.settings}"; 81 }; 82 83 path = with pkgs; [ pkg coreutils ]; 84 }; 85 }; 86}