diff --git a/builder.nix b/builder.nix index 04abea2..5faf22d 100644 --- a/builder.nix +++ b/builder.nix @@ -20,13 +20,13 @@ let __builder = if isFunction _builder then _builder funcPkgs else _builder; args = { stdenv = pkgs.stdenvNoCC; } // (if isString __builder - then { builder = __builder; } - else __builder); + then { builder = __builder; } + else __builder); in (args.deriver or args.stdenv.mkDerivation) ({ name = pkgs.lib.strings.sanitizeDerivationName (builtins.elemAt rargs 0); buildCommand = args.builder; passAsFile = [ "buildCommand" ]; preferLocalBuild = true; allowSubstitutes = false; - } // (removeAttrs args [ "builder" "system" "deriver" ])); # myself + } // (removeAttrs args [ "builder" "system" "deriver" "stdenv" ])); # myself in myself builderArgs diff --git a/default.nix b/default.nix index fe31171..7dd53fe 100644 --- a/default.nix +++ b/default.nix @@ -8,8 +8,11 @@ stdenv.mkDerivation { installPhase = '' mkdir -p $out/bin - cp ${./nixredo} $out/bin/nixredo - substituteAllInPlace $out/bin/nixredo - chmod +x $out/bin/nixredo + for f in ${./nixredo} ${./nixredo-deps}; do + _f=$out/bin/nixredo''${f##*-nixredo} + cp $f $_f + substituteAllInPlace $_f + chmod +x $_f + done ''; } diff --git a/nixredo b/nixredo index 59844e3..6581723 100644 --- a/nixredo +++ b/nixredo @@ -1,17 +1,22 @@ #!/bin/sh exec >&2 -[ -n "$NIXREDO_ROOT" ] || { printf "Set NIXREDO_ROOT. Set empty to use global nix store\n"; exit 127; } +[ "${NIXREDO_ROOT-x}" != x ] || { printf "Set NIXREDO_ROOT. Set empty to use global nix store\n"; exit 127; } if [ $# -eq 0 ]; then set -- all; fi if [ -e "$1.nix" ]; then set -e set -- "$1" "$1" "$1.redo.tmp" f=$(realpath "$1.nix") - out=$(nix -vL build ${NIXREDO_ROOT:+--store "$NIXREDO_ROOT"} --option auto-optimise-store true --impure --json --no-link --expr "import @buildernix@ { cwd = \"$PWD/\"; rargs = [ \"$1\" \"$1\" ];} \"$f\"" | @jq@ -r '.[0].outputs.out') + out=$(nix -vL --show-trace build ${NIXREDO_ROOT:+--store "$NIXREDO_ROOT"} \ + --option auto-optimise-store true --option substituters daemon \ + --impure --json --no-link \ + --expr "import @buildernix@ { cwd = \"$PWD/\"; rargs = [ \"$1\" \"$1\" ];} \"$f\"" | + @jq@ -r '.[0].outputs.out') [ -n "$out" ] || exit 127 - rm -rf "$1" - ln "${NIXREDO_ROOT+$NIXREDO_ROOT/}$out" "$3" - chmod +w "$3" - touch "$3" + rm -rf "$3" + ln -s "${NIXREDO_ROOT+$NIXREDO_ROOT}$out" "$3" + # ln "${NIXREDO_ROOT+$NIXREDO_ROOT/}$out" "$3" + # chmod +w "$3" + # touch "$3" mv "$3" "$1" elif [ -e "$1" ]; then : diff --git a/nixredo-deps b/nixredo-deps new file mode 100644 index 0000000..622bc45 --- /dev/null +++ b/nixredo-deps @@ -0,0 +1,7 @@ +#!/bin/sh +exec >&2 +[ "${NIXREDO_ROOT-x}" != x ] || { printf "Set NIXREDO_ROOT. Set empty to use global nix store\n"; exit 127; } + +f=$(realpath "$1") +drv=$(nix-store --store "$NIXREDO_ROOT" -qd "${f#$NIXREDO_ROOT}/nix/store") +nix-store --store "$NIXREDO_ROOT" -qR "${drv#$NIXREDO_ROOT}"