Skip to content

Instantly share code, notes, and snippets.

@Endermanbugzjfc
Last active February 11, 2026 00:47
Show Gist options
  • Select an option

  • Save Endermanbugzjfc/d25ebe79c61f1352e3b6d9f9d7a11ce3 to your computer and use it in GitHub Desktop.

Select an option

Save Endermanbugzjfc/d25ebe79c61f1352e3b6d9f9d7a11ce3 to your computer and use it in GitHub Desktop.
A simple helper to configure Java Platforms in Nix-managed NetBeans installations.
# Author: Endermanbugzjfc
# License: Unlicense
let
mkNetBeansJavaPlatform = {
openjdk,
openjdkMajorVersion,
label ? "JDK ${openjdkMajorVersion} (Nix)",
}: let
in ''
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE platform PUBLIC "-//NetBeans//DTD Java PlatformDefinition 1.0//EN" "http://www.netbeans.org/dtds/java-platformdefinition-1_0.dtd">
<platform default="no" name="${label}">
<jdkhome>
<resource>file:${openjdk}/lib/openjdk/</resource>
</jdkhome>
<properties>
<property name="platform.ant.name" value="JDK_${openjdkMajorVersion}"/>
</properties>
<sysproperties>
<property name="java.specification.version" value="${openjdkMajorVersion}"/>
</sysproperties>
</platform>
'';
dirPrefix = "/home/$(whoami)/.netbeans";
dirSuffix = "config/Services/Platforms/org-netbeans-api-java-Platform";
installNetBeansJavaPlatform = {
openjdk,
openjdkMajorVersion,
netBeansMajorVersion,
label ? "JDK ${openjdkMajorVersion} (Nix)",
dir ? "${dirPrefix}/${netBeansMajorVersion}/${dirSuffix}",
file ? "JDK_${openjdkMajorVersion}__Nix.xml",
}: let
config = mkNetBeansJavaPlatform { inherit openjdk openjdkMajorVersion label; };
in ''
echo "Installing Java Platforms config to \"${dir}/${file}\""
mkdir -p "${dir}"
cat << 'EOF' > "${dir}/${file}"
${config}
EOF
'';
in {
inherit mkNetBeansJavaPlatform installNetBeansJavaPlatform;
}
{
description = ''
https://gist.github.com/Endermanbugzjfc/d25ebe79c61f1352e3b6d9f9d7a11ce3 | Unlicense
mkNetBeansJavaPlatform.nix is a simple helper to configure Java Platforms in Nix-managed NetBeans installations.
(This is an example Flake).
'';
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
inputs.flake-utils.url = "github:numtide/flake-utils";
inputs.mk-netbeans-java-platform = {
url = "https://gist.github.com/Endermanbugzjfc/d25ebe79c61f1352e3b6d9f9d7a11ce3/raw";
flake = false;
};
outputs = {
self,
nixpkgs,
flake-utils,
mk-netbeans-java-platform,
}: flake-utils.lib.eachDefaultSystem (system: let
pkgs = nixpkgs.legacyPackages.${system};
global = with pkgs; [
nh
];
globalShellHook = label: ''
echo ""
echo "Current Environment: ${label}"
echo ""
echo Ctrl+D = Exit Environment
echo ""
'';
devShells = {
default = makeJavaShell 21;
java17 = makeJavaShell 17;
java21 = makeJavaShell 21;
java25 = makeJavaShell 25;
};
makeJavaShell = jdkVersion: let
jdkVersion' = builtins.toString jdkVersion;
jdkJfx = pkgs."openjdk${jdkVersion'}".override { enableJavaFX = true; };
in pkgs.mkShellNoCC {
packages = [
jdkJfx
pkgs.jdt-language-server
pkgs.netbeans
] ++ global;
shellHook = let
label = "NetBeans + java" + jdkVersion';
installConfig = (import mk-netbeans-java-platform).installNetBeansJavaPlatform {
openjdk = jdkJfx;
openjdkMajorVersion = jdkVersion';
netBeansMajorVersion = builtins.toString pkgs.netbeans.version;
};
in ''
${globalShellHook label}
${installConfig}
'';
};
in {
inherit devShells;
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment