4: {tv -> krebs}.types
This commit is contained in:
parent
e3b72bb66e
commit
ee52522cc1
7
4lib/krebs/default.nix
Normal file
7
4lib/krebs/default.nix
Normal file
|
@ -0,0 +1,7 @@
|
|||
{ lib, ... }:
|
||||
|
||||
builtins // lib // {
|
||||
|
||||
types = import ./types.nix { inherit lib; };
|
||||
|
||||
}
|
81
4lib/krebs/types.nix
Normal file
81
4lib/krebs/types.nix
Normal file
|
@ -0,0 +1,81 @@
|
|||
{ 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;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
net = submodule ({ config, ... }: {
|
||||
options = {
|
||||
via = mkOption {
|
||||
type = nullOr net;
|
||||
default = null;
|
||||
};
|
||||
addrs = mkOption {
|
||||
type = listOf addr;
|
||||
apply = _: config.addrs4 ++ config.addrs6;
|
||||
};
|
||||
addrs4 = mkOption {
|
||||
type = listOf addr4;
|
||||
default = [];
|
||||
};
|
||||
addrs6 = mkOption {
|
||||
type = listOf addr6;
|
||||
default = [];
|
||||
};
|
||||
aliases = mkOption {
|
||||
# TODO nonEmptyListOf hostname
|
||||
type = listOf hostname;
|
||||
};
|
||||
tinc = mkOption {
|
||||
type = let net-config = config; in submodule ({ config, ... }: {
|
||||
options = {
|
||||
config = mkOption {
|
||||
type = str;
|
||||
apply = _: ''
|
||||
${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;
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
positive = mkOptionType {
|
||||
name = "positive integer";
|
||||
check = x: isInt x && x > 0;
|
||||
merge = mergeOneOption;
|
||||
};
|
||||
|
||||
# TODO
|
||||
addr = str;
|
||||
addr4 = str;
|
||||
addr6 = str;
|
||||
hostname = str;
|
||||
label = str;
|
||||
}
|
|
@ -1,9 +1,12 @@
|
|||
{ lib, pkgs, ... }:
|
||||
|
||||
with builtins;
|
||||
with lib;
|
||||
let
|
||||
krebs = import ../../4lib/krebs { inherit lib; };
|
||||
in
|
||||
|
||||
builtins // lib // rec {
|
||||
with krebs;
|
||||
|
||||
krebs // rec {
|
||||
|
||||
git = import ./git.nix {
|
||||
lib = lib // {
|
||||
|
@ -53,82 +56,4 @@ builtins // lib // rec {
|
|||
if isSafeChar c then c
|
||||
else if c == "\n" then "'\n'"
|
||||
else "\\${c}");
|
||||
|
||||
types = lib.types // (with lib.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;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
net = submodule ({ config, ... }: {
|
||||
options = {
|
||||
via = mkOption {
|
||||
type = nullOr net;
|
||||
default = null;
|
||||
};
|
||||
addrs = mkOption {
|
||||
type = listOf addr;
|
||||
apply = _: config.addrs4 ++ config.addrs6;
|
||||
};
|
||||
addrs4 = mkOption {
|
||||
type = listOf addr4;
|
||||
default = [];
|
||||
};
|
||||
addrs6 = mkOption {
|
||||
type = listOf addr6;
|
||||
default = [];
|
||||
};
|
||||
aliases = mkOption {
|
||||
# TODO nonEmptyListOf hostname
|
||||
type = listOf hostname;
|
||||
};
|
||||
tinc = mkOption {
|
||||
type = let net-config = config; in submodule ({ config, ... }: {
|
||||
options = {
|
||||
config = mkOption {
|
||||
type = str;
|
||||
apply = _: ''
|
||||
${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;
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
positive = mkOptionType {
|
||||
name = "positive integer";
|
||||
check = x: isInt x && x > 0;
|
||||
merge = mergeOneOption;
|
||||
};
|
||||
|
||||
# TODO
|
||||
addr = str;
|
||||
addr4 = str;
|
||||
addr6 = str;
|
||||
hostname = str;
|
||||
label = str;
|
||||
});
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue