From e57fd11bb4c74ac858184611240f295ab7043d52 Mon Sep 17 00:00:00 2001 From: Gabriel Gonzalez Date: Tue, 3 Jul 2018 09:25:15 -0700 Subject: [PATCH 1/5] Add `pkgs.haskell.lib.readDirectory` utility This adds a `readDirectory` utility that can be used to "slurp" a directory full of `cabal2nix`-generated files and transform them into a Haskell package override set. The main use of this is so that users don't have to write: ``` { overrides = self: super: { foo = self.callPackage ./path/to/foo.nix { }; bar = self.callPackage ./path/to/bar.nix { }; ... }; } ``` Instead, they can write: ``` { overrides = pkgs.haskell.lib.readDirectory ./path/to; } ``` This is a an alternative to `packageSourceOverrides` which primarily addresses the following use cases: * The desired package is not yet available in `all-cabal-hashes` (perhaps the user is pinned to an older revision of `nixpkgs`) * The default `cabal2nix` invocation used by `packageSourceOverrides` does not use the desired `cabal2nix` flags * The user wants to avoid the use of import-from-derivation --- pkgs/development/haskell-modules/lib.nix | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/pkgs/development/haskell-modules/lib.nix b/pkgs/development/haskell-modules/lib.nix index fb1302f60ea..8a5ed7d4e94 100644 --- a/pkgs/development/haskell-modules/lib.nix +++ b/pkgs/development/haskell-modules/lib.nix @@ -382,4 +382,23 @@ rec { allPkgconfigDepends; }; + # Utility to convert a directory full of `cabal2nix`-generated files into a + # package override set + # + # readDirectory : Directory -> HaskellPackageOverrideSet + readDirectory = + directory: + + self: super: + let + haskellPaths = builtins.attrNames (builtins.readDir directory); + + toKeyVal = file: { + name = builtins.replaceStrings [ ".nix" ] [ "" ] file; + + value = self.callPackage (directory + "/${file}") { }; + }; + + in + builtins.listToAttrs (map toKeyVal haskellPaths); } From 8dae83157b42e79aac8f45cfbf0c27c4f67b5ec9 Mon Sep 17 00:00:00 2001 From: Gabriel Gonzalez Date: Tue, 3 Jul 2018 17:44:19 -0700 Subject: [PATCH 2/5] Change `readDirectory` to accept an attribute set ... as suggested by @roberth --- pkgs/development/haskell-modules/lib.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/haskell-modules/lib.nix b/pkgs/development/haskell-modules/lib.nix index 8a5ed7d4e94..f5713b6cd20 100644 --- a/pkgs/development/haskell-modules/lib.nix +++ b/pkgs/development/haskell-modules/lib.nix @@ -387,7 +387,7 @@ rec { # # readDirectory : Directory -> HaskellPackageOverrideSet readDirectory = - directory: + { directory }: self: super: let From 2c55c157bda5c28d0a430bd37d01989e7e151e27 Mon Sep 17 00:00:00 2001 From: Gabriel Gonzalez Date: Wed, 4 Jul 2018 08:22:20 -0700 Subject: [PATCH 3/5] Rename `readDirectory` to `packagesFromDirectory` ... as suggested by @roberth --- pkgs/development/haskell-modules/lib.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/haskell-modules/lib.nix b/pkgs/development/haskell-modules/lib.nix index f5713b6cd20..289fa4b7736 100644 --- a/pkgs/development/haskell-modules/lib.nix +++ b/pkgs/development/haskell-modules/lib.nix @@ -385,8 +385,8 @@ rec { # Utility to convert a directory full of `cabal2nix`-generated files into a # package override set # - # readDirectory : Directory -> HaskellPackageOverrideSet - readDirectory = + # packagesFromDirectory : Directory -> HaskellPackageOverrideSet + packagesFromDirectory = { directory }: self: super: From 637fcd4c5b28e2c3459e20398ed9310c9ff3fbc0 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Fri, 6 Jul 2018 13:03:56 +0200 Subject: [PATCH 4/5] pkgs.haskell.lib.packagesFromDirectory: forward compatibility Add `...` for less painful downgrades in the future --- pkgs/development/haskell-modules/lib.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/haskell-modules/lib.nix b/pkgs/development/haskell-modules/lib.nix index 289fa4b7736..b730ef9b2ed 100644 --- a/pkgs/development/haskell-modules/lib.nix +++ b/pkgs/development/haskell-modules/lib.nix @@ -387,7 +387,7 @@ rec { # # packagesFromDirectory : Directory -> HaskellPackageOverrideSet packagesFromDirectory = - { directory }: + { directory, ... }: self: super: let From 05ca67107a42c3b5f545337823e3829f1dbb1deb Mon Sep 17 00:00:00 2001 From: Gabriel Gonzalez Date: Sat, 7 Jul 2018 15:23:03 -0700 Subject: [PATCH 5/5] Fix type signature --- pkgs/development/haskell-modules/lib.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/haskell-modules/lib.nix b/pkgs/development/haskell-modules/lib.nix index b730ef9b2ed..c9dc7254800 100644 --- a/pkgs/development/haskell-modules/lib.nix +++ b/pkgs/development/haskell-modules/lib.nix @@ -385,7 +385,7 @@ rec { # Utility to convert a directory full of `cabal2nix`-generated files into a # package override set # - # packagesFromDirectory : Directory -> HaskellPackageOverrideSet + # packagesFromDirectory : { directory : Directory, ... } -> HaskellPackageOverrideSet packagesFromDirectory = { directory, ... }: