diff --git a/system/options.nix b/system/options.nix index a2952b4a325..912a6de6b4b 100644 --- a/system/options.nix +++ b/system/options.nix @@ -967,18 +967,6 @@ in }; - portmap = { - - enable = mkOption { - default = false; - description = '' - Whether to enable `portmap', an ONC RPC directory service - notably used by NFS and NIS, and which can be queried - using the rpcinfo(1) command. - ''; - }; - }; - avahi = { enable = mkOption { @@ -3081,5 +3069,6 @@ root ALL=(ALL) SETENV: ALL (import ../upstart-jobs/rogue.nix) (import ../upstart-jobs/guest-users.nix) (import ../upstart-jobs/pulseaudio.nix) + (import ../upstart-jobs/portmap.nix) ]; } diff --git a/upstart-jobs/default.nix b/upstart-jobs/default.nix index f804240a50b..fa92cd57c8f 100644 --- a/upstart-jobs/default.nix +++ b/upstart-jobs/default.nix @@ -220,12 +220,6 @@ let servers = config.services.ntp.servers; }) - # portmap daemon. - ++ optional config.services.portmap.enable - (import ../upstart-jobs/portmap.nix { - inherit (pkgs) makePortmap; - }) - # Avahi daemon. ++ optional config.services.avahi.enable (import ../upstart-jobs/avahi-daemon.nix { diff --git a/upstart-jobs/portmap.nix b/upstart-jobs/portmap.nix index 18ff06dc1af..9cb96b08b0d 100644 --- a/upstart-jobs/portmap.nix +++ b/upstart-jobs/portmap.nix @@ -1,35 +1,68 @@ -{ makePortmap }: +{pkgs, config, ...}: + +###### interface +let + inherit (pkgs.lib) mkOption mkIf; + inherit (pkgs) makePortmap; + + uid = (import ../system/ids.nix).uids.portmap; + gid = (import ../system/ids.nix).gids.portmap; + + options = { + services = { + portmap = { + + enable = mkOption { + default = false; + description = '' + Whether to enable `portmap', an ONC RPC directory service + notably used by NFS and NIS, and which can be queried + using the rpcinfo(1) command. + ''; + }; + + }; + }; + }; -let uid = (import ../system/ids.nix).uids.portmap; - gid = (import ../system/ids.nix).gids.portmap; in -{ - name = "portmap"; - - users = [ - { name = "portmap"; - inherit uid; - description = "portmap daemon user"; - home = "/var/empty"; - } + +###### implementation +mkIf config.services.portmap.enable { + require = [ + options ]; - - groups = [ - { name = "portmap"; - inherit gid; - } - ]; - - job = - let portmap = makePortmap { daemonUID = uid; daemonGID = gid; }; - in - '' -description "ONC RPC portmap" - -start on network-interfaces/started -stop on network-interfaces/stop - -respawn ${portmap}/sbin/portmap -''; + users = { + extraUsers = [ + { name = "portmap"; + inherit uid; + description = "portmap daemon user"; + home = "/var/empty"; + } + ]; + + extraGroups = [ + { name = "portmap"; + inherit gid; + } + ]; + }; + + services = { + extraJobs = [{ + name = "portmap"; + + job = + let portmap = makePortmap { daemonUID = uid; daemonGID = gid; }; + in '' + description "ONC RPC portmap" + + start on network-interfaces/started + stop on network-interfaces/stop + + respawn ${portmap}/sbin/portmap + ''; + }]; + }; }