let lib = import ; net = import ../config/network.nix; networkDevicesValidation = import ../validation/network_devices.nix; devices = networkDevicesValidation.getDevices net; localDevices = networkDevicesValidation.getLocalDevices devices; reservationRecords = lib.concatLists (lib.mapAttrsToList (deviceName: device: if device ? reservation then let reservation = networkDevicesValidation.validateReservationShape deviceName device.reservation; in [ { ip-address = device.ip; hw-address = reservation.hw_address; hostname = reservation.hostname; } ] else [] ) localDevices); ensureUnique = fieldName: values: let uniqueValues = lib.unique values; in if builtins.length uniqueValues != builtins.length values then throw "Duplicate DHCP reservation ${fieldName} found." else null; _uniqueIps = ensureUnique "ip-address" (map (reservation: reservation.ip-address) reservationRecords); _uniqueHwAddresses = ensureUnique "hw-address" (map (reservation: reservation.hw-address) reservationRecords); _uniqueHostnames = ensureUnique "hostname" (map (reservation: reservation.hostname) reservationRecords); in rec { reservations = reservationRecords; }