aboutsummaryrefslogtreecommitdiffstats
path: root/default.nix
blob: 490b01d847115c97fc60fc1a347b3d5bdf078af5 (plain)
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
{ pkgs ? import sources.nixpkgs {
    overlays = [
      (import ./pkgs { })
      (self: super: {
        haskell = super.haskell // {
          packageOverrides = self.lib.composeManyExtensions [
            super.haskell.packageOverrides
            (self: super: {
              ghcWithPackages = super.ghcWithPackages.override {
                installDocumentation = false; # XXX true (default)
              };
            })
          ];
        };
      })
    ];
  }
, sources ? import ./nix/sources.nix
}:
let
  haskellPackages = pkgs.haskell.packages.ghc98;
  jsHaskellPackages = pkgs.pkgsCross.ghcjs.haskell.packages.ghc98;
  lib = pkgs.lib;
in
rec {
  inherit (haskellPackages) acms;
  inherit (jsHaskellPackages) frontend;
  shell = pkgs.mkShell {
    inputsFrom = [
      (jsHaskellPackages.shellFor {
        packages = _: [
          jsHaskellPackages.acms
          jsHaskellPackages.autotypes
          jsHaskellPackages.frontend
        ];
      })
      (haskellPackages.shellFor {
        packages = _: [
          haskellPackages.acms
          haskellPackages.autotypes
          haskellPackages.frontend
        ];
        withHoogle = true;
        withHaddock = true;
      })
      (pkgs.mkShell {
        buildInputs = [
          haskellPackages.astore
          haskellPackages.autotypes
          haskellPackages.cabal-install
          haskellPackages.haskell-language-server
          haskellPackages.ormolu
          pkgs.niv
          pkgs.pkg-config
          (pkgs.writeScriptBin "reload" ''
            set -efu
            ${haskellPackages.ghcid.bin}/bin/ghcid -c \
              '${haskellPackages.cabal-install}/bin/cabal new-repl' \
              -T ':run Main.main'
          '')
          (pkgs.writeScriptBin "acms" ''
            set -efu
            exec ${haskellPackages.cabal-install}/bin/cabal run acms -- "$@"
          '')
          (pkgs.writeScriptBin "format" ''
            set -efu
            git ls-files | grep .hs$ | while read -r fn; do
              ${haskellPackages.ormolu}/bin/ormolu -i "$fn" || :
            done
          '')
          (pkgs.writeScriptBin "git-hook-precommit" ''
            set -efux
            cd ${lib.escapeShellArg (toString ./.)}
            nix-build . -A acms -A frontend --no-out-link
            nix-build tests.nix --no-out-link
          '')
        ];
      })
    ];
  };
}