{ config, pkgs, lib, ... }: with builtins // lib; let devices = import ../../data/devices.nix; hardware = mkOption { type = types.strMatching ''^kobo[0-9]+$''; }; deviceID = mkOption { type = types.strMatching ''^00000000-0000-0000-0000-000000000[0-9][0-9][0-9]$''; }; deviceInfo = types.submodule { options = { inherit hardware deviceID; }; }; in { options = { _allDevices = mkOption { default = devices; readOnly = true; internal = true; type = types.attrsOf deviceInfo; }; device = { name = mkOption { type = types.enum (attrNames devices); }; affiliate = mkOption { type = types.enum (import ../../data/affiliates.nix); default = "kobo"; }; hardware = hardware // { default = config._allDevices.${config.device.name}.hardware; }; deviceID = deviceID // { default = config._allDevices.${config.device.name}.deviceID; }; serialNumber = mkOption { type = types.str; default = "N0"; }; }; }; }