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