-
Notifications
You must be signed in to change notification settings - Fork 0
/
default.nix
103 lines (84 loc) · 2.73 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
{ 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 { };
#############
## HASKELL ##
#############
## Get Haskell packages in the project:
thisHaskellPackages = {
main = {
name = "xlsx-tabulate";
path = ./.;
};
subs = [ ];
};
## Get Haskell packages in the project as a list:
thisHaskellPackagesAll = [ thisHaskellPackages.main ] ++ thisHaskellPackages.subs;
## Get the main Haskell package specification:
packageSpec = readYAML (thisHaskellPackages.main.path + "/package.yaml");
## 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: {
xlsx = super.xlsx_1_1_0_1;
};
};
###########
## SHELL ##
###########
## 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
## Other build inputs for various development requirements:
pkgs.git
];
## Shell hook for development shell:
shellHook = ''
## Environment variables:
export PROJECT_DEV_ROOT="$(git rev-parse --show-toplevel)"
## Shell aliases:
alias riched="${pkgs.rich-cli}/bin/rich --emoji --center --width 120 --panel rounded --theme rrt --hyperlinks"
alias devsh-help="riched --pager ''${PROJECT_DEV_ROOT}/nix/docs/quickstart.md"
alias devsh-welcome="riched ''${PROJECT_DEV_ROOT}/README.md"
alias devsh-makedev="hpack && fourmolu -i src/ test/ && hlint src/ test/ && cabal build -O0 && cabal v1-test"
## Greet:
devsh-welcome
echo
echo '**Run devsh-welcome to see Welcome notice again**' | riched -m -
echo '**Run devsh-help to see help**' | riched -m -
'';
};
in
thisShell