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, ... }:
|
{ lib, pkgs, ... }:
|
||||||
|
|
||||||
with builtins;
|
let
|
||||||
with lib;
|
krebs = import ../../4lib/krebs { inherit lib; };
|
||||||
|
in
|
||||||
|
|
||||||
builtins // lib // rec {
|
with krebs;
|
||||||
|
|
||||||
|
krebs // rec {
|
||||||
|
|
||||||
git = import ./git.nix {
|
git = import ./git.nix {
|
||||||
lib = lib // {
|
lib = lib // {
|
||||||
|
@ -53,82 +56,4 @@ builtins // lib // rec {
|
||||||
if isSafeChar c then c
|
if isSafeChar c then c
|
||||||
else if c == "\n" then "'\n'"
|
else if c == "\n" then "'\n'"
|
||||||
else "\\${c}");
|
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