summaryrefslogtreecommitdiffstats
path: root/4lib
diff options
context:
space:
mode:
Diffstat (limited to '4lib')
-rw-r--r--4lib/krebs/default.nix33
-rw-r--r--4lib/krebs/types.nix104
-rw-r--r--4lib/tv/default.nix94
3 files changed, 143 insertions, 88 deletions
diff --git a/4lib/krebs/default.nix b/4lib/krebs/default.nix
new file mode 100644
index 0000000..0c42a5d
--- /dev/null
+++ b/4lib/krebs/default.nix
@@ -0,0 +1,33 @@
+{ lib, ... }:
+
+with builtins;
+with lib;
+
+builtins // lib // rec {
+
+ addName = name: set:
+ set // { inherit name; };
+
+ addNames = mapAttrs addName;
+
+ types = import ./types.nix { inherit lib; };
+
+
+ # listset k v = set k [v]
+
+ # listset-insert : k -> v -> listset k v -> listset k v
+ listset-insert = name: value: set:
+ set // { ${name} = set.${name} or [] ++ [value]; };
+
+ # tree k v = set k (either v (tree k v))
+
+ # tree-get : [k] -> tree k v -> v
+ tree-get = path: x:
+ let
+ y = x.${last path};
+ in
+ if typeOf y != "set"
+ then y
+ else tree-get (init path) y;
+
+}
diff --git a/4lib/krebs/types.nix b/4lib/krebs/types.nix
new file mode 100644
index 0000000..3d3d75a
--- /dev/null
+++ b/4lib/krebs/types.nix
@@ -0,0 +1,104 @@
+{ 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;
+ };
+ 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
+ '';
+ };
+ };
+ };
+
+ 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;
+ };
+
+ user = submodule {
+ options = {
+ mail = mkOption {
+ type = str; # TODO retiolum mail address
+ };
+ name = mkOption {
+ type = str; # TODO
+ };
+ pubkey = mkOption {
+ type = str;
+ };
+ };
+ };
+
+ # TODO
+ addr = str;
+ addr4 = str;
+ addr6 = str;
+ hostname = str;
+ label = str;
+}
diff --git a/4lib/tv/default.nix b/4lib/tv/default.nix
index 092a962..16888c2 100644
--- a/4lib/tv/default.nix
+++ b/4lib/tv/default.nix
@@ -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 // {
@@ -12,16 +15,9 @@ builtins // lib // rec {
inherit pkgs;
};
- addName = name: set:
- set // { inherit name; };
-
- addNames = mapAttrs addName;
-
-
# "7.4.335" -> "74"
majmin = with lib; x : concatStrings (take 2 (splitString "." x));
-
concat = xs :
if xs == []
then ""
@@ -53,82 +49,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;
- });
-
}