{ stdenv , elmPackages , lib , baseurl ? "example.org" , serverurl ? "wss://example.org" }: let mkDerivation = { srcs ? ./elm-srcs.nix , src , name , srcdir ? "./src" , targets ? [] , registryDat ? ./registry.dat , outputJavaScript ? true , patchPhase ? "" , ... }: stdenv.mkDerivation { inherit name src patchPhase; buildInputs = [ elmPackages.elm ]; buildPhase = elmPackages.fetchElmDeps { elmPackages = import srcs; elmVersion = "0.19.1"; inherit registryDat; }; installPhase = let elmfile = module: "${srcdir}/${builtins.replaceStrings ["."] ["/"] module}.elm"; extension = if outputJavaScript then "js" else "html"; in '' mkdir -p $out/share/doc ${lib.concatStrings (map (module: '' echo "compiling ${elmfile module}" elm make ${elmfile module} --optimize --output $out/${module}.${extension} '') targets)} cp *.html $out cp *.css $out cp -r example $out/ ''; }; in mkDerivation { name = "picarones"; patchPhase = '' substituteInPlace index.html --replace "{{ baseurl }}" ${lib.escapeShellArg baseurl} substituteInPlace slide.html --replace "{{ serverurl }}" ${lib.escapeShellArg serverurl} ''; srcs = ./elm-srcs.nix; src = ./.; targets = ["Main" "Cover"]; srcdir = "./src"; outputJavaScript = true; }