diff --git a/doc/package-notes.xml b/doc/package-notes.xml
index 266a8092216..9d8217d60bc 100644
--- a/doc/package-notes.xml
+++ b/doc/package-notes.xml
@@ -346,4 +346,24 @@ packageOverrides = pkgs: {
+
+
+Elm
+
+
+The Nix expressions for Elm reside in
+pkgs/development/compilers/elm. They are generated
+automatically by update-elm.rb script. One should
+specify versions of Elm packages inside the script, clear the
+packages directory and run the script from inside it.
+elm-reactor is special because it also has Elm package
+dependencies. The process is not automated very much for now -- you should
+get the elm-reactor source tree (e.g. with
+nix-shell) and run elm2nix.rb inside
+it. Place the resulting package.nix file into
+packages/elm-reactor-elm.nix.
+
+
+
+
diff --git a/nixos/doc/manual/release-notes/rl-unstable.xml b/nixos/doc/manual/release-notes/rl-unstable.xml
index 30da98faa33..8fbac05e968 100644
--- a/nixos/doc/manual/release-notes/rl-unstable.xml
+++ b/nixos/doc/manual/release-notes/rl-unstable.xml
@@ -80,6 +80,9 @@ was accordingly renamed to bomi
was accordingly renamed to electron
+Elm is not released on Hackage anymore. You should now use elmPackages.elm
+which contains the latest Elm platform.
+
The CUPS printing service has been updated to version 2.0.2.
diff --git a/pkgs/development/compilers/elm/default.nix b/pkgs/development/compilers/elm/default.nix
new file mode 100644
index 00000000000..4a056e61de9
--- /dev/null
+++ b/pkgs/development/compilers/elm/default.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv, buildEnv, haskell, nodejs, fetchurl, fetchpatch, makeWrapper }:
+
+let
+ makeElmStuff = deps:
+ let json = builtins.toJSON (lib.mapAttrs (name: info: info.version) deps);
+ cmds = lib.mapAttrsToList (name: info: let
+ pkg = stdenv.mkDerivation {
+
+ name = lib.replaceChars ["/"] ["-"] name + "-${info.version}";
+
+ src = fetchurl {
+ url = "https://github.com/${name}/archive/${info.version}.tar.gz";
+ meta.homepage = "https://github.com/${name}/";
+ inherit (info) sha256;
+ };
+
+ phases = [ "unpackPhase" "installPhase" ];
+
+ installPhase = ''
+ mkdir -p $out
+ cp -r * $out
+ '';
+
+ };
+ in ''
+ mkdir -p elm-stuff/packages/${name}
+ ln -s ${pkg} elm-stuff/packages/${name}/${info.version}
+ '') deps;
+ in ''
+ export HOME=/tmp
+ mkdir elm-stuff
+ cat > elm-stuff/exact-dependencies.json < "0.15.1",
+ "elm-package" => "0.5.1",
+ "elm-make" => "0.2",
+ "elm-reactor" => "0.3.2",
+ "elm-repl" => "0.4.2"
+ }
+
+for pkg, ver in $elm_packages
+ system "cabal2nix https://github.com/elm-lang/#{pkg} --revision refs/tags/#{ver} --jailbreak > #{pkg}.nix"
+end
+
+File.open("release.nix", 'w') do |file|
+ file.puts "{"
+ file.puts " version = \"#{$elm_version}\";"
+ file.puts " packages = {"
+ for pkg, ver in $elm_packages
+ file.puts " #{pkg} = callPackage ./#{pkg}.nix { };"
+ end
+ file.puts " };"
+ file.puts "}"
+end
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 56b257669aa..ecb009152e8 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -3729,6 +3729,8 @@ let
eql = callPackage ../development/compilers/eql {};
+ elmPackages = callPackage ../development/compilers/elm { };
+
adobe_flex_sdk = callPackage ../development/compilers/adobe-flex-sdk { };
fpc = callPackage ../development/compilers/fpc { };