diff options
| -rw-r--r-- | .envrc | 1 | ||||
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | Makefile | 14 | ||||
| -rw-r--r-- | flake.lock | 27 | ||||
| -rw-r--r-- | flake.nix | 73 | ||||
| -rw-r--r-- | scripts/repl.clj | 6 | ||||
| -rw-r--r-- | scripts/web_repl.clj | 24 | ||||
| -rw-r--r-- | src/stem/native/core.clj | 5 | ||||
| -rw-r--r-- | src/stem/web/core.cljs | 9 |
9 files changed, 162 insertions, 0 deletions
@@ -0,0 +1 @@ +use_flake diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a441bc8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/out +/build +/.direnv
\ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7e63f45 --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +.PHONY: build repl web-build web-repl + +build: + @clojure -Scp '$(CLASSPATH):src:.' -M -m scripts.repl + +repl: + @clojure -Scp '$(CLASSPATH):src:.' -M -m scripts.repl + +web-build: + mkdir -p build/web + @clojure -Scp '$(CLASSPATH):src' -M -m cljs.main --optimizations advanced --output-to build/web/app.js --compile stem.web.core + +web-repl: + @clojure -Scp '$(CLASSPATH):src:.' -M -m scripts.web-repl diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..934192c --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1759381078, + "narHash": "sha256-gTrEEp5gEspIcCOx9PD8kMaF1iEmfBcTbO0Jag2QhQs=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "7df7ff7d8e00218376575f0acdcc5d66741351ee", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..88e1be6 --- /dev/null +++ b/flake.nix @@ -0,0 +1,73 @@ +{ + description = "stem"; + inputs = { + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + }; + + outputs = { self, nixpkgs }: + let + system = "x86_64-linux"; + pkgs = import nixpkgs { + inherit system; + }; + mavenRepo = repo: name: version: hash: + let + pnm = builtins.elemAt name (builtins.length name - 1); + in pkgs.stdenv.mkDerivation rec { + pname = pnm; + base = builtins.foldl' (x: y: "${x}/${y}") repo name; + inherit version; + src = pkgs.fetchurl { + url = "${base}/${version}/${pnm}-${version}.jar"; + inherit hash; + }; + phases = ["installPhase"]; + installPhase = '' + mkdir -p $out/share/java + install -Dm644 $src $out/share/java/ + ''; + }; + maven = mavenRepo "https://repo1.maven.org/maven2"; + clojars = mavenRepo "https://repo.clojars.org"; + in { + devShells.${system}.default = pkgs.mkShell { + buildInputs = [ + # clojure + (maven ["org" "clojure" "clojure"] "1.12.3" "sha256-yyoaPbHCzXbvT6SlRdWmXxCxtIt/dnLwoQn1R28FcWY=") + + # cljs and closure compiler + (maven ["org" "clojure" "spec.alpha"] "0.5.238" "sha256-lM2ZtupjlkHzevSGCmQ7btOZ7lqL5dcXz/C2Y8jXUHc=") + (maven ["org" "clojure" "core.specs.alpha"] "0.4.74" "sha256-63OsCM9JuoQMiLpnvu8RM2ylVDM9lAiAjXiUbg/rnds=") + + (maven ["org" "clojure" "clojurescript"] "1.12.42" "sha256-rIruj3lFf+MuY9XrVYERzQw1ZAT6t7364zGLrvVzmjs=") + (maven ["org" "javassist" "javassist"] "3.18.1-GA" "sha256-P7cSMa/QmLsPk/Xrl6qCkcjQVWN5El5Zb5Lsj5RMYWI=") + (maven ["org" "clojure" "tools.reader"] "1.3.6" "sha256-EdGzHyxlwzVbKSu5tEuPyv2lS0TaY+NKuXt5qKs7uOA=") + (maven ["org" "clojure" "google-closure-library"] "0.0-20250515-f04e4c0e" "sha256-RRzDKmiXRIySWpxyM4p6VzqHS9PaCzhe2ofoHAYNfho=") + (maven ["javax" "xml" "bind" "jaxb-api"] "2.3.0" "sha256-iDAHmJ03PRnzUrqXkrJd7CHcfQ4gWnEKk6OBUQG7PQM=") + (maven ["com" "fasterxml" "jackson" "core" "jackson-core"] "2.8.7" "sha256-JW/zQRirKS0bTz7k0sPl5fD2CdjgfFforR9RxG1Pu0Y=") + (maven ["com" "google" "javascript" "closure-compiler"] "v20250402" "sha256-b8vSD3WZTtxoVuM2vAFHzj3XEQxrOhMuk+31gGc8crs=") + (maven ["org" "clojure" "google-closure-library-third-party"] "0.0-20250515-f04e4c0e" "sha256-SZqLXub/xjYyvedFqYAjlnp6Zsy2rXZBESH7J0XY06M=") + (maven ["com" "cognitect" "transit-java"] "1.0.362" "sha256-62hXPUbdqFYBzGPZscKH/rXonnbpJQLoJu/QoyP3y1Q=") + (maven ["com" "googlecode" "json-simple" "json-simple"] "1.1.1" "sha256-TmlpaJK4i0HFXUmrL9zCHurZK/VKzFiMAFBZbDt1GZw=") + + # nrepl + (clojars ["nrepl" "nrepl"] "1.7.0" "sha256-0HOQJ3GQ4Kl04Ul/1EhQBaSWT59ValC9UwUJ9IumXBs=") + + # cider + (clojars ["cider" "cider-nrepl"] "0.59.0" "sha256-IgNXuRhGLbP2DgKJUbqFgI1wCTduhCGFjcHygTFlZCw=") + (clojars ["cider" "orchard"] "0.41.0" "sha256-bR8oL2MsHI/fx9/SrPPEvp0qu/+69LXH84YUwrIdcYM=") + (clojars ["cider" "piggieback"] "0.6.1" "sha256-v1kWMg8jk6LdmcRw4Vgj2S323ICz5mJbR8+uD2RR5js=") + (clojars ["compliment" "compliment"] "0.7.1" "sha256-HqLyvCErmmum3vNucdFOMsNd0Uad3n9rQOo/hLYhQ28=") + (clojars ["io" "github" "tonsky" "clj-reload"] "1.0.0" "sha256-cZUMORmHYZZzehoEV4ekG715IxP+WRnZ0Stk/YhEmjE=") + (clojars ["mx" "cider" "logjam"] "0.3.0" "sha256-h1moSv+GjTrjwDEil7l6psf7j5NUK39llkv5kT9K4J8=") + (clojars ["org" "rksm" "suitable"] "0.6.2" "sha256-o1XNzK522A2EU+s9kYQDQzAjWYYhbN8+lKdUngVilYc=") + ]; + nativeBuildInputs = [ + pkgs.jdk # has a hook that adds jars from buildInputs to CLASSPATH + pkgs.clojure + pkgs.clj-kondo + pkgs.web-ext + ]; + }; + }; +} diff --git a/scripts/repl.clj b/scripts/repl.clj new file mode 100644 index 0000000..31f9518 --- /dev/null +++ b/scripts/repl.clj @@ -0,0 +1,6 @@ +(ns scripts.repl + (:require clojure.main nrepl.server cider.nrepl)) +(defn -main [] + (nrepl.server/start-server :port 7888 :handler cider.nrepl/cider-nrepl-handler) + (println "nREPL server started on port 7888") + (clojure.main/repl)) diff --git a/scripts/web_repl.clj b/scripts/web_repl.clj new file mode 100644 index 0000000..734ffa8 --- /dev/null +++ b/scripts/web_repl.clj @@ -0,0 +1,24 @@ +(ns scripts.web-repl + (:require + cljs.repl cljs.repl.browser + nrepl.core nrepl.server + cider.nrepl cider.nrepl.middleware + cider.piggieback + )) +(def env (atom nil)) +(defn piggieback [] + (cider.piggieback/cljs-repl @env)) +(defn -main [] + (let [ _server + (nrepl.server/start-server :port 7888 + :handler + (apply nrepl.server/default-handler + (conj + (map resolve cider.nrepl.middleware/cider-middleware) + #'cider.piggieback/wrap-cljs-repl)) + ) + benv (cljs.repl.browser/repl-env) + ] + (swap! env (fn [_] benv)) + (println "nREPL server started on port 7888") + (cljs.repl/repl benv))) diff --git a/src/stem/native/core.clj b/src/stem/native/core.clj new file mode 100644 index 0000000..305c6b2 --- /dev/null +++ b/src/stem/native/core.clj @@ -0,0 +1,5 @@ +(ns stem.native.core) + +(+ 1 1) + +(+ 2 2) diff --git a/src/stem/web/core.cljs b/src/stem/web/core.cljs new file mode 100644 index 0000000..5f7e73c --- /dev/null +++ b/src/stem/web/core.cljs @@ -0,0 +1,9 @@ +(ns stem.web.core + (:require cljs.pprint)) + +(println "test!") + +(defn hi [] + (println "hi!")) + +(+ 1 2) |
