diff options
Diffstat (limited to 'corepkgs/nar.nix')
-rw-r--r-- | corepkgs/nar.nix | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/corepkgs/nar.nix b/corepkgs/nar.nix new file mode 100644 index 000000000000..04be17fb0ce2 --- /dev/null +++ b/corepkgs/nar.nix @@ -0,0 +1,49 @@ +with import <nix/config.nix>; + +let + + builder = builtins.toFile "nar.sh" + '' + export PATH=${nixBinDir}:${coreutils} + + if [ $compressionType = xz ]; then + ext=.xz + compressor="| ${xz} -7" + elif [ $compressionType = bzip2 ]; then + ext=.bz2 + compressor="| ${bzip2}" + else + ext= + compressor= + fi + + echo "packing ‘$storePath’..." + mkdir $out + dst=$out/tmp.nar$ext + + set -o pipefail + eval "nix-store --dump \"$storePath\" $compressor > $dst" + + hash=$(nix-hash --flat --type $hashAlgo --base32 $dst) + echo -n $hash > $out/nar-compressed-hash + + mv $dst $out/$hash.nar$ext + ''; + +in + +{ storePath, hashAlgo, compressionType }: + +derivation { + name = "nar"; + system = builtins.currentSystem; + builder = shell; + args = [ "-e" builder ]; + inherit storePath hashAlgo compressionType; + + # Don't build in a chroot because Nix's dependencies may not be there. + __noChroot = true; + + # Remote machines may not have ${nixBinDir} or ${coreutils} in the same prefixes + preferLocalBuild = true; +} |