about summary refs log tree commit diff
path: root/pkgs/taalo-build/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/taalo-build/default.nix')
-rw-r--r--pkgs/taalo-build/default.nix26
1 files changed, 19 insertions, 7 deletions
diff --git a/pkgs/taalo-build/default.nix b/pkgs/taalo-build/default.nix
index d9ff8976..700dfd1c 100644
--- a/pkgs/taalo-build/default.nix
+++ b/pkgs/taalo-build/default.nix
@@ -1,19 +1,31 @@
-{ stdenv, lib, runCommand, nixUnstable }:
+{ stdenv, lib, runCommand, coreutils, nixUnstable }:
 
 let
   nixRemote = "ssh-ng://nix-remote-build@taalo.headcounter.org?compress=true";
+  remoteEsc = lib.escapeShellArg nixRemote;
+  mkNix = cmd: lib.escapeShellArg "${nixUnstable}/bin/${cmd}";
 
-  mkScript = cmd: lib.escapeShellArg ''
-    #!${stdenv.shell}
-    export NIX_REMOTE=${lib.escapeShellArg nixRemote}
-    exec ${lib.escapeShellArg nixUnstable}/bin/${cmd} "$@"
+  errorOnly = cmd:
+    "if ! outerr=\"$(${cmd} 2>&1)\"; then echo \"$outerr\" >&2; exit 1; fi";
+
+  remoteRealize = pre: arg: ''
+    ${errorOnly "${mkNix "nix"} copy -s --quiet --to ${remoteEsc} ${arg}"}
+    NIX_REMOTE=${remoteEsc} ${pre}${mkNix "nix-store"} -r ${arg}
   '';
 
+  emitScript = content:
+    "echo -n ${lib.escapeShellArg "#!${stdenv.shell}\nset -e\n${content}"}";
+
 in runCommand "taalo-build" {} ''
   mkdir -p "$out/bin"
 
-  echo -n ${mkScript "nix-build"} > "$out/bin/taalo-build"
-  echo -n ${mkScript "nix-store -r"} > "$out/bin/taalo-realize"
+  ${emitScript (''
+    gctmp="$(${lib.escapeShellArg "${coreutils}/bin/mktemp"} -d)"
+    trap 'rm -rf "$gctmp"' EXIT
+    drv="$(${mkNix "nix-instantiate"} --add-root "$gctmp/drv" --indirect "$@")"
+  '' + remoteRealize "" "\"$drv\"")} > "$out/bin/taalo-build"
+
+  ${emitScript (remoteRealize "exec " "\"$@\"")} > "$out/bin/taalo-realize"
 
   chmod +x "$out"/bin/taalo-{build,realize}
 ''