Skip to content

Instantly share code, notes, and snippets.

@denibertovic
Created November 8, 2019 16:47
Show Gist options
  • Save denibertovic/b079693dd2061e18e9d8f040c6658420 to your computer and use it in GitHub Desktop.
Save denibertovic/b079693dd2061e18e9d8f040c6658420 to your computer and use it in GitHub Desktop.
Useful template compiling a Haskell project with Nix
{ compiler ? "ghc864" }:
let
# Disable tests for these packages
dontCheckPackages = [
];
# Jailbreak these packages
doJailbreakPackages = [
];
# Disable haddocks for these packages
dontHaddockPackages = [
];
config = {
packageOverrides = pkgs: rec {
haskell = pkgs.haskell // {
packages = pkgs.haskell.packages // {
"${compiler}" =
let
generatedOverrides = haskellPackagesNew: haskellPackagesOld:
let
toPackage = file: _: {
name = builtins.replaceStrings [ ".nix" ] [ "" ] file;
value = haskellPackagesNew.callPackage (./. + "/nix/${file}") { };
};
in
pkgs.lib.mapAttrs' toPackage (builtins.readDir ./nix);
makeOverrides =
function: names: haskellPackagesNew: haskellPackagesOld:
let
toPackage = name: {
inherit name;
value = function haskellPackagesOld.${name};
};
in
builtins.listToAttrs (map toPackage names);
composeExtensionsList =
pkgs.lib.fold pkgs.lib.composeExtensions (_: _: {});
# More exotic overrides go here
manualOverrides = haskellPackagesNew: haskellPackagesOld: {
};
in
pkgs.haskell.packages."${compiler}".override {
overrides = composeExtensionsList [
generatedOverrides
(makeOverrides pkgs.haskell.lib.dontCheck dontCheckPackages )
(makeOverrides pkgs.haskell.lib.doJailbreak doJailbreakPackages)
(makeOverrides pkgs.haskell.lib.dontHaddock dontHaddockPackages)
manualOverrides
];
};
};
};
};
};
pkgs = import <nixpkgs> { inherit config; };
in
{ project = pkgs.haskell.packages."${compiler}".project;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment