From 599e3c2e8370752f84bd985af5b1d36d304768d5 Mon Sep 17 00:00:00 2001 From: "(cdep)illabout" Date: Mon, 8 Nov 2021 15:39:38 +0900 Subject: [PATCH] dhallPackageToNix: function for turning Nixpkgs Dhall package into Nix code --- pkgs/build-support/dhall/package-to-nix.nix | 36 +++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 38 insertions(+) create mode 100644 pkgs/build-support/dhall/package-to-nix.nix diff --git a/pkgs/build-support/dhall/package-to-nix.nix b/pkgs/build-support/dhall/package-to-nix.nix new file mode 100644 index 000000000000..301501ad49df --- /dev/null +++ b/pkgs/build-support/dhall/package-to-nix.nix @@ -0,0 +1,36 @@ + +# `dhallPackageToNix` is a utility function to take a Nixpkgs Dhall package +# (created with a function like `dhallPackages.buildDhallDirectoryPackage`) +# and read it in as a Nix expression. +# +# This function is similar to `dhallToNix`, but takes a Nixpkgs Dhall package +# as input instead of raw Dhall code. +# +# Note that this uses "import from derivation" (IFD), meaning that Nix will +# perform a build during the evaluation phase if you use this +# `dhallPackageToNix` utility. It is not possible to use `dhallPackageToNix` +# in Nixpkgs, since the Nixpkgs Hydra doesn't allow IFD. + +{ stdenv, dhall-nix }: + +dhallPackage: + let + drv = stdenv.mkDerivation { + name = "dhall-compiled-package.nix"; + + buildCommand = '' + # Dhall requires that the cache is writable, even if it is never written to. + # We copy the cache from the input package to the current directory and + # set the cache as writable. + cp -r "${dhallPackage}/.cache" ./ + export XDG_CACHE_HOME=$PWD/.cache + chmod -R +w ./.cache + + dhall-to-nix <<< "${dhallPackage}/binary.dhall" > $out + ''; + + nativeBuildInputs = [ dhall-nix ]; + }; + + in + import drv diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a4b7c07fc2e3..663c40b25eea 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -301,6 +301,8 @@ with pkgs; crow-translate = libsForQt5.callPackage ../applications/misc/crow-translate { }; + dhallPackageToNix = callPackage ../build-support/dhall/package-to-nix.nix { }; + dhallToNix = callPackage ../build-support/dhall/to-nix.nix { }; deadcode = callPackage ../development/tools/deadcode { };