nixos/preload: init
[NixPkgs.git] / nixos / modules / services / web-servers / merecat.nix
blobaad93605b71760b20055e258773458b0199a30a9
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
6   cfg = config.services.merecat;
7   format = pkgs.formats.keyValue {
8     mkKeyValue = generators.mkKeyValueDefault {
9       mkValueString = v:
10         # In merecat.conf, booleans are "true" and "false"
11         if builtins.isBool v
12         then if v then "true" else "false"
13         else generators.mkValueStringDefault {} v;
14     } "=";
15   };
16   configFile = format.generate "merecat.conf" cfg.settings;
18 in {
20   options.services.merecat = {
22     enable = mkEnableOption (lib.mdDoc "Merecat HTTP server");
24     settings = mkOption {
25       inherit (format) type;
26       default = { };
27       description = lib.mdDoc ''
28         Merecat configuration. Refer to merecat(8) for details on supported values.
29       '';
30       example = {
31         hostname = "localhost";
32         port = 8080;
33         virtual-host = true;
34         directory = "/srv/www";
35       };
36     };
38   };
40   config = mkIf cfg.enable {
42     systemd.services.merecat = {
43       description = "Merecat HTTP server";
44       after = [ "network.target" ];
45       wantedBy = [ "multi-user.target" ];
46       serviceConfig = {
47         DynamicUser = true;
48         ExecStart = "${pkgs.merecat}/bin/merecat -n -f ${configFile}";
49         AmbientCapabilities = lib.mkIf ((cfg.settings.port or 80) < 1024) [ "CAP_NET_BIND_SERVICE" ];
50       };
51     };
53   };