about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers/elm/default.nix
blob: ca9f37ff5367337df36cae7ac57f215ccf3d20b3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
{ pkgs
, lib
, makeWrapper
, nodejs ? pkgs.nodejs_18
}:

let
  fetchElmDeps = pkgs.callPackage ./lib/fetchElmDeps.nix { };

  # Haskell packages that require ghc 9.6
  hs96Pkgs = import ./packages/ghc9_6 { inherit pkgs lib makeWrapper nodejs fetchElmDeps; };

  # Haskell packages that require ghc 8.10
  hs810Pkgs = import ./packages/ghc8_10 { inherit pkgs lib; };

  # Haskell packages that require ghc 9.2
  hs92Pkgs = import ./packages/ghc9_2 { inherit pkgs lib; };

  # Patched, originally npm-downloaded, packages
  patchedNodePkgs = import ./packages/node { inherit pkgs lib nodejs makeWrapper; };

  assembleScope = self: basics:
    (hs96Pkgs self).elmPkgs // (hs92Pkgs self).elmPkgs // (hs810Pkgs self).elmPkgs // (patchedNodePkgs self) // basics;
in
lib.makeScope pkgs.newScope
  (self: assembleScope self
    (with self; {
      inherit fetchElmDeps nodejs;

      /* Node/NPM based dependencies can be upgraded using script `packages/generate-node-packages.sh`.

        * Packages which rely on `bin-wrap` will fail by default
          and can be patched using `patchBinwrap` function defined in `packages/lib.nix`.

        * Packages which depend on npm installation of elm can be patched using
          `patchNpmElm` function also defined in `packages/lib.nix`.
      */
      elmLib =
        let
          hsElmPkgs = (hs810Pkgs self) // (hs96Pkgs self);
        in
        import ./lib {
          inherit lib;
          inherit (pkgs) writeScriptBin stdenv;
          inherit (self) elm;
        };

      elm-json = callPackage ./packages/elm-json { };

      elm-test-rs = callPackage ./packages/elm-test-rs { };

      elm-test = callPackage ./packages/elm-test { };

      lamdera = callPackage ./packages/lamdera { };
    })
  )