this repo has no description
1rec {
2 description = "Paper Mario (N64) asset editor";
3 inputs = {
4 nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
5 gradle-dot-nix.url = "github:CrazyChaoz/gradle-dot-nix";
6 };
7 outputs = { nixpkgs, gradle-dot-nix, ... }:
8 let
9 javaVersion = 17;
10 supportedSystems = [ "x86_64-linux" "x86_64-darwin" "x86_64-darwin" "aarch64-darwin" ];
11 forEachSupportedSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f {
12 pkgs = import nixpkgs { inherit system; };
13 });
14 makeLibPath = pkgs: (with pkgs; lib.makeLibraryPath [
15 libGL
16 ]);
17 in {
18 devShells = forEachSupportedSystem ({ pkgs }: let
19 jdk = pkgs."jdk${toString javaVersion}";
20 gradle = pkgs.gradle.override { java = jdk; };
21 lombok = pkgs.lombok.override { inherit jdk; };
22 jdtls = pkgs.jdt-language-server.override { inherit jdk; };
23 in {
24 default = pkgs.mkShell {
25 packages = [
26 gradle
27 jdk
28 jdtls
29 ] ++ pkgs.lib.optionals pkgs.stdenv.isLinux [
30 # for tinyfiledialogs
31 pkgs.gnome.zenity
32 ];
33 shellHook =
34 let
35 javaOptions = "-javaagent:${lombok}/share/java/lombok.jar -Dsun.java2d.uiScale=2 -Dsun.awt.xembedserver=true";
36 prev = "\${JAVA_TOOL_OPTIONS:+ $JAVA_TOOL_OPTIONS}";
37 in
38 ''
39 export JAVA_TOOL_OPTIONS="${javaOptions}${prev}"
40 export JAVA_HOME="${jdk}"
41 export GRADLE_HOME="${gradle}"
42 export LD_LIBRARY_PATH="${makeLibPath pkgs}"
43 export _JAVA_AWT_WM_NONREPARENTING=1 # Wayland issues
44 '';
45 };
46 });
47 packages = forEachSupportedSystem ({ pkgs }:
48 let
49 gradle-init-script = (import gradle-dot-nix {
50 inherit pkgs;
51 gradle-verification-metadata-file = ./gradle/verification-metadata.xml; # generated by `gradle -M sha256 createReleaseZip`
52 }).gradle-init;
53 pname = "star-rod";
54 desktopItem = pkgs.makeDesktopItem {
55 name = pname;
56 desktopName = "Star Rod";
57 exec = pname;
58 comment = description;
59 type = "Application";
60 categories = [ "Development" "3DGraphics" "Java" ];
61 keywords = [ "Paper Mario" "Nintendo 64" "ROM Hacking" "Modding" ];
62 icon = "star-rod";
63 terminal = false;
64 startupWMClass = "app-StarRodMain";
65 };
66 in {
67 default = pkgs.stdenv.mkDerivation rec {
68 inherit pname;
69 version = builtins.elemAt (builtins.match "^.*version=([[:digit:].]+).*$" (builtins.readFile ./app.properties)) 0;
70 src = ./.;
71 nativeBuildInputs = let
72 jdk = pkgs."jdk${toString javaVersion}";
73 gradle = pkgs.gradle.override { java = jdk; };
74 in [
75 pkgs.makeWrapper
76 pkgs.unzip
77
78 gradle
79 jdk
80 ];
81 buildPhase = ''
82 export GRADLE_USER_HOME="/tmp" # https://github.com/NixOS/nixpkgs/issues/34707
83 gradle createReleaseZip --info -I ${gradle-init-script} --offline --full-stacktrace
84 '';
85 installPhase = ''
86 unzip -d $out build/release/StarRod-*.zip
87 rm $out/StarRod.bat
88
89 mkdir -p $out/share/java
90 mv $out/StarRod.jar $out/share/java
91
92 mkdir -p $out/bin
93 makeWrapper ${pkgs.jre}/bin/java $out/bin/${pname} \
94 --add-flags "-cp $out/share/java/StarRod.jar -mx2G -Djava.library.path=${makeLibPath pkgs} app.StarRodMain"
95
96 # TODO: icon
97 #install -Dm444 logo_512.png $out/share/icons/hicolor/512x512/apps/${pname}.png
98 install -Dm444 -t $out/share/applications ${desktopItem}/share/applications/*
99 '';
100 meta = with pkgs.lib; {
101 homepage = "https://github.com/z64a/star-rod";
102 inherit description;
103 mainProgram = pname;
104 license = licenses.mit;
105 platforms = supportedSystems;
106 };
107 };
108 });
109 };
110}