94 lines
2.4 KiB
Nix
94 lines
2.4 KiB
Nix
{lib, ...}: let
|
|
inherit (lib) mkOption types;
|
|
in {
|
|
options = {
|
|
services = mkOption {
|
|
type = types.attrsOf (types.submodule ({name, ...}: {
|
|
options = {
|
|
name = mkOption {
|
|
type = types.str;
|
|
default = name;
|
|
};
|
|
|
|
endpoint = mkOption {
|
|
type = types.submoduleWith {
|
|
modules = [../types/endpoint.nix];
|
|
};
|
|
default = {};
|
|
apply = attrs:
|
|
attrs
|
|
// {
|
|
__toString = self: let
|
|
protocol =
|
|
if self.protocol != null
|
|
then "${self.protocol}://"
|
|
else "";
|
|
|
|
port =
|
|
if self.port != null
|
|
then ":${toString self.port}"
|
|
else "";
|
|
|
|
path =
|
|
if self.path != null
|
|
then "/${self.path}"
|
|
else "";
|
|
|
|
query =
|
|
if self.query != null
|
|
then "?${toString self.query
|
|
|> lib.attrsToList
|
|
|> lib.map ({
|
|
name,
|
|
value,
|
|
}: "${name}=${value}")}"
|
|
else "";
|
|
|
|
hash =
|
|
if self.hash != null
|
|
then "#${toString self.hash
|
|
|> lib.attrsToList
|
|
|> lib.map ({
|
|
name,
|
|
value,
|
|
}: "${name}=${value}")}"
|
|
else "";
|
|
in "${protocol}${self.host}${port}${path}${query}${hash}";
|
|
};
|
|
};
|
|
|
|
# protocol = mkOption {
|
|
# type = types.str;
|
|
# default = "http";
|
|
# };
|
|
|
|
# host = mkOption {
|
|
# type = types.str;
|
|
# default = "[::1]";
|
|
# };
|
|
|
|
# port = mkOption {
|
|
# type = types.port;
|
|
# };
|
|
};
|
|
}));
|
|
default = {};
|
|
};
|
|
|
|
functions = mkOption {
|
|
type = types.attrsOf (types.submodule ({name, ...}: {
|
|
options = {
|
|
name = mkOption {
|
|
type = types.str;
|
|
default = name;
|
|
};
|
|
|
|
body = mkOption {
|
|
type = types.str;
|
|
};
|
|
};
|
|
}));
|
|
default = {};
|
|
};
|
|
};
|
|
}
|