{ inputs.nixpkgs.url = github:NixOS/nixpkgs; outputs = { self, nixpkgs }: let system = "x86_64-linux"; 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 { devShells.${system}.default = pkgs.mkShell rec { name = "quil-env"; buildInputs = [ pkgs.xorg_sys_opengl pkgs.xorg.libXxf86vm pkgs.xwayland pkgs.clojure # pkgs.jogl ]; LD_LIBRARY_PATH = "${lib.makeLibraryPath buildInputs}"; # wayland compat # see https://discourse.ubuntu.com/t/environment-variables-for-wayland-hackers/12750 # WAYLAND_DISPLAY = "no"; # DISPLAY = ":0"; # _JAVA_AWT_WM_NONREPARENTING = "1"; # 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"; # XDG_SESSION_TYPE = "wayland"; # LIBGL_ALWAYS_SOFTWARE = true; # ← this is the same as passing -Djogl.disable.openglcore="true" }; }; }