about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/interpreters/clojurescript
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/interpreters/clojurescript')
-rw-r--r--nixpkgs/pkgs/development/interpreters/clojurescript/lumo/default.nix287
-rw-r--r--nixpkgs/pkgs/development/interpreters/clojurescript/lumo/deps.edn12
-rw-r--r--nixpkgs/pkgs/development/interpreters/clojurescript/lumo/deps.nix392
-rw-r--r--nixpkgs/pkgs/development/interpreters/clojurescript/lumo/mkdir_promise.patch20
-rw-r--r--nixpkgs/pkgs/development/interpreters/clojurescript/lumo/no_mangle.patch13
-rw-r--r--nixpkgs/pkgs/development/interpreters/clojurescript/lumo/package.json51
6 files changed, 775 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/default.nix b/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/default.nix
new file mode 100644
index 000000000000..122831e80cc0
--- /dev/null
+++ b/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/default.nix
@@ -0,0 +1,287 @@
+{ stdenv
+, lib
+, fetchurl
+, clojure
+, gnutar
+, nodejs
+, jre
+, unzip
+, nodePackages
+, xcbuild
+, python
+, openssl
+, pkgs
+, fetchgit
+, darwin
+}:
+let
+  version = "1.10.1";
+  nodeVersion = "11.13.0";
+  nodeSources = fetchurl {
+    url = "https://nodejs.org/dist/v${nodeVersion}/node-v${nodeVersion}.tar.gz";
+    sha256 = "1cjzjbshxnysxkvbf41p3m8298cnhs9kfvdczgvvvlp6w16x4aac";
+  };
+  lumo-internal-classpath = "LUMO__INTERNAL__CLASSPATH";
+
+  # as found in cljs/snapshot/lumo/repl.cljs
+  requireDeps = '' \
+      cljs.analyzer \
+      cljs.compiler \
+      cljs.env \
+      cljs.js \
+      cljs.reader \
+      cljs.repl \
+      cljs.source-map \
+      cljs.source-map.base64 \
+      cljs.source-map.base64-vlq \
+      cljs.spec.alpha \
+      cljs.spec.gen.alpha \
+      cljs.tagged-literals \
+      cljs.tools.reader \
+      cljs.tools.reader.reader-types \
+      cljs.tools.reader.impl.commons \
+      cljs.tools.reader.impl.utils \
+      clojure.core.rrb-vector \
+      clojure.core.rrb-vector.interop \
+      clojure.core.rrb-vector.nodes \
+      clojure.core.rrb-vector.protocols \
+      clojure.core.rrb-vector.rrbt \
+      clojure.core.rrb-vector.transients \
+      clojure.core.rrb-vector.trees \
+      clojure.string \
+      clojure.set \
+      clojure.walk \
+      cognitect.transit \
+      fipp.visit \
+      fipp.engine \
+      fipp.deque \
+      lazy-map.core \
+      lumo.pprint.data \
+      lumo.repl \
+      lumo.repl-resources \
+      lumo.js-deps \
+      lumo.common '';
+
+  compileClojurescript = (simple: ''
+    (require '[cljs.build.api :as cljs])
+    (cljs/build \"src/cljs/snapshot\"
+      {:optimizations      ${if simple then ":simple" else ":none"}
+       :main               'lumo.core
+       :cache-analysis     true
+       :source-map         false
+       :dump-core          false
+       :static-fns         true
+       :optimize-constants false
+       :npm-deps           false
+       :verbose            true
+       :closure-defines    {'cljs.core/*target*       \"nodejs\"
+                            'lumo.core/*lumo-version* \"${version}\"}
+       :compiler-stats     true
+       :process-shim       false
+       :fn-invoke-direct   true
+       :parallel-build     false
+       :browser-repl       false
+       :target             :nodejs
+       :hashbang           false
+       ;; :libs               [ \"src/cljs/bundled\" \"src/js\" ]
+       :output-dir         ${if simple
+  then ''\"cljstmp\"''
+  else ''\"target\"''}
+       :output-to          ${if simple
+  then ''\"cljstmp/main.js\"''
+  else ''\"target/deleteme.js\"'' }})
+  ''
+  );
+
+
+  cacheToJsons = ''
+    (import [java.io ByteArrayOutputStream FileInputStream])
+    (require '[cognitect.transit :as transit]
+             '[clojure.edn :as edn]
+             '[clojure.string :as str])
+
+    (defn write-transit-json [cache]
+      (let [out (ByteArrayOutputStream. 1000000)
+            writer (transit/writer out :json)]
+        (transit/write writer cache)
+        (.toString out)))
+
+    (defn process-caches []
+      (let [cache-aot-path      \"target/cljs/core.cljs.cache.aot.edn\"
+            cache-aot-edn       (edn/read-string (slurp cache-aot-path))
+            cache-macros-path   \"target/cljs/core\$macros.cljc.cache.json\"
+            cache-macros-stream (FileInputStream. cache-macros-path)
+            cache-macros-edn    (transit/read (transit/reader cache-macros-stream :json))
+            caches              [[cache-aot-path cache-aot-edn]
+                                 [cache-macros-path cache-macros-edn]]]
+        (doseq [[path cache-edn] caches]
+          (doseq [key (keys cache-edn)]
+            (let [out-path (str/replace path #\"(\.json|\.edn)\$\"
+                             (str \".\" (munge key) \".json\"))
+                  tr-json  (write-transit-json (key cache-edn))]
+              (spit out-path tr-json))))))
+
+    (process-caches)
+  '';
+
+  trimMainJsEnd = ''
+    (let [string (slurp \"target/main.js\")]
+      (spit \"target/main.js\"
+        (subs string  0 (.indexOf string \"cljs.nodejs={};\"))))
+  '';
+
+
+  cljdeps = import ./deps.nix { inherit pkgs; };
+  classp = cljdeps.makeClasspaths {
+    extraClasspaths = [ "src/js" "src/cljs/bundled" "src/cljs/snapshot" ];
+  };
+
+
+  getJarPath = jarName: (lib.findFirst (p: p.name == jarName) null cljdeps.packages).path.jar;
+in
+stdenv.mkDerivation {
+  inherit version;
+  pname = "lumo";
+
+  src = fetchgit {
+    url = "https://github.com/anmonteiro/lumo.git";
+    rev = "${version}";
+    sha256 = "12agi6bacqic2wq6q3l28283badzamspajmajzqm7fbdl2aq1a4p";
+  };
+
+  buildInputs = [
+    nodejs
+    clojure
+    jre
+    unzip
+    python
+    openssl
+    gnutar
+    nodePackages."lumo-build-deps-../interpreters/clojurescript/lumo"
+  ]
+  ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
+    ApplicationServices
+    xcbuild
+  ]
+  );
+
+  patches = [ ./no_mangle.patch ./mkdir_promise.patch ];
+
+  postPatch = ''
+    substituteInPlace $NIX_BUILD_TOP/lumo/vendor/nexe/exe.js \
+      --replace 'glob.sync(dir + "/*")' 'glob.sync(dir + "/../*")'
+  '';
+
+  buildPhase = ''
+       # Copy over lumo-build-deps environment
+    rm yarn.lock
+    cp -rf ${nodePackages."lumo-build-deps-../interpreters/clojurescript/lumo"}/lib/node_modules/lumo-build-deps/* ./
+
+    # configure clojure-cli
+    mkdir ./.cpcache
+    export CLJ_CONFIG=`pwd`
+    export CLJ_CACHE=`pwd`/.cpcache
+
+    # require more namespaces for cljs-bundle
+    sed -i "s!ns lumo.core! \
+              ns lumo.core  \
+               (:require ${requireDeps}) \
+               (:require-macros [clojure.template :as temp] \
+                                [cljs.test :as test])!g" \
+              ./src/cljs/snapshot/lumo/core.cljs
+
+    # Step 1: compile clojurescript with :none and :simple
+    ${clojure}/bin/clojure -Scp ${classp} -e "${compileClojurescript true}"
+    ${clojure}/bin/clojure -Scp ${classp} -e "${compileClojurescript false}"
+    cp -f cljstmp/main.js target/main.js
+    ${clojure}/bin/clojure -Scp ${classp} -e "${trimMainJsEnd}"
+
+    # Step 2: sift files
+    unzip -o ${getJarPath "org.clojure/clojurescript"} -d ./target
+    unzip -j ${getJarPath "org.clojure/clojure"} "clojure/template.clj" -d ./target/clojure
+    unzip -o ${getJarPath "org.clojure/google-closure-library"} -d ./target
+    unzip -o ${getJarPath "org.clojure/google-closure-library-third-party"} -d ./target
+    unzip -o ${getJarPath "org.clojure/tools.reader"} -d ./target
+    unzip -o ${getJarPath "org.clojure/test.check"} -d ./target
+    cp -rf ./src/cljs/bundled/lumo/* ./target/lumo/
+    cp -rf ./src/cljs/snapshot/lumo/repl.clj ./target/lumo/
+    # cleanup
+    mv ./target/main.js ./target/main
+    rm ./target/*\.js
+    mv ./target/main ./target/main.js
+    rm ./target/AUTHORS
+    rm ./target/LICENSE
+    rm ./target/*.edn
+    rm ./target/*.md
+    rm -rf ./target/css
+    rm -rf ./target/META-INF
+    rm -rf ./target/com
+    rm -rf ./target/cljs/build
+    rm -rf ./target/cljs/repl
+    rm  ./target/cljs/core\.cljs\.cache.aot\.json
+    rm  ./target/cljs/source_map\.clj
+    rm  ./target/cljs/repl\.cljc
+    rm  ./target/cljs/externs\.clj
+    rm  ./target/cljs/closure\.clj
+    rm  ./target/cljs/util\.cljc
+    rm  ./target/cljs/js_deps\.cljc
+    rm  ./target/cljs/analyzer/utils\.clj
+    rm  ./target/cljs/core/macros\.clj
+    rm  ./target/cljs/compiler/api.clj
+    rm  ./target/goog/test_module*
+    rm  ./target/goog/transpile\.js
+    rm  ./target/goog/base_*
+    find ./target -type f -name '*.class' -delete
+    find ./target -type d -empty -delete
+
+    # Step 3: generate munged cache jsons
+    ${clojure}/bin/clojure -Scp ${classp} -e "${cacheToJsons}"
+    rm  ./target/cljs/core\$macros\.cljc\.cache\.json
+
+
+    # Step 4: Bunde javascript
+    NODE_ENV=production node scripts/bundle.js
+    node scripts/bundleForeign.js
+
+    # Step 5: Backup resources
+    cp -R target resources_bak
+
+    # Step 6: Package executeable 1st time
+    # fetch node sources and copy to palce that nexe will find
+    mkdir -p tmp/node/${nodeVersion}
+    cp ${nodeSources} tmp/node/${nodeVersion}/node-${nodeVersion}.tar.gz
+    tar -C ./tmp/node/${nodeVersion} -xf ${nodeSources} --warning=no-unknown-keyword
+    mv ./tmp/node/${nodeVersion}/node-v${nodeVersion}/* ./tmp/node/${nodeVersion}/
+    rm -rf ${lumo-internal-classpath}
+    cp -rf target ${lumo-internal-classpath}
+    node scripts/package.js ${nodeVersion}
+    rm -rf target
+    mv ${lumo-internal-classpath} target
+
+    # Step 7: AOT Macros
+    sh scripts/aot-bundle-macros.sh
+
+    # Step 8: Package executeable 2nd time
+    node scripts/package.js ${nodeVersion}
+  '';
+
+  dontStrip = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp build/lumo $out/bin
+  '';
+
+  meta = {
+    description = "Fast, cross-platform, standalone ClojureScript environment";
+    longDescription = ''
+      Lumo is a fast, standalone ClojureScript REPL that runs on Node.js and V8.
+      Thanks to V8's custom startup snapshots, Lumo starts up instantaneously,
+      making it the fastest Clojure REPL in existence.
+    '';
+    homepage = "https://github.com/anmonteiro/lumo";
+    license = stdenv.lib.licenses.epl10;
+    maintainers = [ stdenv.lib.maintainers.hlolli ];
+    platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/deps.edn b/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/deps.edn
new file mode 100644
index 000000000000..7a2faee1d7a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/deps.edn
@@ -0,0 +1,12 @@
+{:deps
+ {org.clojure/clojure       {:mvn/version "1.10.1"}
+  org.clojure/clojurescript {:mvn/version "1.10.520"}
+  org.clojure/test.check    {:mvn/version "0.10.0-alpha4"}
+  org.clojure/tools.reader   {:mvn/version "1.3.2"
+                              :exclusions  [org.clojure/clojure org.clojure/clojurescript]}
+  com.cognitect/transit-cljs {:mvn/version "0.8.256"
+                              :exclusions  [org.clojure/clojure org.clojure/clojurescript]}
+  malabarba/lazy-map         {:mvn/version "1.3"
+                              :exclusions  [org.clojure/clojure org.clojure/clojurescript]}
+  fipp                       {:mvn/version "0.6.17"
+                              :exclusions  [org.clojure/clojure org.clojure/clojurescript]}}}
diff --git a/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/deps.nix b/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/deps.nix
new file mode 100644
index 000000000000..4f3beff3b819
--- /dev/null
+++ b/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/deps.nix
@@ -0,0 +1,392 @@
+# generated by clj2nix-1.0.4
+{ pkgs }:
+
+let repos = [
+      "https://repo.clojars.org/"
+      "https://repo1.maven.org/"
+      "http://oss.sonatype.org/content/repositories/releases/"
+      "http://oss.sonatype.org/content/repositories/public/"
+      "http://repo.typesafe.com/typesafe/releases/"
+    ];
+
+in rec {
+  makePaths = {extraClasspaths ? []}: (builtins.map (dep: if builtins.hasAttr "jar" dep.path then dep.path.jar else dep.path) packages) ++ extraClasspaths;
+  makeClasspaths = {extraClasspaths ? []}: builtins.concatStringsSep ":" (makePaths {inherit extraClasspaths;});
+
+  packages = [
+    {
+      name = "com.cognitect/transit-java";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "transit-java";
+        groupId = "com.cognitect";
+        sha512 = "80365a4f244e052b6c4fdfd2fd3b91288835599cb4dd88e0e0dae19883dcda39afee83966810ed81beff342111c3a45a66f5601c443f3ad49904908c43631708";
+        version = "0.8.332";
+      };
+    }
+
+    {
+      name = "org.clojure/data.json";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "data.json";
+        groupId = "org.clojure";
+        sha512 = "ce526bef01bedd31b772954d921a61832ae60af06121f29080853f7932326438b33d183240a9cffbe57e00dc3744700220753948da26b8973ee21c30e84227a6";
+        version = "0.2.6";
+      };
+    }
+
+    {
+      name = "org.clojure/clojure";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "clojure";
+        groupId = "org.clojure";
+        sha512 = "f28178179483531862afae13e246386f8fda081afa523d3c4ea3a083ab607d23575d38ecb9ec0ee7f4d65cbe39a119f680e6de4669bc9cf593aa92be0c61562b";
+        version = "1.10.1";
+      };
+    }
+
+    {
+      name = "commons-codec/commons-codec";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "commons-codec";
+        groupId = "commons-codec";
+        sha512 = "8edecc0faf38e8620460909d8191837f34e2bb2ce853677c486c5e79bb79e88d043c3aed69c11f1365c4884827052ee4e1c18ca56e38d1a5bc0ce15c57daeee3";
+        version = "1.10";
+      };
+    }
+
+    {
+      name = "com.google.errorprone/error_prone_annotations";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "error_prone_annotations";
+        groupId = "com.google.errorprone";
+        sha512 = "bd2135cc9eb2c652658a2814ec9c565fa3e071d4cff590cbe17b853885c78c9f84c1b7b24ba736f4f30ed8cec60a6af983827fcbed61ff142f27ac808e97fc6b";
+        version = "2.1.3";
+      };
+    }
+
+    {
+      name = "org.clojure/core.specs.alpha";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "core.specs.alpha";
+        groupId = "org.clojure";
+        sha512 = "348c0ea0911bc0dcb08655e61b97ba040649b4b46c32a62aa84d0c29c245a8af5c16d44a4fa5455d6ab076f4bb5bbbe1ad3064a7befe583f13aeb9e32a169bf4";
+        version = "0.2.44";
+      };
+    }
+
+    {
+      name = "org.clojure/spec.alpha";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "spec.alpha";
+        groupId = "org.clojure";
+        sha512 = "18c97fb2b74c0bc2ff4f6dc722a3edec539f882ee85d0addf22bbf7e6fe02605d63f40c2b8a2905868ccd6f96cfc36a65f5fb70ddac31c6ec93da228a456edbd";
+        version = "0.2.176";
+      };
+    }
+
+    {
+      name = "org.codehaus.mojo/animal-sniffer-annotations";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "animal-sniffer-annotations";
+        groupId = "org.codehaus.mojo";
+        sha512 = "9e5e3ea9e06e0ac9463869fd0e08ed38f7042784995a7b50c9bfd7f692a53f0e1430b9e1367dc772d0d4eafe5fd2beabbcc60da5008bd792f9e7ec8436c0f136";
+        version = "1.14";
+      };
+    }
+
+    {
+      name = "com.googlecode.json-simple/json-simple";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "json-simple";
+        groupId = "com.googlecode.json-simple";
+        sha512 = "f8798bfbcc8ab8001baf90ce47ec2264234dc1da2d4aa97fdcdc0990472a6b5a5a32f828e776140777d598a99d8a0c0f51c6d0767ae1a829690ab9200ae35742";
+        version = "1.1.1";
+      };
+    }
+
+    {
+      name = "com.cognitect/transit-cljs";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "transit-cljs";
+        groupId = "com.cognitect";
+        sha512 = "318b98ddd63629f37b334bb90e625bc31ab6abcf0b1fa80d8e097551658f2d9219b5ee35869a31f2976d7d385da83bea0c07b0d097babcae241ecbd0fe8a7ecd";
+        version = "0.8.256";
+      };
+    }
+
+    {
+      name = "org.clojure/google-closure-library";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "google-closure-library";
+        groupId = "org.clojure";
+        sha512 = "75631182ef12f21723fe3eba1003d8cf9b8348a51512961e4e1b87bc24d8f3abb14a70c856f08cdaa5588a2d7c2b1b0c03aeaa3c4c5f2ed745a85f59ceeab83a";
+        version = "0.0-20170809-b9c14c6b";
+      };
+    }
+
+    {
+      name = "fipp";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "fipp";
+        groupId = "fipp";
+        sha512 = "d844ab63d28cb5e31657cc38e574bbc7072a78419c997f25445ac6ea4a719904a4f4844b37e3f664a8d2e49bd38ff1006a9e8c6e63fb4e2f0a2322d6c2638275";
+        version = "0.6.17";
+      };
+    }
+
+    {
+      name = "org.clojure/clojurescript";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "clojurescript";
+        groupId = "org.clojure";
+        sha512 = "b241959d6bd2ab659920965d301508226e26b3edcee469e4cd516cd4ed014b1a6b132c17ee7d96a8e66fe27fd01a74813ac8b85958d260f9fdbbeb4348d57ff1";
+        version = "1.10.520";
+      };
+    }
+
+    {
+      name = "com.google.jsinterop/jsinterop-annotations";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "jsinterop-annotations";
+        groupId = "com.google.jsinterop";
+        sha512 = "b6fd98a9167d031f6bff571567d4658fda62c132dc74d47ca85e02c9bb3ce8812b1012c67f4c81501ab0cbd9ccd9cda5dcf32d306e04368ace7a173cecae975d";
+        version = "1.0.0";
+      };
+    }
+
+    {
+      name = "com.fasterxml.jackson.core/jackson-core";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "jackson-core";
+        groupId = "com.fasterxml.jackson.core";
+        sha512 = "a1bd6c264b9ab07aad3d0f26b65757e35ff47904ab895bb7f997e3e1fd063129c177ad6f69876907b04ff8a43c6b1770a26f53a811633a29e66a5dce57194f64";
+        version = "2.8.7";
+      };
+    }
+
+    {
+      name = "malabarba/lazy-map";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "lazy-map";
+        groupId = "malabarba";
+        sha512 = "ce56d6f03ac344579e15f062cdd4c477c0323da716d4d4106c4edb746959699e0b294b25aacf8ecf1579a6bdd5556a60f4bcb1648d22832984c069a0431c840f";
+        version = "1.3";
+      };
+    }
+
+    {
+      name = "com.cognitect/transit-js";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "transit-js";
+        groupId = "com.cognitect";
+        sha512 = "6ca0978e633e41b45ff5a76df79099ba7c4900a8ca9f6acd2a903e4ab10a1ec0c83d4127009df9dac1337debaba01f7ff1d5cced1c2159c05ef94845f73f0623";
+        version = "0.8.846";
+      };
+    }
+
+    {
+      name = "org.mozilla/rhino";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "rhino";
+        groupId = "org.mozilla";
+        sha512 = "466e7a76303ea191802b5e7adb3dff64c1d6283a25ce87447296b693b87b166f4cdd191ef7dc130a5739bfa0e4a81b08550f607c84eec167406d9be2225562dc";
+        version = "1.7R5";
+      };
+    }
+
+    {
+      name = "org.clojure/google-closure-library-third-party";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "google-closure-library-third-party";
+        groupId = "org.clojure";
+        sha512 = "57fa84fbbca3eb9e612d2842e4476b74f64d13dd076ffca6c9d9e15c4ca8a2f2c56cc19307bcad0ab5b4f9cb0c3e7900ccc845bd570ebc92e2633885ab621f35";
+        version = "0.0-20170809-b9c14c6b";
+      };
+    }
+
+    {
+      name = "com.google.javascript/closure-compiler-externs";
+      path = pkgs.fetchMavenArtifact {
+        inherit repos;
+        artifactId = "closure-compiler-externs";
+        groupId = "com.google.javascript";
+        sha512 = "1a47c8559144095c0b23a8e40acd7185625cea5a4c103eb75fbacd32d5809d087bfb60aaf57066329649c6017ec5f993756024e767a5b8f84926371ba6183a82";
+        version = "v20180805";
+      };
+    }
+
+    {
+    name = "org.javassist/javassist";
+    path = pkgs.fetchMavenArtifact {
+      inherit repos;
+      artifactId = "javassist";
+      groupId = "org.javassist";
+      sha512 = "ad65ee383ed83bedecc2073118cb3780b68b18d5fb79a1b2b665ff8529df02446ad11e68f9faaf4f2e980065f5946761a59ada379312cbb22d002625abed6a4f";
+      version = "3.18.1-GA";
+    };
+  }
+
+  {
+    name = "com.google.guava/guava";
+    path = pkgs.fetchMavenArtifact {
+      inherit repos;
+      artifactId = "guava";
+      groupId = "com.google.guava";
+      sha512 = "429ceeec0350ba98e2b089b8b70ded2ec570c3a684894a7545d10592c1c7be42dacd1fad8b2cb9123aa3612575ce1b56e1bb54923443fc293f8e9adeac2762ee";
+      version = "25.1-jre";
+    };
+  }
+
+  {
+    name = "org.msgpack/msgpack";
+    path = pkgs.fetchMavenArtifact {
+      inherit repos;
+      artifactId = "msgpack";
+      groupId = "org.msgpack";
+      sha512 = "a2741bed01f9c37ba3dbe6a7ab9ce936d36d4da97c35e215250ac89ac0851fc5948d83975ea6257d5dce1d43b6b5147254ecfb4b33f9bbdc489500b3ff060449";
+      version = "0.6.12";
+    };
+  }
+
+  {
+    name = "com.google.j2objc/j2objc-annotations";
+    path = pkgs.fetchMavenArtifact {
+      inherit repos;
+      artifactId = "j2objc-annotations";
+      groupId = "com.google.j2objc";
+      sha512 = "a4a0b58ffc2d9f9b516f571bcd0ac14e4d3eec15aacd6320a4a1a12045acce8c6081e8ce922c4e882221cedb2cc266399ab468487ae9a08124d65edc07ae30f0";
+      version = "1.1";
+    };
+  }
+
+  {
+    name = "com.cognitect/transit-clj";
+    path = pkgs.fetchMavenArtifact {
+      inherit repos;
+      artifactId = "transit-clj";
+      groupId = "com.cognitect";
+      sha512 = "ad838d9e5688c8cebe54972ad0c9a6db428ec1cece8c8b078e8e8d4b0c7870b328239d2bc9dd8fcbedcba56ca0de9afb5a0a843ff5f630dc039118de7eb45eba";
+      version = "0.8.309";
+    };
+  }
+
+  {
+    name = "args4j/args4j";
+    path = pkgs.fetchMavenArtifact {
+      inherit repos;
+      artifactId = "args4j";
+      groupId = "args4j";
+      sha512 = "5f0651234c8f8b130fddb39fa832c6da47d3e21bc3434307554314c47e672c28d005c64e9effe85d552190cfc27966b1f005740ffd40b4e1bec2cb257d7feedb";
+      version = "2.0.26";
+    };
+  }
+
+  {
+    name = "org.clojure/core.rrb-vector";
+    path = pkgs.fetchMavenArtifact {
+      inherit repos;
+      artifactId = "core.rrb-vector";
+      groupId = "org.clojure";
+      sha512 = "4e410c4a90a869e98d5d69a8a6dd6427e9d77b70e1a2b54cf24baf23389f22e7a208375783c2fdc5c1a5acfb8511a5c5ed57ad1a946d5bffd203f453d90a6155";
+      version = "0.0.14";
+    };
+  }
+
+  {
+    name = "org.checkerframework/checker-qual";
+    path = pkgs.fetchMavenArtifact {
+      inherit repos;
+      artifactId = "checker-qual";
+      groupId = "org.checkerframework";
+      sha512 = "3c38b0b9e0bde464268cff5fdb1894a048240b039093ee3abe5b32976a22737d26b355f8793f630a7f0b319fdb019a6fcd9ee1d5219676f0f10c0b0f496b61b7";
+      version = "2.0.0";
+    };
+  }
+
+  {
+    name = "org.clojure/tools.reader";
+    path = pkgs.fetchMavenArtifact {
+      inherit repos;
+      artifactId = "tools.reader";
+      groupId = "org.clojure";
+      sha512 = "290a2d98b2eec08a8affc2952006f43c0459c7e5467dc454f5fb5670ea7934fa974e6be19f7e7c91dadcfed62082d0fbcc7788455b7446a2c9c5af02f7fc52b6";
+      version = "1.3.2";
+    };
+  }
+
+  {
+    name = "com.google.javascript/closure-compiler-unshaded";
+    path = pkgs.fetchMavenArtifact {
+      inherit repos;
+      artifactId = "closure-compiler-unshaded";
+      groupId = "com.google.javascript";
+      sha512 = "4fa7029aabd9ff84255d56004707486726db9c770f43cb10dc44fb53a3254d588a0f47f937f55401d7f319267ec2362c87f5ea709bcfa06f12a66fe22cb8c53d";
+      version = "v20180805";
+    };
+  }
+
+  {
+    name = "org.clojure/test.check";
+    path = pkgs.fetchMavenArtifact {
+      inherit repos;
+      artifactId = "test.check";
+      groupId = "org.clojure";
+      sha512 = "60fa3bd38c32cf193c573f1bd47c6abd7e7a5bb2fc7f7f9f97aa9dcd54d5e2eab9e351f5f83b01bb96b32811a9f2f5ab384c6b7b7ebbb6c86d1ad4f2789351bf";
+      version = "0.10.0-alpha4";
+    };
+  }
+
+  {
+    name = "com.google.protobuf/protobuf-java";
+    path = pkgs.fetchMavenArtifact {
+      inherit repos;
+      artifactId = "protobuf-java";
+      groupId = "com.google.protobuf";
+      sha512 = "230fc4360b8b2ee10eb73d756c58478b6c779433aa4ca91938404bbfd0ada516d3215664dbe953c96649e33bbef293958e4ad4616671f0c246883196ece92998";
+      version = "3.0.2";
+    };
+  }
+
+  {
+    name = "com.google.code.findbugs/jsr305";
+    path = pkgs.fetchMavenArtifact {
+      inherit repos;
+      artifactId = "jsr305";
+      groupId = "com.google.code.findbugs";
+      sha512 = "bb09db62919a50fa5b55906013be6ca4fc7acb2e87455fac5eaf9ede2e41ce8bbafc0e5a385a561264ea4cd71bbbd3ef5a45e02d63277a201d06a0ae1636f804";
+      version = "3.0.2";
+    };
+  }
+
+  {
+    name = "com.google.code.gson/gson";
+    path = pkgs.fetchMavenArtifact {
+      inherit repos;
+      artifactId = "gson";
+      groupId = "com.google.code.gson";
+      sha512 = "c3cdaf66a99e6336abc80ff23374f6b62ac95ab2ae874c9075805e91d849b18e3f620cc202b4978fc92b73d98de96089c8714b1dd096b2ae1958cfa085715f7a";
+      version = "2.7";
+    };
+  }
+
+  ];
+  }
diff --git a/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/mkdir_promise.patch b/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/mkdir_promise.patch
new file mode 100644
index 000000000000..e9504bb5c1a0
--- /dev/null
+++ b/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/mkdir_promise.patch
@@ -0,0 +1,20 @@
+diff --git a/vendor/nexe/exe.js b/vendor/nexe/exe.js
+index 21e78bb..ecbfca4 100644
+--- a/vendor/nexe/exe.js
++++ b/vendor/nexe/exe.js
+@@ -254,9 +254,7 @@ return initModule._compile(${JSON.stringify(source)}, process.execPath);
+      */
+ 
+     function makeOutputDirectory(next) {
+-      mkdirp(path.dirname(options.output), function() {
+-        next();
+-      });
++        mkdirp(path.dirname(options.output)).then(() => next());
+     },
+ 
+     /**
+@@ -1107,4 +1105,3 @@ exports.package = function(path, options) {
+ 
+   return obj;
+ }
+-
diff --git a/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/no_mangle.patch b/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/no_mangle.patch
new file mode 100644
index 000000000000..9af223411958
--- /dev/null
+++ b/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/no_mangle.patch
@@ -0,0 +1,13 @@
+diff --git a/scripts/bundle.js b/scripts/bundle.js
+index 16425a4..0d510fc 100644
+--- a/scripts/bundle.js
++++ b/scripts/bundle.js
+@@ -73,6 +73,8 @@ const plugins = [
+ if (!isDevBuild) {
+   plugins.push(
+     babelMinify({
++     evaluate: false,
++      mangle: false,
+       comments: false,
+       removeConsole: true,
+       removeDebugger: true,
diff --git a/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/package.json b/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/package.json
new file mode 100644
index 000000000000..6ab3f9616c78
--- /dev/null
+++ b/nixpkgs/pkgs/development/interpreters/clojurescript/lumo/package.json
@@ -0,0 +1,51 @@
+{
+  "name": "lumo-build-deps",
+  "version": "1.10.1",
+  "dependencies": {
+    "@babel/core": "^7.1.5",
+    "@babel/plugin-external-helpers": "7.8.3",
+    "@babel/plugin-proposal-class-properties": "^7.1.0",
+    "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
+    "@babel/plugin-transform-runtime": "^7.1.0",
+    "@babel/preset-env": "^7.1.5",
+    "@babel/preset-stage-2": "7.8.3",
+    "@babel/runtime": "^7.1.5",
+    "async": "^3.1.1",
+    "async-retry": "^1.2.3",
+    "babel-core": "^7.0.0-bridge.0",
+    "babel-eslint": "10.0.3",
+    "babel-jest": "^25.1.0",
+    "babel-loader": "^8.0.4",
+    "babel-plugin-transform-flow-strip-types": "6.22.0",
+    "browserify": "^16.2.3",
+    "chalk": "^3.0.0",
+    "colors": "^1.3.3",
+    "cross-env": "7.0.0",
+    "death": "^1.1.0",
+    "flow-bin": "0.118.0",
+    "google-closure-compiler-js": "20170910.0.1",
+    "glob": "^7.1.3",
+    "gunzip-maybe": "^1.4.1",
+    "insert-module-globals": "^7.2.0",
+    "jszip": "github:anmonteiro/jszip#patch-1",
+    "mkdirp": "^1.0.3",
+    "ncp": "^2.0.0",
+    "node-fetch": "^2.2.1",
+    "paredit.js": "0.3.6",
+    "posix-getopt": "github:anmonteiro/node-getopt#master",
+    "prettier": "1.19.1",
+    "progress": "^2.0.0",
+    "read-pkg": "^5.2.0",
+    "request": "^2.88.0",
+    "rollup": "^1.9.0",
+    "rollup-plugin-babel": "^4.3.2",
+    "rollup-plugin-babel-minify": "^9.1.1",
+    "rollup-plugin-commonjs": "^10.0.0",
+    "rollup-plugin-node-resolve": "^5.0.0",
+    "rollup-plugin-replace": "^2.1.1",
+    "tar-stream": "^2.0.1",
+    "webpack": "^4.25.1",
+    "webpack-cli": "^3.2.3",
+    "which-promise": "^1.0.0"
+  }
+}