-
Notifications
You must be signed in to change notification settings - Fork 19
/
helpers.nix
97 lines (83 loc) · 2.32 KB
/
helpers.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
let
formatArg =
x:
if x == null then
[ ]
else
if (builtins.isList x) then
x else [ x ];
in
{ clj-nix_overlay }:
{
mkCljCli =
{ jdkDrv
, java-opts ? [ ]
, extra-args ? [ ]
}:
builtins.filter
(s: builtins.stringLength s != 0)
(
[
"${jdkDrv.jdk}/bin/java"
]
++ (formatArg java-opts) ++
[
"-jar"
"${jdkDrv.jarPath}"
]
++ (formatArg extra-args)
);
mkCljApp = { pkgs, modules }:
let
pkgs' = pkgs.extend clj-nix_overlay;
_m = pkgs.lib.evalModules {
specialArgs = { pkgs = pkgs'; };
modules =
[ ./modules/top-level.nix ] ++ modules;
};
cfg = _m.config;
in
assert (pkgs'.lib.assertMsg
(cfg.customJdk.enable == true -> cfg.nativeImage.enable == false)
"customJdk and nativeImage are incompatible, you can enable only one"
);
assert (pkgs'.lib.assertMsg
(cfg.withLeiningen == true -> ! isNull cfg.buildCommand)
"With Leiningen you have to provide a 'buildCommand'"
);
assert (pkgs'.lib.assertMsg
(cfg.withLeiningen == true -> cfg.compileCljOpts == false && cfg.javacOpts == false)
"Leiningen is incompatible with Clojure tools.build options (compileCljOpts and javacOpts)"
);
assert (pkgs'.lib.assertMsg
(cfg.buildCommand != null ->
cfg.builder-extra-inputs == [ ] && cfg.builder-java-opts == [ ]
&& cfg.builder-preBuild == "" && cfg.builder-postBuild == ""
)
"buildCommand and builder-* options are incompatible"
);
let
cljDrv = pkgs'.mkCljBin {
jdkRunner = cfg.jdk;
inherit (cfg) projectSrc name version main-ns buildCommand
lockfile java-opts compileCljOpts javacOpts
builder-extra-inputs builder-java-opts builder-preBuild builder-postBuild;
};
in
if cfg.customJdk.enable then
pkgs'.customJdk
{
inherit cljDrv;
jdkBase = cfg.jdk;
java-opts = cfg.java-opts;
inherit (cfg.customJdk) jdkModules extraJdkModules locales;
}
else if cfg.nativeImage.enable then
pkgs'.mkGraalBin
{
inherit cljDrv;
inherit (cfg.nativeImage) graalvm extraNativeImageBuildArgs graalvmXmx;
}
else
cljDrv;
}