-
Notifications
You must be signed in to change notification settings - Fork 0
/
default.nix
104 lines (86 loc) · 2.46 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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
{ sources ? import ./nix/sources.nix
, compiler ? "default"
, system ? builtins.currentSystem
, ...
}:
let
##################
## LOAD NIXPKGS ##
##################
## Import nixpkgs pinned by niv:
pkgs = import sources.nixpkgs { inherit system; };
##################
## LOAD HELPERS ##
##################
## Load the YAML reader:
readYAML = pkgs.callPackage ./nix/lib/read-yaml.nix { };
## Load Haskell package factory:
mkHaskell = pkgs.callPackage ./nix/lib/mk-haskell.nix { };
###########################
## ESSENTIAL INFORMATION ##
###########################
## Get the main Haskell package specification:
packageSpec = readYAML (thisHaskellPackages.main.path + "/package.yaml");
#############
## HASKELL ##
#############
## Get Haskell packages in the project:
thisHaskellPackages = {
main = {
name = packageSpec.name;
path = ./.;
};
subs = [ ];
};
## Get Haskell packages in the project as a list:
thisHaskellPackagesAll = [ thisHaskellPackages.main ] ++ thisHaskellPackages.subs;
## Get base Haskell package set:
baseHaskell = if compiler == "default" then pkgs.haskellPackages else pkgs.haskell.packages.${compiler};
## Get this Haskell package set:
thisHaskell = mkHaskell {
haskell = baseHaskell;
packages = thisHaskellPackagesAll;
overrides = self: super: { };
};
###########
## SHELL ##
###########
## Prepare dev-test-build script:
dev-test-build = pkgs.writeShellApplication {
name = "dev-test-build";
text = builtins.readFile ./nix/dev-test-build.sh;
runtimeInputs = [ pkgs.bash pkgs.bc pkgs.moreutils ];
};
## Prepare Nix shell:
thisShell = thisHaskell.shellFor {
## Define packages for the shell:
packages = p: builtins.map (x: p.${x.name}) thisHaskellPackagesAll;
## Enable Hoogle:
withHoogle = false;
## Build inputs for development shell:
buildInputs = [
## Haskell related build inputs:
thisHaskell.apply-refact
thisHaskell.cabal-fmt
thisHaskell.cabal-install
thisHaskell.cabal2nix
thisHaskell.fourmolu
thisHaskell.haskell-language-server
thisHaskell.hlint
thisHaskell.hpack
thisHaskell.weeder
## Other build inputs for various development requirements:
pkgs.docker-client
pkgs.git
pkgs.git-chglog
pkgs.nil
pkgs.nixpkgs-fmt
pkgs.nodePackages.prettier
pkgs.upx
dev-test-build
];
};
in
{
shell = thisShell;
}