python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / networking / epmd.nix
blob534b80906211f7a1011718d3d93c0eb19e63d093
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
6   cfg = config.services.epmd;
7 in
9   ###### interface
10   options.services.epmd = {
11     enable = mkOption {
12       type = types.bool;
13       default = false;
14       description = lib.mdDoc ''
15         Whether to enable socket activation for Erlang Port Mapper Daemon (epmd),
16         which acts as a name server on all hosts involved in distributed
17         Erlang computations.
18       '';
19     };
20     package = mkOption {
21       type = types.package;
22       default = pkgs.erlang;
23       defaultText = literalExpression "pkgs.erlang";
24       description = lib.mdDoc ''
25         The Erlang package to use to get epmd binary. That way you can re-use
26         an Erlang runtime that is already installed for other purposes.
27       '';
28     };
29     listenStream = mkOption
30       {
31         type = types.str;
32         default = "[::]:4369";
33         description = lib.mdDoc ''
34           the listenStream used by the systemd socket.
35           see https://www.freedesktop.org/software/systemd/man/systemd.socket.html#ListenStream= for more informations.
36           use this to change the port epmd will run on.
37           if not defined, epmd will use "[::]:4369"
38         '';
39       };
40   };
42   ###### implementation
43   config = mkIf cfg.enable {
44     assertions = [{
45       assertion = cfg.listenStream == "[::]:4369" -> config.networking.enableIPv6;
46       message = "epmd listens by default on ipv6, enable ipv6 or change config.services.epmd.listenStream";
47     }];
48     systemd.sockets.epmd = rec {
49       description = "Erlang Port Mapper Daemon Activation Socket";
50       wantedBy = [ "sockets.target" ];
51       before = wantedBy;
52       socketConfig = {
53         ListenStream = cfg.listenStream;
54         Accept = "false";
55       };
56     };
58     systemd.services.epmd = {
59       description = "Erlang Port Mapper Daemon";
60       after = [ "network.target" ];
61       requires = [ "epmd.socket" ];
63       serviceConfig = {
64         DynamicUser = true;
65         ExecStart = "${cfg.package}/bin/epmd -systemd";
66         Type = "notify";
67       };
68     };
69   };
71   meta.maintainers = teams.beam.members;