at 21.11-pre 1.4 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 cfg = config.services.epmd; 7 8in 9 10{ 11 ###### interface 12 options.services.epmd = { 13 enable = mkOption { 14 type = 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 = mkOption { 23 type = types.package; 24 default = pkgs.erlang; 25 description = '' 26 The Erlang package to use to get epmd binary. That way you can re-use 27 an Erlang runtime that is already installed for other purposes. 28 ''; 29 }; 30 }; 31 32 ###### implementation 33 config = mkIf cfg.enable { 34 systemd.sockets.epmd = rec { 35 description = "Erlang Port Mapper Daemon Activation Socket"; 36 wantedBy = [ "sockets.target" ]; 37 before = wantedBy; 38 socketConfig = { 39 ListenStream = "4369"; 40 Accept = "false"; 41 }; 42 }; 43 44 systemd.services.epmd = { 45 description = "Erlang Port Mapper Daemon"; 46 after = [ "network.target" ]; 47 requires = [ "epmd.socket" ]; 48 49 serviceConfig = { 50 DynamicUser = true; 51 ExecStart = "${cfg.package}/bin/epmd -systemd"; 52 Type = "notify"; 53 }; 54 }; 55 }; 56 57 meta.maintainers = teams.beam.members; 58}