2019-08-16 13:02:00 +03:00
|
|
|
{ pkgs ? (import ./nix/nixpkgs) }:
|
|
|
|
|
2019-06-19 23:48:47 +03:00
|
|
|
let
|
2019-08-28 15:15:35 +03:00
|
|
|
ormoluCompiler = "ghc865";
|
2019-09-27 15:09:07 +03:00
|
|
|
source = pkgs.lib.sourceByRegex ./. [
|
2019-07-14 02:01:02 +03:00
|
|
|
"^.*\.md$"
|
|
|
|
"^app.*$"
|
|
|
|
"^data.*$"
|
2019-09-27 15:09:07 +03:00
|
|
|
"^ormolu\.cabal$"
|
2019-07-14 02:01:02 +03:00
|
|
|
"^src.*$"
|
|
|
|
"^tests.*$"
|
|
|
|
];
|
2019-08-16 13:02:00 +03:00
|
|
|
haskellPackages = pkgs.haskell.packages.${ormoluCompiler}.override {
|
|
|
|
overrides = ormoluOverlay;
|
2019-06-19 23:48:47 +03:00
|
|
|
};
|
2019-08-16 13:02:00 +03:00
|
|
|
ormoluOverlay = self: super: {
|
2019-11-07 17:19:56 +03:00
|
|
|
"ormolu" = pkgs.haskell.lib.enableCabalFlag
|
|
|
|
(super.callCabal2nix "ormolu" source { }) "dev";
|
2019-10-27 15:58:13 +03:00
|
|
|
# Nixpkgs provides ghc-lib-parser-8.8.0.20190424, but we want
|
2020-03-29 00:32:04 +03:00
|
|
|
# ghc-lib-parser-8.10.1. We disable Haddock generation because it's way
|
2019-10-27 15:58:13 +03:00
|
|
|
# too slow.
|
|
|
|
"ghc-lib-parser" = pkgs.haskell.lib.dontHaddock
|
2020-03-29 00:32:04 +03:00
|
|
|
(super.callHackageDirect {
|
|
|
|
pkg = "ghc-lib-parser";
|
|
|
|
ver = "8.10.1.20200324";
|
|
|
|
sha256 = "0f2c68fzdj2lw6da2zpx7a0cx631im3kylwd85dzx1npsm1vzlbg";
|
|
|
|
} {});
|
2019-08-30 05:43:38 +03:00
|
|
|
};
|
2019-07-14 02:01:02 +03:00
|
|
|
ormolize = import ./nix/ormolize {
|
|
|
|
inherit pkgs;
|
|
|
|
inherit haskellPackages;
|
|
|
|
};
|
2019-09-17 14:16:47 +03:00
|
|
|
# NOTE We have to exclude some directories for some packages because
|
|
|
|
# Ormolu needs files to be parsable by Haddock which is not always the
|
|
|
|
# case. For example some tests and examples do not parse.
|
|
|
|
excludedHackageDirs = {
|
|
|
|
"aws" = ["Examples"];
|
|
|
|
"distributed-process" = ["benchmarks"];
|
|
|
|
"esqueleto" = ["test"];
|
|
|
|
"fay" = ["examples"];
|
|
|
|
"postgrest" = ["test"];
|
|
|
|
};
|
2019-08-30 05:43:38 +03:00
|
|
|
ormolizedPackages = doCheck:
|
2019-09-17 14:16:47 +03:00
|
|
|
pkgs.lib.mapAttrs (name: p: ormolize {
|
|
|
|
package = p;
|
|
|
|
inherit doCheck;
|
|
|
|
excludedDirs =
|
|
|
|
if builtins.hasAttr name excludedHackageDirs
|
|
|
|
then excludedHackageDirs.${name}
|
|
|
|
else [];
|
|
|
|
}) haskellPackages;
|
2019-06-19 23:48:47 +03:00
|
|
|
in {
|
|
|
|
ormolu = haskellPackages.ormolu;
|
2019-08-16 13:02:00 +03:00
|
|
|
ormoluShell = haskellPackages.shellFor {
|
2019-10-03 16:48:56 +03:00
|
|
|
packages = ps: [
|
|
|
|
ps.ormolu
|
|
|
|
];
|
|
|
|
buildInputs = [
|
|
|
|
haskellPackages.cabal-install
|
|
|
|
haskellPackages.ghcid
|
|
|
|
];
|
2019-06-19 23:48:47 +03:00
|
|
|
};
|
2020-02-10 16:46:13 +03:00
|
|
|
withOrmolu = haskellPackages.shellFor {
|
|
|
|
packages = ps: [];
|
|
|
|
buildInputs = [
|
|
|
|
haskellPackages.ormolu
|
|
|
|
];
|
|
|
|
};
|
2019-08-16 13:02:00 +03:00
|
|
|
inherit ormoluOverlay ormoluCompiler;
|
2019-08-30 05:43:38 +03:00
|
|
|
hackage = ormolizedPackages false;
|
|
|
|
hackageTests = with pkgs.lib; pkgs.recurseIntoAttrs (
|
|
|
|
let ps = [
|
|
|
|
"QuickCheck"
|
|
|
|
"ShellCheck"
|
|
|
|
"aeson"
|
|
|
|
"attoparsec"
|
2019-09-04 13:05:48 +03:00
|
|
|
"aws"
|
2019-09-16 12:00:22 +03:00
|
|
|
"capability"
|
2019-08-30 05:43:38 +03:00
|
|
|
"cassava"
|
|
|
|
"conduit"
|
|
|
|
"cryptonite"
|
|
|
|
"diagrams-core"
|
|
|
|
"distributed-process"
|
|
|
|
"esqueleto"
|
|
|
|
"fay"
|
2019-09-17 14:16:47 +03:00
|
|
|
"hakyll"
|
2019-09-04 13:05:48 +03:00
|
|
|
"haxl"
|
2019-08-30 05:43:38 +03:00
|
|
|
"hedgehog"
|
|
|
|
"hlint"
|
|
|
|
"megaparsec"
|
2019-09-04 13:05:48 +03:00
|
|
|
"ormolu"
|
2019-10-27 15:58:13 +03:00
|
|
|
"optics"
|
2019-08-30 05:43:38 +03:00
|
|
|
"postgrest"
|
|
|
|
"servant"
|
|
|
|
"servant-server"
|
|
|
|
"tensorflow"
|
2019-09-04 09:33:58 +03:00
|
|
|
"text_1_2_4_0"
|
2019-09-06 20:22:15 +03:00
|
|
|
"tls"
|
2019-09-04 13:05:48 +03:00
|
|
|
"yesod-core"
|
2019-08-30 05:43:38 +03:00
|
|
|
|
|
|
|
# Comment idempotence issue
|
|
|
|
|
|
|
|
# "Agda"
|
|
|
|
# "brick"
|
|
|
|
# "hledger"
|
|
|
|
# "http-client"
|
|
|
|
# "idris"
|
|
|
|
# "intero"
|
|
|
|
# "leksah"
|
|
|
|
# "pandoc"
|
|
|
|
# "pipes"
|
|
|
|
# "stack"
|
|
|
|
|
|
|
|
# Missing language extension
|
|
|
|
|
|
|
|
# "lens" #fixed in master
|
|
|
|
# "purescript"
|
|
|
|
|
|
|
|
];
|
|
|
|
in listToAttrs (map (p: nameValuePair p (ormolizedPackages true).${p}) ps)
|
|
|
|
);
|
2019-06-19 23:48:47 +03:00
|
|
|
}
|