summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2026-04-26 22:23:19 -0400
committerLLLL Colonq <llll@colonq>2026-04-26 22:23:19 -0400
commit1c7a93144ae794b0f81039c38cc4a7a969230925 (patch)
treea2edf372e22f0656a62eb43deb4451a09245875f
Initial commitHEADmaster
-rw-r--r--.envrc1
-rw-r--r--.gitignore3
-rw-r--r--Makefile14
-rw-r--r--flake.lock27
-rw-r--r--flake.nix73
-rw-r--r--scripts/repl.clj6
-rw-r--r--scripts/web_repl.clj24
-rw-r--r--src/stem/native/core.clj5
-rw-r--r--src/stem/web/core.cljs9
9 files changed, 162 insertions, 0 deletions
diff --git a/.envrc b/.envrc
new file mode 100644
index 0000000..c4b17d7
--- /dev/null
+++ b/.envrc
@@ -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)