Loading pkgs/applications/editors/jetbrains/source/build.nix +1 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ let }; }); jbr = jetbrains.jdk-no-jcef; jbr = jetbrains.jdk-no-jcef-21; ideaSrc = fetchFromGitHub { owner = "jetbrains"; Loading pkgs/by-name/an/animeko/package.nix +5 −2 Original line number Diff line number Diff line Loading @@ -142,12 +142,12 @@ stdenv.mkDerivation (finalAttrs: { }; env = { JAVA_HOME = jetbrains.jdk; JAVA_HOME = jetbrains.jdk-21; ANDROID_SDK_HOME = "$(pwd)"; }; gradleFlags = [ "-Dorg.gradle.java.home=${jetbrains.jdk}" "-Dorg.gradle.java.home=${jetbrains.jdk-21}" ]; nativeBuildInputs = [ Loading Loading @@ -282,5 +282,8 @@ stdenv.mkDerivation (finalAttrs: { platforms = [ "x86_64-linux" ]; # Mark broken due to a breaking change in JetBrains JCEF # https://github.com/NixOS/nixpkgs/pull/485812#issuecomment-4211365591 broken = true; }; }) pkgs/development/compilers/jetbrains-jdk/21.nix 0 → 100644 +26 −0 Original line number Diff line number Diff line { callPackage, jetbrains, jdk, debugBuild ? false, withJcef ? true, }: callPackage ./common.nix { inherit jdk debugBuild withJcef; } { # To get the new tag: # git clone https://github.com/jetbrains/jetbrainsruntime # cd jetbrainsruntime # git tag --points-at [revision] # Look for the line that starts with jbr- javaVersion = "21.0.10"; build = "1163.110"; # run `git log -1 --pretty=%ct` in jdk repo for new value on update sourceDateEpoch = 1765114563; srcHash = "sha256-Qmffu7p6frBoH2Zh+EiqvEoMNNBE79qfkgLSC3+XuI0="; homePath = "${jetbrains.jdk-21}/lib/openjdk"; jcefPackage = jetbrains.jcef-21; } pkgs/development/compilers/jetbrains-jdk/common.nix 0 → 100644 +236 −0 Original line number Diff line number Diff line { lib, stdenv, fetchFromGitHub, jdk, git, autoconf, unzip, rsync, shaderc, vulkan-headers, libxdamage, libxxf86vm, libxrandr, libxi, libxcursor, libxrender, libx11, libxext, libxkbcommon, libxcb, nss, nspr, libdrm, libgbm, wayland, udev, fontconfig, debugBuild ? false, withJcef ? true, }: { javaVersion, build, sourceDateEpoch, srcHash, homePath, jcefPackage ? null, extraBuildPhase ? "", vendorVersionString ? null, extraConfigureFlags ? [ ], extraNativeBuildInputs ? [ ], extraBuildInputs ? [ ], }: assert debugBuild -> withJcef; let arch = { "aarch64-linux" = "aarch64"; "x86_64-linux" = "x64"; } .${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); cpu = stdenv.hostPlatform.parsed.cpu.name; version = "${javaVersion}-b${build}"; openjdkTag = "jbr-release-${javaVersion}b${build}"; in jdk.overrideAttrs (oldAttrs: { pname = "jetbrains-jdk" + lib.optionalString withJcef "-jcef"; inherit javaVersion build version openjdkTag ; src = fetchFromGitHub { owner = "JetBrains"; repo = "JetBrainsRuntime"; rev = "jb${version}"; hash = srcHash; }; env = (oldAttrs.env or { }) // { BOOT_JDK = jdk.home; # run `git log -1 --pretty=%ct` in jdk repo for new value on update SOURCE_DATE_EPOCH = sourceDateEpoch; }; patches = [ ]; dontConfigure = true; buildPhase = '' runHook preBuild ${lib.optionalString withJcef "cp -r ${jcefPackage} jcef_linux_${arch}"} ${extraBuildPhase} sed \ -e "s/OPENJDK_TAG=.*/OPENJDK_TAG=${openjdkTag}/" \ -e "s/SOURCE_DATE_EPOCH=.*//" \ -e "s/export SOURCE_DATE_EPOCH//" \ -i jb/project/tools/common/scripts/common.sh declare -a realConfigureFlags for configureFlag in "''${configureFlags[@]}"; do case "$configureFlag" in --host=*) # intentionally omit flag ;; ${lib.optionalString (vendorVersionString != null) '' --with-vendor-version-string=*) # Replace the flag from the JDK to include that it is JBR and the package version, so it passes the installation tests realConfigureFlags+=('--with-vendor-version-string="${vendorVersionString}"') ;; ''} *) realConfigureFlags+=("$configureFlag") ;; esac done ${lib.concatMapStringsSep "\n" (flag: ''realConfigureFlags+=("${flag}")'') extraConfigureFlags} echo "computed configure flags: ''${realConfigureFlags[*]}" substituteInPlace jb/project/tools/linux/scripts/mkimages_${arch}.sh --replace-fail "STATIC_CONF_ARGS" "STATIC_CONF_ARGS ''${realConfigureFlags[*]}" sed \ -e "s/create_image_bundle \"jb/#/" \ -e "s/echo Creating /exit 0 #/" \ -i jb/project/tools/linux/scripts/mkimages_${arch}.sh patchShebangs . ./jb/project/tools/linux/scripts/mkimages_${arch}.sh ${build} ${ if debugBuild then "fd" else (if withJcef then "jcef" else "nomod") } runHook postBuild ''; installPhase = let buildType = if debugBuild then "fastdebug" else "release"; debugSuffix = if debugBuild then "-fastdebug" else ""; jcefSuffix = if debugBuild || !withJcef then "" else "_jcef"; jbrsdkDir = "jbrsdk${jcefSuffix}-${javaVersion}-linux-${arch}${debugSuffix}-b${build}"; in '' runHook preInstall mv build/linux-${cpu}-server-${buildType}/images/jdk/man build/linux-${cpu}-server-${buildType}/images/${jbrsdkDir} rm -rf build/linux-${cpu}-server-${buildType}/images/jdk mv build/linux-${cpu}-server-${buildType}/images/${jbrsdkDir} build/linux-${cpu}-server-${buildType}/images/jdk '' + oldAttrs.installPhase + "runHook postInstall"; postInstall = lib.optionalString withJcef '' chmod +x $out/lib/openjdk/lib/chrome-sandbox ''; dontStrip = debugBuild; postFixup = '' # Build the set of output library directories to rpath against LIBDIRS="${ lib.makeLibraryPath [ libxdamage libxxf86vm libxrandr libxi libxcursor libxrender libx11 libxext libxkbcommon libxcb nss nspr libdrm libgbm wayland udev fontconfig ] }" for output in ${lib.concatStringsSep " " oldAttrs.outputs}; do if [ "$output" = debug ]; then continue; fi LIBDIRS="$(find $(eval echo \$$output) -name \*.so\* -exec dirname {} \+ | sort -u | tr '\n' ':'):$LIBDIRS" done # Add the local library paths to remove dependencies on the bootstrap for output in ${lib.concatStringsSep " " oldAttrs.outputs}; do if [ "$output" = debug ]; then continue; fi OUTPUTDIR=$(eval echo \$$output) BINLIBS=$(find $OUTPUTDIR/bin/ -type f; find $OUTPUTDIR -name \*.so\*) echo "$BINLIBS" | while read i; do patchelf --set-rpath "$LIBDIRS:$(patchelf --print-rpath "$i")" "$i" || true done done ''; nativeBuildInputs = [ git autoconf unzip rsync shaderc # glslc ] ++ extraNativeBuildInputs ++ oldAttrs.nativeBuildInputs; buildInputs = [ vulkan-headers ] ++ extraBuildInputs ++ oldAttrs.buildInputs or [ ]; meta = { description = "OpenJDK fork to better support Jetbrains's products"; longDescription = '' JetBrains Runtime is a runtime environment for running IntelliJ Platform based products on Windows, Mac OS X, and Linux. JetBrains Runtime is based on OpenJDK project with some modifications. These modifications include: Subpixel Anti-Aliasing, enhanced font rendering on Linux, HiDPI support, ligatures, some fixes for native crashes not presented in official build, and other small enhancements. JetBrains Runtime is not a certified build of OpenJDK. Please, use at your own risk. ''; homepage = "https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime"; inherit (jdk.meta) license platforms mainProgram; maintainers = with lib.maintainers; [ aoli-al ]; broken = stdenv.hostPlatform.isDarwin; }; passthru = oldAttrs.passthru // { home = homePath; }; }) pkgs/development/compilers/jetbrains-jdk/default.nix +40 −197 Original line number Diff line number Diff line { lib, stdenv, fetchFromGitHub, callPackage, fetchurl, jetbrains, jdk, git, autoconf, unzip, rsync, debugBuild ? false, withJcef ? true, libxdamage, libxxf86vm, libxrandr, libxi, libxcursor, libxrender, libx11, libxext, wayland-scanner, wayland-protocols, libxkbcommon, libxcb, nss, nspr, libdrm, libgbm, wayland, udev, fontconfig, shaderc, vulkan-headers, }: assert debugBuild -> withJcef; let arch = gtk-protocols = let rev = "refs/tags/4.22.1"; hash = "sha256-zCcXuiEYL2N4Q+WT96ouVDwdZVSohgU/QA2BkGlnZZ0="; in fetchurl { # We only need the wayland protocols file url = "https://raw.githubusercontent.com/GNOME/gtk/${rev}/gdk/wayland/protocol/gtk-shell.xml"; hash = hash; }; in callPackage ./common.nix { "aarch64-linux" = "aarch64"; "x86_64-linux" = "x64"; inherit jdk debugBuild withJcef; } .${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); cpu = stdenv.hostPlatform.parsed.cpu.name; in jdk.overrideAttrs (oldAttrs: rec { pname = "jetbrains-jdk" + lib.optionalString withJcef "-jcef"; javaVersion = "21.0.9"; build = "1163.86"; { # To get the new tag: # git clone https://github.com/jetbrains/jetbrainsruntime # cd jetbrainsruntime # git tag --points-at [revision] # Look for the line that starts with jbr- openjdkTag = "jbr-release-21.0.9b1163.86"; version = "${javaVersion}-b${build}"; src = fetchFromGitHub { owner = "JetBrains"; repo = "JetBrainsRuntime"; rev = "jb${version}"; hash = "sha256-P2boCbGB66X8LB4sZHGFO8lqHbv6F4kqGVMGBd9yKu0="; }; env = (oldAttrs.env or { }) // { BOOT_JDK = jdk.home; javaVersion = "25.0.2"; build = "329.72"; # run `git log -1 --pretty=%ct` in jdk repo for new value on update SOURCE_DATE_EPOCH = 1765114563; }; patches = [ ]; dontConfigure = true; buildPhase = '' runHook preBuild ${lib.optionalString withJcef "cp -r ${jetbrains.jcef} jcef_linux_${arch}"} sed \ -e "s/OPENJDK_TAG=.*/OPENJDK_TAG=${openjdkTag}/" \ -e "s/SOURCE_DATE_EPOCH=.*//" \ -e "s/export SOURCE_DATE_EPOCH//" \ -i jb/project/tools/common/scripts/common.sh declare -a realConfigureFlags for configureFlag in "''${configureFlags[@]}"; do case "$configureFlag" in --host=*) # intentionally omit flag ;; *) realConfigureFlags+=("$configureFlag") ;; esac done echo "computed configure flags: ''${realConfigureFlags[*]}" substituteInPlace jb/project/tools/linux/scripts/mkimages_${arch}.sh --replace-fail "STATIC_CONF_ARGS" "STATIC_CONF_ARGS ''${realConfigureFlags[*]}" sed \ -e "s/create_image_bundle \"jb/#/" \ -e "s/echo Creating /exit 0 #/" \ -i jb/project/tools/linux/scripts/mkimages_${arch}.sh patchShebangs . ./jb/project/tools/linux/scripts/mkimages_${arch}.sh ${build} ${ if debugBuild then "fd" else (if withJcef then "jcef" else "nomod") } runHook postBuild sourceDateEpoch = 1769205294; srcHash = "sha256-K4Izbij+1YO4UERHS0mwGKZX/VtIaxyNPZD068Vf99Q="; homePath = "${jetbrains.jdk}/lib/openjdk"; jcefPackage = jetbrains.jcef; extraBuildPhase = '' cp -r ${gtk-protocols.out} gtk-shell.xml ''; installPhase = let buildType = if debugBuild then "fastdebug" else "release"; debugSuffix = if debugBuild then "-fastdebug" else ""; jcefSuffix = if debugBuild || !withJcef then "" else "_jcef"; jbrsdkDir = "jbrsdk${jcefSuffix}-${javaVersion}-linux-${arch}${debugSuffix}-b${build}"; in '' runHook preInstall mv build/linux-${cpu}-server-${buildType}/images/jdk/man build/linux-${cpu}-server-${buildType}/images/${jbrsdkDir} rm -rf build/linux-${cpu}-server-${buildType}/images/jdk mv build/linux-${cpu}-server-${buildType}/images/${jbrsdkDir} build/linux-${cpu}-server-${buildType}/images/jdk '' + oldAttrs.installPhase + "runHook postInstall"; postInstall = lib.optionalString withJcef '' chmod +x $out/lib/openjdk/lib/chrome-sandbox ''; dontStrip = debugBuild; postFixup = '' # Build the set of output library directories to rpath against LIBDIRS="${ lib.makeLibraryPath [ libxdamage libxxf86vm libxrandr libxi libxcursor libxrender libx11 libxext vendorVersionString = "nix/JBR-25.0.2-b329.72${if withJcef then "-jcef" else ""}"; extraConfigureFlags = [ "--with-wayland-protocols=${wayland-protocols.out}/share/wayland-protocols" ]; extraNativeBuildInputs = [ wayland-scanner libxkbcommon libxcb nss nspr libdrm libgbm wayland udev fontconfig ] }" for output in ${lib.concatStringsSep " " oldAttrs.outputs}; do if [ "$output" = debug ]; then continue; fi LIBDIRS="$(find $(eval echo \$$output) -name \*.so\* -exec dirname {} \+ | sort -u | tr '\n' ':'):$LIBDIRS" done # Add the local library paths to remove dependencies on the bootstrap for output in ${lib.concatStringsSep " " oldAttrs.outputs}; do if [ "$output" = debug ]; then continue; fi OUTPUTDIR=$(eval echo \$$output) BINLIBS=$(find $OUTPUTDIR/bin/ -type f; find $OUTPUTDIR -name \*.so\*) echo "$BINLIBS" | while read i; do patchelf --set-rpath "$LIBDIRS:$(patchelf --print-rpath "$i")" "$i" || true done done ''; nativeBuildInputs = [ git autoconf unzip rsync shaderc # glslc ] ++ oldAttrs.nativeBuildInputs; buildInputs = [ vulkan-headers ] ++ oldAttrs.buildInputs or [ ]; meta = { description = "OpenJDK fork to better support Jetbrains's products"; longDescription = '' JetBrains Runtime is a runtime environment for running IntelliJ Platform based products on Windows, Mac OS X, and Linux. JetBrains Runtime is based on OpenJDK project with some modifications. These modifications include: Subpixel Anti-Aliasing, enhanced font rendering on Linux, HiDPI support, ligatures, some fixes for native crashes not presented in official build, and other small enhancements. JetBrains Runtime is not a certified build of OpenJDK. Please, use at your own risk. ''; homepage = "https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime"; inherit (jdk.meta) license platforms mainProgram; maintainers = with lib.maintainers; [ aoli-al ]; broken = stdenv.hostPlatform.isDarwin; }; passthru = oldAttrs.passthru // { home = "${jetbrains.jdk}/lib/openjdk"; }; }) } Loading
pkgs/applications/editors/jetbrains/source/build.nix +1 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ let }; }); jbr = jetbrains.jdk-no-jcef; jbr = jetbrains.jdk-no-jcef-21; ideaSrc = fetchFromGitHub { owner = "jetbrains"; Loading
pkgs/by-name/an/animeko/package.nix +5 −2 Original line number Diff line number Diff line Loading @@ -142,12 +142,12 @@ stdenv.mkDerivation (finalAttrs: { }; env = { JAVA_HOME = jetbrains.jdk; JAVA_HOME = jetbrains.jdk-21; ANDROID_SDK_HOME = "$(pwd)"; }; gradleFlags = [ "-Dorg.gradle.java.home=${jetbrains.jdk}" "-Dorg.gradle.java.home=${jetbrains.jdk-21}" ]; nativeBuildInputs = [ Loading Loading @@ -282,5 +282,8 @@ stdenv.mkDerivation (finalAttrs: { platforms = [ "x86_64-linux" ]; # Mark broken due to a breaking change in JetBrains JCEF # https://github.com/NixOS/nixpkgs/pull/485812#issuecomment-4211365591 broken = true; }; })
pkgs/development/compilers/jetbrains-jdk/21.nix 0 → 100644 +26 −0 Original line number Diff line number Diff line { callPackage, jetbrains, jdk, debugBuild ? false, withJcef ? true, }: callPackage ./common.nix { inherit jdk debugBuild withJcef; } { # To get the new tag: # git clone https://github.com/jetbrains/jetbrainsruntime # cd jetbrainsruntime # git tag --points-at [revision] # Look for the line that starts with jbr- javaVersion = "21.0.10"; build = "1163.110"; # run `git log -1 --pretty=%ct` in jdk repo for new value on update sourceDateEpoch = 1765114563; srcHash = "sha256-Qmffu7p6frBoH2Zh+EiqvEoMNNBE79qfkgLSC3+XuI0="; homePath = "${jetbrains.jdk-21}/lib/openjdk"; jcefPackage = jetbrains.jcef-21; }
pkgs/development/compilers/jetbrains-jdk/common.nix 0 → 100644 +236 −0 Original line number Diff line number Diff line { lib, stdenv, fetchFromGitHub, jdk, git, autoconf, unzip, rsync, shaderc, vulkan-headers, libxdamage, libxxf86vm, libxrandr, libxi, libxcursor, libxrender, libx11, libxext, libxkbcommon, libxcb, nss, nspr, libdrm, libgbm, wayland, udev, fontconfig, debugBuild ? false, withJcef ? true, }: { javaVersion, build, sourceDateEpoch, srcHash, homePath, jcefPackage ? null, extraBuildPhase ? "", vendorVersionString ? null, extraConfigureFlags ? [ ], extraNativeBuildInputs ? [ ], extraBuildInputs ? [ ], }: assert debugBuild -> withJcef; let arch = { "aarch64-linux" = "aarch64"; "x86_64-linux" = "x64"; } .${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); cpu = stdenv.hostPlatform.parsed.cpu.name; version = "${javaVersion}-b${build}"; openjdkTag = "jbr-release-${javaVersion}b${build}"; in jdk.overrideAttrs (oldAttrs: { pname = "jetbrains-jdk" + lib.optionalString withJcef "-jcef"; inherit javaVersion build version openjdkTag ; src = fetchFromGitHub { owner = "JetBrains"; repo = "JetBrainsRuntime"; rev = "jb${version}"; hash = srcHash; }; env = (oldAttrs.env or { }) // { BOOT_JDK = jdk.home; # run `git log -1 --pretty=%ct` in jdk repo for new value on update SOURCE_DATE_EPOCH = sourceDateEpoch; }; patches = [ ]; dontConfigure = true; buildPhase = '' runHook preBuild ${lib.optionalString withJcef "cp -r ${jcefPackage} jcef_linux_${arch}"} ${extraBuildPhase} sed \ -e "s/OPENJDK_TAG=.*/OPENJDK_TAG=${openjdkTag}/" \ -e "s/SOURCE_DATE_EPOCH=.*//" \ -e "s/export SOURCE_DATE_EPOCH//" \ -i jb/project/tools/common/scripts/common.sh declare -a realConfigureFlags for configureFlag in "''${configureFlags[@]}"; do case "$configureFlag" in --host=*) # intentionally omit flag ;; ${lib.optionalString (vendorVersionString != null) '' --with-vendor-version-string=*) # Replace the flag from the JDK to include that it is JBR and the package version, so it passes the installation tests realConfigureFlags+=('--with-vendor-version-string="${vendorVersionString}"') ;; ''} *) realConfigureFlags+=("$configureFlag") ;; esac done ${lib.concatMapStringsSep "\n" (flag: ''realConfigureFlags+=("${flag}")'') extraConfigureFlags} echo "computed configure flags: ''${realConfigureFlags[*]}" substituteInPlace jb/project/tools/linux/scripts/mkimages_${arch}.sh --replace-fail "STATIC_CONF_ARGS" "STATIC_CONF_ARGS ''${realConfigureFlags[*]}" sed \ -e "s/create_image_bundle \"jb/#/" \ -e "s/echo Creating /exit 0 #/" \ -i jb/project/tools/linux/scripts/mkimages_${arch}.sh patchShebangs . ./jb/project/tools/linux/scripts/mkimages_${arch}.sh ${build} ${ if debugBuild then "fd" else (if withJcef then "jcef" else "nomod") } runHook postBuild ''; installPhase = let buildType = if debugBuild then "fastdebug" else "release"; debugSuffix = if debugBuild then "-fastdebug" else ""; jcefSuffix = if debugBuild || !withJcef then "" else "_jcef"; jbrsdkDir = "jbrsdk${jcefSuffix}-${javaVersion}-linux-${arch}${debugSuffix}-b${build}"; in '' runHook preInstall mv build/linux-${cpu}-server-${buildType}/images/jdk/man build/linux-${cpu}-server-${buildType}/images/${jbrsdkDir} rm -rf build/linux-${cpu}-server-${buildType}/images/jdk mv build/linux-${cpu}-server-${buildType}/images/${jbrsdkDir} build/linux-${cpu}-server-${buildType}/images/jdk '' + oldAttrs.installPhase + "runHook postInstall"; postInstall = lib.optionalString withJcef '' chmod +x $out/lib/openjdk/lib/chrome-sandbox ''; dontStrip = debugBuild; postFixup = '' # Build the set of output library directories to rpath against LIBDIRS="${ lib.makeLibraryPath [ libxdamage libxxf86vm libxrandr libxi libxcursor libxrender libx11 libxext libxkbcommon libxcb nss nspr libdrm libgbm wayland udev fontconfig ] }" for output in ${lib.concatStringsSep " " oldAttrs.outputs}; do if [ "$output" = debug ]; then continue; fi LIBDIRS="$(find $(eval echo \$$output) -name \*.so\* -exec dirname {} \+ | sort -u | tr '\n' ':'):$LIBDIRS" done # Add the local library paths to remove dependencies on the bootstrap for output in ${lib.concatStringsSep " " oldAttrs.outputs}; do if [ "$output" = debug ]; then continue; fi OUTPUTDIR=$(eval echo \$$output) BINLIBS=$(find $OUTPUTDIR/bin/ -type f; find $OUTPUTDIR -name \*.so\*) echo "$BINLIBS" | while read i; do patchelf --set-rpath "$LIBDIRS:$(patchelf --print-rpath "$i")" "$i" || true done done ''; nativeBuildInputs = [ git autoconf unzip rsync shaderc # glslc ] ++ extraNativeBuildInputs ++ oldAttrs.nativeBuildInputs; buildInputs = [ vulkan-headers ] ++ extraBuildInputs ++ oldAttrs.buildInputs or [ ]; meta = { description = "OpenJDK fork to better support Jetbrains's products"; longDescription = '' JetBrains Runtime is a runtime environment for running IntelliJ Platform based products on Windows, Mac OS X, and Linux. JetBrains Runtime is based on OpenJDK project with some modifications. These modifications include: Subpixel Anti-Aliasing, enhanced font rendering on Linux, HiDPI support, ligatures, some fixes for native crashes not presented in official build, and other small enhancements. JetBrains Runtime is not a certified build of OpenJDK. Please, use at your own risk. ''; homepage = "https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime"; inherit (jdk.meta) license platforms mainProgram; maintainers = with lib.maintainers; [ aoli-al ]; broken = stdenv.hostPlatform.isDarwin; }; passthru = oldAttrs.passthru // { home = homePath; }; })
pkgs/development/compilers/jetbrains-jdk/default.nix +40 −197 Original line number Diff line number Diff line { lib, stdenv, fetchFromGitHub, callPackage, fetchurl, jetbrains, jdk, git, autoconf, unzip, rsync, debugBuild ? false, withJcef ? true, libxdamage, libxxf86vm, libxrandr, libxi, libxcursor, libxrender, libx11, libxext, wayland-scanner, wayland-protocols, libxkbcommon, libxcb, nss, nspr, libdrm, libgbm, wayland, udev, fontconfig, shaderc, vulkan-headers, }: assert debugBuild -> withJcef; let arch = gtk-protocols = let rev = "refs/tags/4.22.1"; hash = "sha256-zCcXuiEYL2N4Q+WT96ouVDwdZVSohgU/QA2BkGlnZZ0="; in fetchurl { # We only need the wayland protocols file url = "https://raw.githubusercontent.com/GNOME/gtk/${rev}/gdk/wayland/protocol/gtk-shell.xml"; hash = hash; }; in callPackage ./common.nix { "aarch64-linux" = "aarch64"; "x86_64-linux" = "x64"; inherit jdk debugBuild withJcef; } .${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); cpu = stdenv.hostPlatform.parsed.cpu.name; in jdk.overrideAttrs (oldAttrs: rec { pname = "jetbrains-jdk" + lib.optionalString withJcef "-jcef"; javaVersion = "21.0.9"; build = "1163.86"; { # To get the new tag: # git clone https://github.com/jetbrains/jetbrainsruntime # cd jetbrainsruntime # git tag --points-at [revision] # Look for the line that starts with jbr- openjdkTag = "jbr-release-21.0.9b1163.86"; version = "${javaVersion}-b${build}"; src = fetchFromGitHub { owner = "JetBrains"; repo = "JetBrainsRuntime"; rev = "jb${version}"; hash = "sha256-P2boCbGB66X8LB4sZHGFO8lqHbv6F4kqGVMGBd9yKu0="; }; env = (oldAttrs.env or { }) // { BOOT_JDK = jdk.home; javaVersion = "25.0.2"; build = "329.72"; # run `git log -1 --pretty=%ct` in jdk repo for new value on update SOURCE_DATE_EPOCH = 1765114563; }; patches = [ ]; dontConfigure = true; buildPhase = '' runHook preBuild ${lib.optionalString withJcef "cp -r ${jetbrains.jcef} jcef_linux_${arch}"} sed \ -e "s/OPENJDK_TAG=.*/OPENJDK_TAG=${openjdkTag}/" \ -e "s/SOURCE_DATE_EPOCH=.*//" \ -e "s/export SOURCE_DATE_EPOCH//" \ -i jb/project/tools/common/scripts/common.sh declare -a realConfigureFlags for configureFlag in "''${configureFlags[@]}"; do case "$configureFlag" in --host=*) # intentionally omit flag ;; *) realConfigureFlags+=("$configureFlag") ;; esac done echo "computed configure flags: ''${realConfigureFlags[*]}" substituteInPlace jb/project/tools/linux/scripts/mkimages_${arch}.sh --replace-fail "STATIC_CONF_ARGS" "STATIC_CONF_ARGS ''${realConfigureFlags[*]}" sed \ -e "s/create_image_bundle \"jb/#/" \ -e "s/echo Creating /exit 0 #/" \ -i jb/project/tools/linux/scripts/mkimages_${arch}.sh patchShebangs . ./jb/project/tools/linux/scripts/mkimages_${arch}.sh ${build} ${ if debugBuild then "fd" else (if withJcef then "jcef" else "nomod") } runHook postBuild sourceDateEpoch = 1769205294; srcHash = "sha256-K4Izbij+1YO4UERHS0mwGKZX/VtIaxyNPZD068Vf99Q="; homePath = "${jetbrains.jdk}/lib/openjdk"; jcefPackage = jetbrains.jcef; extraBuildPhase = '' cp -r ${gtk-protocols.out} gtk-shell.xml ''; installPhase = let buildType = if debugBuild then "fastdebug" else "release"; debugSuffix = if debugBuild then "-fastdebug" else ""; jcefSuffix = if debugBuild || !withJcef then "" else "_jcef"; jbrsdkDir = "jbrsdk${jcefSuffix}-${javaVersion}-linux-${arch}${debugSuffix}-b${build}"; in '' runHook preInstall mv build/linux-${cpu}-server-${buildType}/images/jdk/man build/linux-${cpu}-server-${buildType}/images/${jbrsdkDir} rm -rf build/linux-${cpu}-server-${buildType}/images/jdk mv build/linux-${cpu}-server-${buildType}/images/${jbrsdkDir} build/linux-${cpu}-server-${buildType}/images/jdk '' + oldAttrs.installPhase + "runHook postInstall"; postInstall = lib.optionalString withJcef '' chmod +x $out/lib/openjdk/lib/chrome-sandbox ''; dontStrip = debugBuild; postFixup = '' # Build the set of output library directories to rpath against LIBDIRS="${ lib.makeLibraryPath [ libxdamage libxxf86vm libxrandr libxi libxcursor libxrender libx11 libxext vendorVersionString = "nix/JBR-25.0.2-b329.72${if withJcef then "-jcef" else ""}"; extraConfigureFlags = [ "--with-wayland-protocols=${wayland-protocols.out}/share/wayland-protocols" ]; extraNativeBuildInputs = [ wayland-scanner libxkbcommon libxcb nss nspr libdrm libgbm wayland udev fontconfig ] }" for output in ${lib.concatStringsSep " " oldAttrs.outputs}; do if [ "$output" = debug ]; then continue; fi LIBDIRS="$(find $(eval echo \$$output) -name \*.so\* -exec dirname {} \+ | sort -u | tr '\n' ':'):$LIBDIRS" done # Add the local library paths to remove dependencies on the bootstrap for output in ${lib.concatStringsSep " " oldAttrs.outputs}; do if [ "$output" = debug ]; then continue; fi OUTPUTDIR=$(eval echo \$$output) BINLIBS=$(find $OUTPUTDIR/bin/ -type f; find $OUTPUTDIR -name \*.so\*) echo "$BINLIBS" | while read i; do patchelf --set-rpath "$LIBDIRS:$(patchelf --print-rpath "$i")" "$i" || true done done ''; nativeBuildInputs = [ git autoconf unzip rsync shaderc # glslc ] ++ oldAttrs.nativeBuildInputs; buildInputs = [ vulkan-headers ] ++ oldAttrs.buildInputs or [ ]; meta = { description = "OpenJDK fork to better support Jetbrains's products"; longDescription = '' JetBrains Runtime is a runtime environment for running IntelliJ Platform based products on Windows, Mac OS X, and Linux. JetBrains Runtime is based on OpenJDK project with some modifications. These modifications include: Subpixel Anti-Aliasing, enhanced font rendering on Linux, HiDPI support, ligatures, some fixes for native crashes not presented in official build, and other small enhancements. JetBrains Runtime is not a certified build of OpenJDK. Please, use at your own risk. ''; homepage = "https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime"; inherit (jdk.meta) license platforms mainProgram; maintainers = with lib.maintainers; [ aoli-al ]; broken = stdenv.hostPlatform.isDarwin; }; passthru = oldAttrs.passthru // { home = "${jetbrains.jdk}/lib/openjdk"; }; }) }