{
  liminix,
  ifwait,
  svc,
}:
{ members, primary }:

let
  inherit (liminix.networking) interface;
  inherit (liminix.services) bundle oneshot;
  addif =
    member:
    # how do we get sight of services from here? maybe we need to
    # implement ifwait as a regualr derivation instead of a
    # servicedefinition
    svc.ifwait.build {
      state = "running";
      interface = member;
      dependencies = [
        primary
        member
      ];
      service = oneshot {
        name = "${primary.name}.member.${member.name}";
        up = ''
          ip link set dev $(output ${member} ifname) master $(output ${primary} ifname)
        '';
        down = "ip link set dev $(output ${member} ifname) nomaster";
      };
    };
in
bundle {
  name = "${primary.name}.members";
  contents = map addif members;
}