diff options
Diffstat (limited to 'default.nix')
-rw-r--r-- | default.nix | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..a53d987 --- /dev/null +++ b/default.nix | |||
@@ -0,0 +1,53 @@ | |||
1 | { nixpkgs ? <nixpkgs> | ||
2 | , config ? {} | ||
3 | }: | ||
4 | |||
5 | with (import nixpkgs config); | ||
6 | |||
7 | let | ||
8 | mkDerivation = | ||
9 | { srcs ? ./elm-srcs.nix | ||
10 | , src | ||
11 | , name | ||
12 | , srcdir ? "./src" | ||
13 | , targets ? [] | ||
14 | , registryDat ? ./registry.dat | ||
15 | , outputJavaScript ? false | ||
16 | }: | ||
17 | stdenv.mkDerivation { | ||
18 | inherit name src; | ||
19 | |||
20 | buildInputs = [ elmPackages.elm ] | ||
21 | ++ lib.optional outputJavaScript nodePackages.uglify-js; | ||
22 | |||
23 | buildPhase = pkgs.elmPackages.fetchElmDeps { | ||
24 | elmPackages = import srcs; | ||
25 | elmVersion = "0.19.1"; | ||
26 | inherit registryDat; | ||
27 | }; | ||
28 | |||
29 | installPhase = let | ||
30 | elmfile = module: "${srcdir}/${builtins.replaceStrings ["."] ["/"] module}.elm"; | ||
31 | extension = if outputJavaScript then "js" else "html"; | ||
32 | in '' | ||
33 | mkdir -p $out/share/doc | ||
34 | ${lib.concatStrings (map (module: '' | ||
35 | echo "compiling ${elmfile module}" | ||
36 | elm make ${elmfile module} --optimize --output $out/${module}.${extension} | ||
37 | ${lib.optionalString outputJavaScript '' | ||
38 | echo "minifying ${elmfile module}" | ||
39 | uglifyjs $out/${module}.${extension} --compress 'pure_funcs="F2,F3,F4,F5,F6,F7,F8,F9,A2,A3,A4,A5,A6,A7,A8,A9",pure_getters,keep_fargs=false,unsafe_comps,unsafe' \ | ||
40 | | uglifyjs --mangle --output $out/${module}.min.${extension} | ||
41 | ''} | ||
42 | '') targets)} | ||
43 | ''; | ||
44 | }; | ||
45 | in mkDerivation { | ||
46 | name = "typr-v0.1.0"; | ||
47 | srcs = ./elm-srcs.nix; | ||
48 | src = ./.; | ||
49 | targets = ["Main"]; | ||
50 | srcdir = "./src"; | ||
51 | outputJavaScript = false; | ||
52 | } | ||
53 | |||