{ liminix, lib, s6-rc-round-robin }: { services, name} : let inherit (liminix.services) oneshot longrun; controlled-services = builtins.map (s: s.overrideAttrs(o: { inherit controller; })) services; controller = let name' = "control-${name}"; in longrun { name = name'; run = '' in_outputs ${name'} exec ${s6-rc-round-robin}/bin/s6-rc-round-robin \ -p ${proxy.name} \ ${lib.concatStringsSep " " (builtins.map (f: f.name) controlled-services)} ''; }; proxy = oneshot rec { inherit name; inherit controller; buildInputs = controlled-services; up = '' echo start proxy ${name} set -x (in_outputs ${name} cp -rv $(output_path ${controller} active)/* . ) ''; }; in proxy