cloudy-0.1.0.0: nix/overlay.nix
final: prev:
let
mkCloudy = final: hfinal:
let
filesToIgnore = [
".git"
".github"
".stack-work"
".travis.yml"
"cabal.project"
"default.nix"
"flake.lock"
"flake.nix"
"nix"
"result"
"shell.nix"
"stack-nightly.yaml"
"stack.yaml"
];
src =
builtins.path {
name = "cloudy-src";
path = ./..;
filter = path: type:
with final.lib;
! elem (baseNameOf path) filesToIgnore &&
! any (flip hasPrefix (baseNameOf path)) [ "dist" ".ghc" ];
};
extraCabal2nixOptions = "";
in
hfinal.callCabal2nixWithOptions "cloudy" src extraCabal2nixOptions {};
in
{
###############################
## Haskell package overrides ##
###############################
cloudy-haskell =
let
myHaskellOverride = oldAttrs: {
overrides =
final.lib.composeExtensions
(oldAttrs.overrides or (_: _: {}))
(hfinal: hprev: {
cloudy = mkCloudy final hfinal;
});
};
in
prev.haskell // {
packages = prev.haskell.packages // {
${final.cloudy-ghc-version} =
prev.haskell.packages.${final.cloudy-ghc-version}.override
myHaskellOverride;
native-bignum = prev.haskell.packages.native-bignum // {
${final.cloudy-static-ghc-version} =
prev.haskell.packages.native-bignum.${final.cloudy-static-ghc-version}.override
myHaskellOverride;
};
};
};
cloudy-ghc-version-short = "966";
cloudy-ghc-version = "ghc" + final.cloudy-ghc-version-short;
cloudy-haskell-pkg-set = final.cloudy-haskell.packages.${final.cloudy-ghc-version};
cloudy = final.cloudy-haskell-pkg-set.cloudy;
cloudy-just-exe =
final.lib.pipe
final.cloudy
[
( final.haskell.lib.compose.overrideCabal (oldAttrs: {
postInstall = ''
export HOME=$TMPDIR
'' + (oldAttrs.postInstall or "");
})
)
(final.cloudy-haskell-pkg-set.generateOptparseApplicativeCompletions ["cloudy"])
final.haskell.lib.justStaticExecutables
];
cloudy-shell = final.cloudy-haskell-pkg-set.shellFor {
packages = hpkgs: [ hpkgs.cloudy ];
};
my-haskell-language-server =
final.haskell-language-server.override {
supportedGhcVersions = [ final.cloudy-ghc-version-short ];
};
dev-shell = final.mkShell {
nativeBuildInputs = [
final.cabal-install
final.my-haskell-language-server
final.sqlite-interactive
];
inputsFrom = [
final.cloudy-shell
];
# These environment variables are important. Without these,
# doctest doesn't pick up nix's version of ghc, and will fail
# claiming it can't find your dependencies
shellHook = ''
export NIX_GHC="${final.cloudy-shell.NIX_GHC}"
export NIX_GHC_LIBDIR="${final.cloudy-shell.NIX_GHC_LIBDIR}"
'';
};
##############################
## Statically-linked builds ##
##############################
# Static builds only work on ghc94, not ghc96+ :-(
cloudy-static-ghc-version-short = "948";
cloudy-static-ghc-version = "ghc" + final.cloudy-static-ghc-version-short;
cloudy-static-haskell-pkg-set = final.pkgsStatic.cloudy-haskell.packages.native-bignum.${final.cloudy-static-ghc-version};
cloudy-static = final.cloudy-static-haskell-pkg-set.cloudy;
cloudy-static-just-exe =
final.lib.pipe
final.cloudy-static
[
( final.haskell.lib.compose.overrideCabal (oldAttrs: {
postInstall = ''
export HOME=$TMPDIR
'' + (oldAttrs.postInstall or "");
})
)
(final.cloudy-static-haskell-pkg-set.generateOptparseApplicativeCompletions ["cloudy"])
final.haskell.lib.justStaticExecutables
];
}