server-conf/mikrotik.nix
2024-05-01 10:40:26 +02:00

55 lines
1.2 KiB
Nix

{
mikrotik-config ? ./router.nix,
pkgs,
inputs,
system,
}:
with pkgs;
with lib;
with builtins;
let
rtr = (import mikrotik-config);
formatValue =
key: value:
if key == "comment" then
''${key}="${value}"''
else if key == "no_label" then
formatValue null value
#''${key}="${value}"''
else if isAttrs value && key != null then
concatStringsSep " " ([ "${key}" ] ++ (mapAttrsToList (k: v: formatValue k v) value))
else if isAttrs value then
concatStringsSep " " (mapAttrsToList (k: v: formatValue k v) value)
else
"${key}=${value}";
formatSection =
name: opts:
[ "${name}" ]
++ (
if isAttrs opts then
(mapAttrsToList (k: v: "set ${formatValue k v}") opts)
else
(map (x: "add ${formatValue null x}") opts)
);
in
rec {
mikrotik-router = stdenv.mkDerivation rec {
version = "0.0.1";
name = "mikrotik-router-${version}";
src = builtins.toFile "router-config.rsc" (
concatStringsSep "\n" (flatten (mapAttrsToList (key: values: formatSection key values) rtr))
);
builder = builtins.toFile "builder.sh" ''
source $stdenv/setup
mkdir $out
install $src $out/router-config.rsc
'';
};
}