Dendritic Nix - Community-driven Nix distribution based on the Dendritic pattern.
1let
2 path_ = "dev/book/theme/elm.js";
3 main = "src/Search.elm src/Results.elm";
4in
5{
6 gitignore = "elm-stuff";
7 perSystem =
8 { pkgs, ... }:
9 let
10 elm_js = pkgs.stdenvNoCC.mkDerivation {
11 name = "elm-builds";
12 src = ./../elm;
13 buildInputs = [
14 pkgs.uglify-js
15 pkgs.elmPackages.elm
16 pkgs.elmPackages.elm-test
17 ];
18 postUnpack = (
19 pkgs.elmPackages.fetchElmDeps {
20 elmVersion = (builtins.fromJSON (builtins.readFile ./../elm/elm.json)).elm-version;
21 elmPackages = import ./../elm/elm-srcs.nix;
22 registryDat = ./../elm/registry.dat;
23 }
24 );
25 buildPhase = ''
26 mkdir -p $out
27 elm make --optimize --output $out/elm.js ${main}
28 uglifyjs $out/elm.js --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' | uglifyjs --mangle --output $out/elm.min.js
29 '';
30 doCheck = true;
31 checkPhase = ''
32 elm-test
33 '';
34 };
35 in
36 {
37 treefmt.programs.elm-format.enable = true;
38 treefmt.settings.global.excludes = [
39 path_
40 "dev/elm/elm-stuff/*"
41 "dev/elm/registry.dat"
42 ];
43 checks.elm_tests = elm_js;
44 files.files = [
45 {
46 inherit path_;
47 drv = pkgs.writers.writeText "elm.js" (builtins.readFile "${elm_js}/elm.min.js");
48 }
49 ];
50 devshells.default.packages = [
51 pkgs.elmPackages.elm
52 pkgs.elmPackages.elm-test
53 ];
54 devshells.default.commands = [
55 {
56 name = "elm-build";
57 help = "compile elm debug mode";
58 command = "cd dev/elm; elm make --debug --output ../../${path_} ${main} \"$@\" ";
59 }
60 {
61 name = "elm-check";
62 help = "run elm tests";
63 command = "cd dev/elm; ${pkgs.elmPackages.elm-test}/bin/elm-test \"$@\"";
64 }
65 {
66 name = "elm-registry";
67 help = "use elm2nix to regen dependencies registry for nix";
68 command = "cd dev/elm; ${pkgs.elm2nix}/bin/elm2nix convert > elm-srcs.nix && ${pkgs.elm2nix}/bin/elm2nix snapshot";
69 }
70 ];
71 };
72}