diff --git a/.envrc b/.envrc index 2adc787..3550a30 100644 --- a/.envrc +++ b/.envrc @@ -1,2 +1 @@ use flake -watch_file *.nix diff --git a/flake.nix b/flake.nix index ce85ab3..1b14c2e 100644 --- a/flake.nix +++ b/flake.nix @@ -4,16 +4,46 @@ outputs = { self, nixpkgs }: let system = "x86_64-linux"; - pkgs = import nixpkgs { inherit system; }; + pkgs = import nixpkgs { + inherit system; + overlays = [ + (self: super: { + jogl = super.jogl.overrideAttrs { + # upstream jogl doesn't have the required gluegen lib + installPhase = '' + runHook preInstall + + mkdir -p $out/share/java + cp -v $NIX_BUILD_TOP/gluegen/build/gluegen-rt{,-natives-linux-*}.jar $out/share/java/ + cp -v $NIX_BUILD_TOP/jogl/build/jar/jogl-all{,-natives-linux-*}.jar $out/share/java/ + cp -v $NIX_BUILD_TOP/jogl/build/nativewindow/nativewindow{,-awt,-natives-linux-*,-os-drm,-os-x11}.jar $out/share/java/ + + mkdir -p $out/lib + cp -v $NIX_BUILD_TOP/gluegen/build/obj/*.so $out/lib + cp -v $NIX_BUILD_TOP/gluegen/build/test/build/natives/*.so $out/lib + cp -v $NIX_BUILD_TOP/jogl/build/jogl/obj/jogl/*.so $out/lib + cp -v $NIX_BUILD_TOP/jogl/build/jogl/obj/*.so $out/lib + cp -v $NIX_BUILD_TOP/jogl/build/lib/*.so $out/lib + cp -v $NIX_BUILD_TOP/jogl/build/nativewindow/obj/*.so $out/lib + cp -v $NIX_BUILD_TOP/jogl/build/newt/obj/*.so $out/lib + cp -v $NIX_BUILD_TOP/jogl/build/oculusvr/obj/*.so $out/lib + + runHook postInstall + ''; + }; + }) + ]; + }; lib = pkgs.lib; in { - devShell.${system} = pkgs.mkShell rec { + devShells.${system}.default = pkgs.mkShell rec { name = "quil-env"; - buildInputs = with pkgs; [ - xorg_sys_opengl - xorg.libXxf86vm - xwayland - clojure + buildInputs = [ + pkgs.xorg_sys_opengl + pkgs.xorg.libXxf86vm + pkgs.xwayland + pkgs.clojure + # pkgs.jogl ]; LD_LIBRARY_PATH = "${lib.makeLibraryPath buildInputs}"; @@ -26,7 +56,7 @@ # we need to make sure the library is on the path for JOGL; # also, there's a bug that is avoided with the variable # https://github.com/processing/processing/issues/5476 - JAVA_OPTS = "-Djogl.disable.openglcore=false"; + # JAVA_OPTS = "-Djogl.disable.openglcore=false"; # XDG_SESSION_TYPE = "wayland"; # LIBGL_ALWAYS_SOFTWARE = true; # ← this is the same as passing -Djogl.disable.openglcore="true" };