Skip to content

Commit d63554d

Browse files
Rewrite shell.nix to use shellFor and callCabal2nix
The old `shell.nix` manually listed the dependencies required by the shell. Worse, this manual list was out of sync with the actual dependencies needed by `gerber` and `gerber-diagrams`; e.g., it listed `diagrams` as a dependency, which was failing because of an upper bound in one of `diagrams-contrib`'s dependencies, but `gerber-diagrams` doesn't even need `diagrams`, it only needs `diagrams-lib` and `diagrams-cairo`. Using `callCabal2nix` and `shellFor` will automatically generate a shell with the exact dependencies specified by in the cabal files.
1 parent c1ef027 commit d63554d

File tree

1 file changed

+13
-22
lines changed

1 file changed

+13
-22
lines changed

shell.nix

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,21 @@
1-
{ nixpkgs ? import <nixpkgs> {}, compiler ? "default" }:
1+
{ pkgs ? import <nixpkgs> {}, compiler ? "default" }:
22

33
let
44

5-
inherit (nixpkgs) pkgs;
5+
haskellPackages =
6+
if compiler == "default"
7+
then pkgs.haskellPackages
8+
else pkgs.haskell.packages.${compiler};
69

7-
f = { mkDerivation, base, containers, lens, linear, megaparsec
8-
, mtl, pretty-show, recursion-schemes, stdenv, text, transformers
9-
, diagrams
10-
}:
11-
mkDerivation {
12-
pname = "gerber";
13-
version = "0.1.0.0";
14-
src = ./.;
15-
libraryHaskellDepends = [
16-
base containers lens linear megaparsec mtl pretty-show
17-
recursion-schemes text transformers diagrams
18-
];
19-
license = stdenv.lib.licenses.mit;
20-
};
10+
inherit (haskellPackages) callCabal2nix;
2111

22-
haskellPackages = if compiler == "default"
23-
then pkgs.haskellPackages
24-
else pkgs.haskell.packages.${compiler};
25-
26-
drv = haskellPackages.callPackage f {};
12+
gerber = callCabal2nix "gerber" ./gerber {};
13+
gerber-diagrams = callCabal2nix "gerber-diagrams" ./gerber-diagrams {
14+
inherit gerber;
15+
};
2716

2817
in
2918

30-
if pkgs.lib.inNixShell then drv.env else drv
19+
haskellPackages.shellFor {
20+
packages = p: [ gerber gerber-diagrams ];
21+
}

0 commit comments

Comments
 (0)