nixos/preload: init
[NixPkgs.git] / nixos / modules / services / editors / haste.nix
bloba46415d43634d3ae76b3ceaaf6d7fb8be496f885
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
6   pkg = pkgs.haste-server;
7   cfg = config.services.haste-server;
9   format = pkgs.formats.json {};
12   options.services.haste-server = {
13     enable = mkEnableOption (lib.mdDoc "haste-server");
14     openFirewall = mkEnableOption (lib.mdDoc "firewall passthrough for haste-server");
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   };
25   config = mkIf (cfg.enable) {
26     networking.firewall.allowedTCPPorts = mkIf (cfg.openFirewall) [ cfg.settings.port ];
28     services.haste-server = {
29       settings = {
30         host = mkDefault "::";
31         port = mkDefault 7777;
33         keyLength = mkDefault 10;
34         maxLength = mkDefault 400000;
36         staticMaxAge = mkDefault 86400;
37         recompressStaticAssets = mkDefault false;
39         logging = mkDefault [
40           {
41             level = "verbose";
42             type = "Console";
43             colorize = true;
44           }
45         ];
47         keyGenerator = mkDefault {
48           type = "phonetic";
49         };
51         rateLimits = {
52           categories = {
53             normal = {
54               totalRequests = mkDefault 500;
55               every = mkDefault 60000;
56             };
57           };
58         };
60         storage = mkDefault {
61           type = "file";
62         };
64         documents = {
65           about = mkDefault "${pkg}/share/haste-server/about.md";
66         };
67       };
68     };
70     systemd.services.haste-server = {
71       wantedBy = [ "multi-user.target" ];
72       requires = [ "network.target" ];
73       after = [ "network.target" ];
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       };
83       path = with pkgs; [ pkg coreutils ];
84     };
85   };