-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathshell.nix
135 lines (128 loc) · 4.13 KB
/
shell.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
{ system ? builtins.currentSystem
, enableHaskellProfiling ? false
, packages ? import ./. { inherit system enableHaskellProfiling; }
}:
let
inherit (packages) pkgs zerepoch zerepoch-playground simeon-playground zerepoch-pab simeon-dashboard fake-pab deployment docs;
inherit (pkgs) stdenv lib utillinux python3 nixpkgs-fmt;
inherit (zerepoch) haskell agdaPackages stylish-haskell sphinxcontrib-haddock sphinx-markdown-tables sphinxemoji nix-pre-commit-hooks bcc-cli bcc-node;
inherit (zerepoch) agdaWithStdlib;
inherit (zerepoch) purty purty-pre-commit purs spargo;
# For Sphinx, and ad-hoc usage
sphinxTools = python3.withPackages (ps: [
sphinxcontrib-haddock.sphinxcontrib-domaintools
sphinx-markdown-tables
sphinxemoji
ps.sphinxcontrib_plantuml
ps.sphinxcontrib-bibtex
ps.sphinx
ps.sphinx_rtd_theme
ps.recommonmark
]);
# Configure project pre-commit hooks
pre-commit-check = nix-pre-commit-hooks.run {
src = (lib.cleanSource ./.);
tools = {
stylish-haskell = stylish-haskell;
nixpkgs-fmt = nixpkgs-fmt;
shellcheck = pkgs.shellcheck;
purty = purty-pre-commit;
};
hooks = {
purty.enable = true;
stylish-haskell.enable = true;
nixpkgs-fmt = {
enable = true;
# While nixpkgs-fmt does exclude patterns specified in `.ignore` this
# does not appear to work inside the hook. For now we have to thus
# maintain excludes here *and* in `./.ignore` and *keep them in sync*.
excludes = [ ".*nix/pkgs/haskell/materialized.*/.*" ".*/spago-packages.nix$" ".*/packages.nix$" ];
};
shellcheck.enable = true;
png-optimization = {
enable = true;
name = "png-optimization";
description = "Ensure that PNG files are optimized";
entry = "${pkgs.optipng}/bin/optipng";
files = "\\.png$";
};
};
};
nixFlakesAlias = pkgs.runCommand "nix-flakes-alias" { } ''
mkdir -p $out/bin
ln -sv ${pkgs.nixFlakes}/bin/nix $out/bin/nix-flakes
'';
# build inputs from nixpkgs ( -> ./nix/default.nix )
nixpkgsInputs = (with pkgs; [
cacert
editorconfig-core-c
ghcid
jq
morph
nixFlakesAlias
nixpkgs-fmt
nodejs
shellcheck
sqlite-interactive
stack
yq
z3
zlib
nodePackages.purescript-language-server
] ++ (lib.optionals (!stdenv.isDarwin) [ rPackages.plotly R ]));
# local build inputs ( -> ./nix/pkgs/default.nix )
localInputs = (with zerepoch; [
aws-mfa-login
cabal-install
bcc-repo-tool
fixPngOptimization
fixPurty
fixStylishHaskell
haskell-language-server
haskell-language-server-wrapper
hie-bios
hlint
simeon-dashboard.generate-purescript
simeon-dashboard.start-backend
simeon-playground.generate-purescript
simeon-playground.start-backend
zerepoch-playground.generate-purescript
zerepoch-playground.start-backend
zerepoch-pab.generate-purescript
zerepoch-pab.migrate
zerepoch-pab.start-backend
zerepoch-pab.start-all-servers
zerepoch-pab.start-all-servers-m
purs
purty
spago
stylish-haskell
updateMaterialized
updateClientDeps
docs.build-and-serve-docs
]);
in
haskell.project.shellFor {
nativeBuildInputs = nixpkgsInputs ++ localInputs ++ [ agdaWithStdlib sphinxTools ];
# We don't currently use this, and it's a pain to materialize, and otherwise
# costs a fair bit of eval time.
withHoogle = false;
shellHook = ''
${pre-commit-check.shellHook}
''
# Work around https://github.com/NixOS/nix/issues/3345, which makes
# tests etc. run single-threaded in a nix-shell.
# Sets the affinity to cores 0-1000 for $$ (current PID in bash)
# Only necessary for linux - darwin doesn't even expose thread
# affinity APIs!
+ lib.optionalString stdenv.isLinux ''
${utillinux}/bin/taskset -pc 0-1000 $$
''
# It's handy to have an environment variable for the project root (assuming people
# normally start the shell from there.
# We also use it in a deployment hack.
# We have a local passwords store that we use for deployments etc.
+ ''
export ACTUS_TEST_DATA_DIR=${packages.actus-tests}/tests/
'';
}