Remove n0emis as direct maintainer (#365023)
[NixPkgs.git] / nixos / modules / services / networking / epmd.nix
blobd1794e8c2e26a6604a9247792e573885936bf593
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
7 let
8   cfg = config.services.epmd;
9 in
11   ###### interface
12   options.services.epmd = {
13     enable = lib.mkOption {
14       type = lib.types.bool;
15       default = false;
16       description = ''
17         Whether to enable socket activation for Erlang Port Mapper Daemon (epmd),
18         which acts as a name server on all hosts involved in distributed
19         Erlang computations.
20       '';
21     };
22     package = lib.mkPackageOption pkgs "erlang" { };
23     listenStream = lib.mkOption {
24       type = lib.types.str;
25       default = "[::]:4369";
26       description = ''
27         the listenStream used by the systemd socket.
28         see https://www.freedesktop.org/software/systemd/man/systemd.socket.html#ListenStream= for more information.
29         use this to change the port epmd will run on.
30         if not defined, epmd will use "[::]:4369"
31       '';
32     };
33   };
35   ###### implementation
36   config = lib.mkIf cfg.enable {
37     assertions = [
38       {
39         assertion = cfg.listenStream == "[::]:4369" -> config.networking.enableIPv6;
40         message = "epmd listens by default on ipv6, enable ipv6 or change config.services.epmd.listenStream";
41       }
42     ];
43     systemd.sockets.epmd = rec {
44       description = "Erlang Port Mapper Daemon Activation Socket";
45       wantedBy = [ "sockets.target" ];
46       before = wantedBy;
47       socketConfig = {
48         ListenStream = cfg.listenStream;
49         Accept = "false";
50       };
51     };
53     systemd.services.epmd = {
54       description = "Erlang Port Mapper Daemon";
55       after = [ "network.target" ];
56       requires = [ "epmd.socket" ];
58       serviceConfig = {
59         DynamicUser = true;
60         ExecStart = "${cfg.package}/bin/epmd -systemd";
61         Type = "notify";
62       };
63     };
64   };
66   meta.maintainers = lib.teams.beam.members;