50 lines
1.2 KiB
Nix
50 lines
1.2 KiB
Nix
{ lib, ... }:
|
|
let
|
|
inherit (lib) singleton;
|
|
inherit (lib.strings) splitString;
|
|
inherit (builtins) length concatStringsSep tail;
|
|
in
|
|
rec {
|
|
# Helpers
|
|
splitDomain = domain: splitString "." domain;
|
|
shortenList =
|
|
count: list:
|
|
let
|
|
len = length list;
|
|
in
|
|
if len <= count then list else (shortenList count (tail list));
|
|
|
|
# Modules
|
|
mkAttrOption = lib.mkOption {
|
|
type = lib.types.attrs;
|
|
default = { };
|
|
};
|
|
mkIntOption =
|
|
default:
|
|
lib.mkOption {
|
|
type = lib.types.int;
|
|
inherit default;
|
|
};
|
|
mkStrOption = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "";
|
|
};
|
|
mkPortOption =
|
|
port:
|
|
lib.mkOption {
|
|
type = lib.types.port;
|
|
default = port;
|
|
};
|
|
mkPathOption =
|
|
path:
|
|
lib.mkOption {
|
|
type = lib.types.path;
|
|
default = path;
|
|
};
|
|
|
|
# Domains
|
|
isRootDomain = domain: length (splitDomain domain) <= 2;
|
|
mkRootDomain = domain: concatStringsSep "." (shortenList 2 (splitDomain domain));
|
|
mkWildcardDomain = rootDomain: concatStringsSep "." ((singleton "*") ++ (splitDomain rootDomain));
|
|
mkHost = domain: if isRootDomain domain then domain else mkWildcardDomain (mkRootDomain domain);
|
|
}
|