45 lines
1,017 B
Nix
45 lines
1,017 B
Nix
|
{ 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;
|
||
|
};
|
||
|
}
|