nixpkgs/pkgs/top-level/dhall-packages.nix
Gabriel Gonzalez 87d5e6fc1a Change idiom for overriding Dhall package version
Before this change, a Dhall package like the Prelude would be
encoded as a record with one field per supported version.  Then
downstream packages would specify which package to override
by selecting a different record field.

The problem with that approach is that it did not provide an
easy way to override a package to a version other than the default
ones supplied by Nixpkgs.  Normally you would use the `.override`
method for this purpose, but the `override` method added by
`buildDhall{Directory,GitHub}Package` is clobbered by the
`override` method added by `callPackage` in
`./pkgs/top-level/dhall-packages.nix`.

The solution is to add a separate `.overridePackage` method which is
essentially the exact same as `.override`, except that it is no
longer clobbered by `callPackage`.  This `.overridePackage` method
allows one to override the arguments supplied to
`buildDhall{Directory,GitHub}Package`, making it easier to specify
package versions outside of the ones supported by Nixpkgs..

This also includes a change to only build one (preferred) version of each
package (instead of multiple supported versions per package), in order to
minimize the maintenance burden for the Dhall package set.
2020-11-11 11:16:04 +01:00

40 lines
1 KiB
Nix

{ lib
, newScope
, overrides ? (self: super: {})
}:
let
packages = self:
let
callPackage = newScope self;
buildDhallPackage =
callPackage ../development/interpreters/dhall/build-dhall-package.nix { };
buildDhallGitHubPackage =
callPackage ../development/interpreters/dhall/build-dhall-github-package.nix { };
buildDhallDirectoryPackage =
callPackage ../development/interpreters/dhall/build-dhall-directory-package.nix { };
in
{ inherit
buildDhallPackage
buildDhallGitHubPackage
buildDhallDirectoryPackage
;
lib = import ../development/dhall-modules/lib.nix { inherit lib; };
dhall-kubernetes =
callPackage ../development/dhall-modules/dhall-kubernetes.nix { };
dhall-packages =
callPackage ../development/dhall-modules/dhall-packages.nix { };
Prelude =
callPackage ../development/dhall-modules/Prelude.nix { };
};
in
lib.fix' (lib.extends overrides packages)