at 23.11-pre 2.2 kB view raw
1# This module provides JAVA_HOME, with a different way to install java 2# system-wide. 3 4{ config, lib, pkgs, ... }: 5 6with lib; 7 8let 9 cfg = config.programs.java; 10in 11{ 12 13 options = { 14 15 programs.java = { 16 17 enable = mkEnableOption (lib.mdDoc "java") // { 18 description = lib.mdDoc '' 19 Install and setup the Java development kit. 20 21 ::: {.note} 22 This adds JAVA_HOME to the global environment, by sourcing the 23 jdk's setup-hook on shell init. It is equivalent to starting a shell 24 through 'nix-shell -p jdk', or roughly the following system-wide 25 configuration: 26 27 environment.variables.JAVA_HOME = ''${pkgs.jdk.home}/lib/openjdk; 28 environment.systemPackages = [ pkgs.jdk ]; 29 ::: 30 ''; 31 }; 32 33 package = mkOption { 34 default = pkgs.jdk; 35 defaultText = literalExpression "pkgs.jdk"; 36 description = lib.mdDoc '' 37 Java package to install. Typical values are pkgs.jdk or pkgs.jre. 38 ''; 39 type = types.package; 40 }; 41 42 binfmt = mkEnableOption (lib.mdDoc "binfmt to execute java jar's and classes"); 43 44 }; 45 46 }; 47 48 config = mkIf cfg.enable { 49 50 boot.binfmt.registrations = mkIf cfg.binfmt { 51 java-class = { 52 recognitionType = "extension"; 53 magicOrExtension = "class"; 54 interpreter = pkgs.writeShellScript "java-class-wrapper" '' 55 test -e ${cfg.package}/nix-support/setup-hook && source ${cfg.package}/nix-support/setup-hook 56 classpath=$(dirname "$1") 57 class=$(basename "''${1%%.class}") 58 $JAVA_HOME/bin/java -classpath "$classpath" "$class" "''${@:2}" 59 ''; 60 }; 61 java-jar = { 62 recognitionType = "extension"; 63 magicOrExtension = "jar"; 64 interpreter = pkgs.writeShellScript "java-jar-wrapper" '' 65 test -e ${cfg.package}/nix-support/setup-hook && source ${cfg.package}/nix-support/setup-hook 66 $JAVA_HOME/bin/java -jar "$@" 67 ''; 68 }; 69 }; 70 71 environment.systemPackages = [ cfg.package ]; 72 73 environment.shellInit = '' 74 test -e ${cfg.package}/nix-support/setup-hook && source ${cfg.package}/nix-support/setup-hook 75 ''; 76 77 }; 78 79}