stockholm/krebs/4lib/types.nix

118 lines
2.5 KiB
Nix
Raw Normal View History

2015-07-24 10:23:52 +00:00
{ lib, ... }:
with lib;
with types;
types // rec {
host = submodule {
options = {
name = mkOption {
type = label;
};
dc = mkOption {
type = label;
};
cores = mkOption {
type = positive;
};
nets = mkOption {
type = attrsOf net;
apply = x: assert hasAttr "retiolum" x; x;
};
2015-08-13 10:03:59 +00:00
2015-08-13 20:28:21 +00:00
extraZones = mkOption {
default = {};
# TODO: string is either MX, NS, A or AAAA
type = with types; attrsOf string;
};
2015-07-24 16:36:16 +00:00
secure = mkOption {
type = bool;
default = false;
description = ''
If true, then the host is capable of keeping secret information.
TODO define minimum requirements for secure hosts
'';
};
2015-07-24 10:23:52 +00:00
};
};
net = submodule ({ config, ... }: {
options = {
via = mkOption {
type = nullOr net;
default = null;
};
addrs = mkOption {
type = listOf addr;
default = config.addrs4 ++ config.addrs6;
# TODO only default addrs make sense
2015-07-24 10:23:52 +00:00
};
addrs4 = mkOption {
type = listOf addr4;
default = [];
};
addrs6 = mkOption {
type = listOf addr6;
default = [];
};
aliases = mkOption {
# TODO nonEmptyListOf hostname
type = listOf hostname;
};
tinc = mkOption {
2015-07-27 00:45:03 +00:00
type = let net-config = config; in nullOr (submodule ({ config, ... }: {
2015-07-24 10:23:52 +00:00
options = {
config = mkOption {
type = str;
2015-09-03 23:51:40 +00:00
default = ''
2015-07-24 10:23:52 +00:00
${optionalString (net-config.via != null)
(concatMapStringsSep "\n" (a: "Address = ${a}") net-config.via.addrs)}
${concatMapStringsSep "\n" (a: "Subnet = ${a}") net-config.addrs}
${config.pubkey}
'';
};
pubkey = mkOption {
type = str;
};
};
2015-07-27 00:45:03 +00:00
}));
default = null;
2015-07-24 10:23:52 +00:00
};
};
});
positive = mkOptionType {
name = "positive integer";
check = x: isInt x && x > 0;
merge = mergeOneOption;
};
2015-07-24 18:48:00 +00:00
user = submodule {
options = {
2015-07-24 23:05:14 +00:00
mail = mkOption {
type = str; # TODO retiolum mail address
};
2015-07-24 18:48:00 +00:00
name = mkOption {
type = str; # TODO
};
pubkey = mkOption {
type = str;
};
2015-07-27 13:42:33 +00:00
pubkeys = mkOption {
type = attrsOf str;
default = {};
};
2015-07-24 18:48:00 +00:00
};
};
2015-07-24 10:23:52 +00:00
# TODO
addr = str;
addr4 = str;
addr6 = str;
hostname = str;
label = str;
}