{ liminix , ifwait , serviceFns , lib }: {interface, family, address, prefixLength} : let inherit (liminix.services) oneshot; # rather depending on the assumption that nobody will # ever add two addresses which are the same but with different # prefixes, or the same but different protocols name = "${interface.name}.a.${address}"; up = '' . ${serviceFns} dev=$(output ${interface} ifname) ip address add ${address}/${toString prefixLength} dev $dev (in_outputs ${name} echo ${address} > address echo ${toString prefixLength} > prefix-length echo ${family} > family echo $dev > ifname ) ''; in oneshot { inherit name up; down = "true"; # this has been broken for ~ ages dependencies = [ interface ]; }