lol

nixos/haste-server: add

+87
+1
nixos/modules/module-list.nix
··· 401 401 ./services/display-managers/greetd.nix 402 402 ./services/editors/emacs.nix 403 403 ./services/editors/infinoted.nix 404 + ./services/editors/haste.nix 404 405 ./services/finance/odoo.nix 405 406 ./services/games/asf.nix 406 407 ./services/games/crossfire-server.nix
+86
nixos/modules/services/editors/haste.nix
··· 1 + { config, lib, pkgs, ... }: 2 + 3 + with lib; 4 + 5 + let 6 + pkg = pkgs.haste-server; 7 + cfg = config.services.haste-server; 8 + 9 + format = pkgs.formats.json {}; 10 + in 11 + { 12 + options.services.haste-server = { 13 + enable = mkEnableOption "haste-server"; 14 + openFirewall = mkEnableOption "firewall passthrough for haste-server"; 15 + 16 + settings = mkOption { 17 + description = '' 18 + Configuration for haste-server. 19 + For documentation see <link xlink:href="https://github.com/toptal/haste-server#settings">project readme</link> 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 + }