about summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorLily Foster <lily@lily.flowers>2023-03-11 10:04:43 -0500
committerGitHub <noreply@github.com>2023-03-11 10:04:43 -0500
commit9c1d627508e4fb46d0e38b1a0fdda5f44c1c7a14 (patch)
tree05de3995a5d6e2d4a614e6f15615f4bb40edfdfd /nixos
parenta0ddd1a5895e710eee2dab7a908832d0ddec8986 (diff)
parent9fdd97298b6b8b0a8385ada8b81d9d1d56ed7c34 (diff)
Merge pull request #208414 from RossComputerGuy/feat/java-binfmt
nixos/java: add binfmt option
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/programs/java.nix24
1 files changed, 23 insertions, 1 deletions
diff --git a/nixos/modules/programs/java.nix b/nixos/modules/programs/java.nix
index 4f03c1f3ff258..c5f83858d06a3 100644
--- a/nixos/modules/programs/java.nix
+++ b/nixos/modules/programs/java.nix
@@ -8,7 +8,6 @@ with lib;
 let
   cfg = config.programs.java;
 in
-
 {
 
   options = {
@@ -40,12 +39,35 @@ in
         type = types.package;
       };
 
+      binfmt = mkEnableOption (lib.mdDoc "binfmt to execute java jar's and classes");
+
     };
 
   };
 
   config = mkIf cfg.enable {
 
+    boot.binfmt.registrations = mkIf cfg.binfmt {
+      java-class = {
+        recognitionType = "extension";
+        magicOrExtension = "class";
+        interpreter = pkgs.writeShellScript "java-class-wrapper" ''
+          test -e ${cfg.package}/nix-support/setup-hook && source ${cfg.package}/nix-support/setup-hook
+          classpath=$(dirname "$1")
+          class=$(basename "''${1%%.class}")
+          $JAVA_HOME/bin/java -classpath "$classpath" "$class" "''${@:2}"
+        '';
+      };
+      java-jar = {
+        recognitionType = "extension";
+        magicOrExtension = "jar";
+        interpreter = pkgs.writeShellScript "java-jar-wrapper" ''
+          test -e ${cfg.package}/nix-support/setup-hook && source ${cfg.package}/nix-support/setup-hook
+          $JAVA_HOME/bin/java -jar "$@"
+        '';
+      };
+    };
+
     environment.systemPackages = [ cfg.package ];
 
     environment.shellInit = ''