-
Notifications
You must be signed in to change notification settings - Fork 0
/
default.nix
85 lines (68 loc) · 2.02 KB
/
default.nix
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
82
83
84
85
{ sources ? import ./nix/sources.nix, nixpkgs ? sources.nixpkgs, compiler ? "ghc8107" }:
let
pkgs = import nixpkgs { inherit config; };
# use gitignore to scout which files are important and which aren't
gitIgnore = pkgs.nix-gitignore.gitignoreSourcePure [ ./.gitignore ];
# custom package overrides
config = {
packageOverrides = pkgs: rec {
haskell = pkgs.haskell // {
packages = pkgs.haskell.packages // {
"${compiler}" = pkgs.haskell.packages."${compiler}".override {
overrides = haskellPackagesNew: haskellPackagesOld: rec {
# this package:
cocobolo = haskellPackagesNew.callCabal2nix "cocobolo" (gitIgnore ./.) { };
};
};
};
};
};
};
# synonym for easier use:
myHaskellPackages = pkgs.haskell.packages.${compiler};
# development nix-shell
shell = myHaskellPackages.shellFor {
packages = p: [
p.cocobolo
];
buildInputs = with myHaskellPackages; [
# DEVELOPMENT TOOLS:
## build-related:
cabal-install
cabal2nix
## IDE-related:
ghcid
hlint
haskell-language-server
## formatters
brittany
# Niv for pinning dependencies
pkgs.niv
];
# enable Hoogle (will be present in the shell)
withHoogle = true;
};
# static-ish executable
static-exe = pkgs.haskell.lib.justStaticExecutables (myHaskellPackages.cocobolo);
# Docker image for transitive closure of `static-exe`!
docker = pkgs.dockerTools.buildImage {
name = "cocobolo-docker";
tag = "latest";
created = "now"; # this technically breaks binary reproducibility, but it's useful for our purposes
extraCommands = ''
mkdir ./data
chmod 777 ./data
'';
config = {
Cmd = [ "${static-exe}/bin/cocobolo" ];
Env = [ "PATH=${static-exe}/bin" ];
WorkingDir = "/data";
};
};
in
{
inherit shell; # equivalent to `shell = shell`
inherit static-exe;
inherit docker;
cocobolo = myHaskellPackages.cocobolo;
}