about summary refs log tree commit diff
path: root/nix/modules/libvirtnix/xml.nix
diff options
context:
space:
mode:
authorEmile <git@emile.space>2025-05-07 21:42:04 +0200
committerEmile <git@emile.space>2025-05-07 21:42:04 +0200
commitd72fee53142fe38b2ddd0a73c76bc80c81951710 (patch)
treeaac9fc9236f64ad042dd4c7e189ed605a2f653a3 /nix/modules/libvirtnix/xml.nix
parent3b9564639c26be02aa8e60fcc5bd05dcafda18f9 (diff)
(corrino) basic libvirtnix setup
Build using

; nix-build test.nix -A config.services.emile.libvirtnix.output.domain --show-trace && cat result | xq

Generates a result symlink to an xml file that is generated from config.nix
Diffstat (limited to 'nix/modules/libvirtnix/xml.nix')
-rw-r--r--nix/modules/libvirtnix/xml.nix45
1 files changed, 45 insertions, 0 deletions
diff --git a/nix/modules/libvirtnix/xml.nix b/nix/modules/libvirtnix/xml.nix
new file mode 100644
index 0000000..134a878
--- /dev/null
+++ b/nix/modules/libvirtnix/xml.nix
@@ -0,0 +1,45 @@
+{ lib, ... }:
+
+# takes a few args and creats a valid xml tag pair out of it
+#
+# testTag = mkTag {
+#   name = "name";
+#   args = [
+#     {
+#       key = "arg1";
+#       val = "arg1val";
+#     }
+#     {
+#       key = "arg2";
+#       val = "arg2val";
+#     }
+#   ];
+#   value = "qwe";
+#   children = [
+#     (mkTag { name = "nested"; args = []; value = "qwe"; children = [];})
+#   ];
+# };
+#
+# <name arg1=arg1val arg2=arg2val>
+#   value
+#   {children}
+# </name>
+{
+  name, # name of the tag to be used, such as `secret`, `description`, ...
+  args ? [ ], # args, [ { key="a"; val="b"; } { key="c"; val="d"; } ]
+  value ? "", # the value to place in the middle
+  children ? [ ], # the child elements
+  closing ? true, # add a closing tag
+}:
+let
+  args_str =
+    " " + lib.strings.concatStrings (lib.strings.intersperse " " (map (x: "${x.key}='${x.val}'") args));
+  child_evaled = lib.strings.concatStrings children;
+
+  cond = condition: value: if condition then value else "";
+
+  closingTag = if closing == true then "</${name}>" else "";
+in
+"<${name}${
+  lib.optionalString (args != [ ]) args_str
+}${cond (closing == false) "/"}>${value}${child_evaled}${lib.optionalString (closing) closingTag}"