nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 copyDesktopItems,
6 makeDesktopItem,
7 makeWrapper,
8 wrapGAppsHook3,
9 gvfs,
10 maven,
11 jre,
12 udevCheckHook,
13}:
14let
15 pkgDescription = "All-in-one tool for managing Nintendo Switch homebrew";
16
17 selectSystem =
18 attrs:
19 attrs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
20
21 jreWithJavaFX = jre.override { enableJavaFX = true; };
22in
23maven.buildMavenPackage rec {
24 pname = "ns-usbloader";
25 version = "7.2";
26
27 src = fetchFromGitHub {
28 owner = "developersu";
29 repo = "ns-usbloader";
30 rev = "v${version}";
31 sha256 = "sha256-nZfAZ+IjoYXEWwH9oOhOQ5TOYUNiAGAqhHRhskyx/Vo=";
32 };
33
34 patches = [
35 ./no-launch4j.patch
36 ./make-deterministic.patch
37 ];
38
39 # JavaFX pulls in architecture dependent jar dependencies. :(
40 # May be possible to unify these, but could lead to huge closure sizes.
41 mvnHash = selectSystem {
42 x86_64-linux = "sha256-vXZAlZOh9pXNF1RL78oQRal5pkXFRKDz/7SP9LibgiA=";
43 aarch64-linux = "sha256-xC+feb41EPi30gBrVR8usanVULI2Pt0knztzNagPQiw=";
44 };
45
46 nativeBuildInputs = [
47 copyDesktopItems
48 makeWrapper
49 wrapGAppsHook3
50 gvfs
51 udevCheckHook
52 ];
53
54 doCheck = false;
55
56 doInstallCheck = true;
57
58 # Don't wrap binaries twice.
59 dontWrapGApps = true;
60
61 ### Issues:
62 # * Set us to only use software rendering with `-Dprism.order=sw`, had a hard time
63 # getting `prism_es2` happy with NixOS's GL/GLES.
64 # * Currently, there's also a lot of `Failed to build parent project for org.openjfx:javafx-*`
65 # at build, but jar runs fine when using `jreWithJavaFX`.
66
67 installPhase = ''
68 runHook preInstall
69
70 mkdir -p $out/share/java
71 install -Dm644 target/ns-usbloader-${version}.jar $out/share/java/ns-usbloader.jar
72
73 mkdir -p $out/lib/udev/rules.d
74 install -Dm644 ${./99-ns-usbloader.rules} $out/lib/udev/rules.d/99-ns-usbloader.rules
75
76 mkdir -p $out/share/icons/hicolor
77 install -Dm644 target/classes/res/app_icon32x32.png $out/share/icons/hicolor/32x32/apps/ns-usbloader.png
78 install -Dm644 target/classes/res/app_icon48x48.png $out/share/icons/hicolor/48x48/apps/ns-usbloader.png
79 install -Dm644 target/classes/res/app_icon64x64.png $out/share/icons/hicolor/64x64/apps/ns-usbloader.png
80 install -Dm644 target/classes/res/app_icon128x128.png $out/share/icons/hicolor/128x128/apps/ns-usbloader.png
81
82 runHook postInstall
83 '';
84
85 preFixup = ''
86 mkdir -p $out/bin
87 makeWrapper ${jreWithJavaFX}/bin/java $out/bin/ns-usbloader \
88 --append-flags "-Dprism.order=sw -jar $out/share/java/ns-usbloader.jar" \
89 "''${gappsWrapperArgs[@]}"
90 '';
91
92 desktopItems = [
93 (makeDesktopItem {
94 type = "Application";
95 name = "ns-usbloader";
96 desktopName = "NS-USBLoader";
97 comment = pkgDescription;
98 exec = "ns-usbloader";
99 icon = "ns-usbloader";
100 categories = [ "Game" ];
101 terminal = false;
102 keywords = [
103 "nintendo"
104 "switch"
105 ];
106 })
107 ];
108
109 meta = {
110 description = pkgDescription;
111 homepage = "https://github.com/developersu/ns-usbloader";
112 license = lib.licenses.gpl3Only;
113 maintainers = with lib.maintainers; [ soupglasses ];
114 platforms = [
115 "x86_64-linux"
116 "aarch64-linux"
117 ];
118 mainProgram = "ns-usbloader";
119 };
120}