{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; flake-parts.url = "github:hercules-ci/flake-parts"; systems.url = "github:nix-systems/default"; }; outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } { systems = import inputs.systems; perSystem = { config, self', pkgs, lib, system, ... }: let pkgs = import inputs.nixpkgs { inherit system; config.allowUnfree = true; }; javaVersions = with pkgs; [ { name = "JDK17"; pkg = pkgs.javaPackages.compiler.openjdk17; } { name = "JDK21"; pkg = pkgs.javaPackages.compiler.openjdk21; } { name = "JDK8"; pkg = pkgs.javaPackages.compiler.openjdk8; } ]; javaPackages = map (j: j.pkg) javaVersions; primaryJava = builtins.head javaPackages; ide = pkgs.writeShellScriptBin "ide" "${pkgs.jetbrains.idea-oss}/bin/idea-oss $PROJECT_PATH"; nativeBuildInputs = with pkgs; [ primaryJava git ]; buildInputs = with pkgs; [ libGL glfw3-minecraft # Not always needed, but in case it is, it's here. flite # TTS libpulseaudio #(gradle.override {java = primaryJava;}) #pkgs.javaPackages.compiler.openjdk17 (pkgs.gradle-packages.mkGradle {version = "8.14.3"; defaultJava = primaryJava; hash = "sha256-vXEQIhNJMGCVbsIp2Ua+7lcVjb2J0OYrkbyg+ixfNTE=";}) ]; in { devShells.default = pkgs.mkShell { inherit nativeBuildInputs buildInputs; shellHook = '' export PROJECT_PATH="$PWD" ${ide}/bin/ide exit ''; env = { LD_LIBRARY_PATH = lib.makeLibraryPath buildInputs; JAVA_HOME = "${primaryJava.home}"; PROJECT_PATH="$PWD"; } // (builtins.listToAttrs (map (j: { name = j.name; value = j.pkg.home; }) javaVersions)); }; }; }; }