{ lib, config, ... }: let pathType = lib.types.submodule { options = { locations = lib.mkOption { type = lib.types.listOf lib.types.str; }; }; }; in { options = { map.paths = lib.mkOption { type = lib.types.listOf pathType; }; }; config = { map.paths = builtins.map ( user: { locations = [ user.departure.location user.arrival.location ]; }) (lib.filter ( user: user.departure.location != null && user.arrival.location != null ) (lib.attrValues config.users)); requestParams = let attrForLocation = loc: "$(${config.scripts.geocode}/bin/geocode ${lib.escapeShellArg loc})"; paramForPath = path: let attributes = builtins.map attrForLocation path.locations; in ''path="${lib.concatStringsSep "|" attributes}"''; in builtins.map paramForPath config.map.paths; }; }