diff --git a/pkgs/liminix-tools/services/builder.sh b/pkgs/liminix-tools/services/builder.sh index 47587c6..7a00b37 100644 --- a/pkgs/liminix-tools/services/builder.sh +++ b/pkgs/liminix-tools/services/builder.sh @@ -1,5 +1,15 @@ source $stdenv/setup mkdir -p $out/${name} + +writepath(){ + mkdir -p $(dirname $1) + echo $2 > $1 +} +if test -n "$propertiesText"; then + mkdir $out/.properties + ( cd $out/.properties; eval "$propertiesText" ) +fi + echo $serviceType > $out/${name}/type mkdir -p $out/${name}/dependencies.d echo $buildInputs > $out/buildInputs diff --git a/pkgs/liminix-tools/services/default.nix b/pkgs/liminix-tools/services/default.nix index 79b4a8f..6e11a32 100644 --- a/pkgs/liminix-tools/services/default.nix +++ b/pkgs/liminix-tools/services/default.nix @@ -8,6 +8,8 @@ let prefix = "/run/services/outputs"; output = service: name: "${prefix}/${service.name}/${name}"; + inherit (lib.attrsets) mapAttrsRecursive collect; + inherit (lib.strings) concatStringsSep; serviceScript = commands: '' #!/bin/sh exec 2>&1 @@ -38,6 +40,7 @@ let buildInputs ? [ ], restart-on-upgrade ? false, controller ? null, + properties ? {} }: stdenvNoCC.mkDerivation { # we use stdenvNoCC to avoid generating derivations with names @@ -56,7 +59,13 @@ let timeout-up timeout-down restart-on-upgrade - ; + ; + propertiesText = + let a = mapAttrsRecursive + (path: value: "writepath ${concatStringsSep "/" path} ${builtins.toString value}\n") + properties; + in collect builtins.isString a; + buildInputs = buildInputs ++ dependencies ++ contents ++ lib.optional (controller != null) controller; inherit controller dependencies contents;