pytrainer: unpin python 3.10
[NixPkgs.git] / pkgs / games / shattered-pixel-dungeon / generic.nix
blob3e81c54bba9114217810acd8194279ee767cd44e
1 # Generic builder for shattered pixel forks/mods
2 { pname
3 , version
4 , src
5 , meta
6 , desktopName
7 , patches ? [ ./disable-beryx.patch ]
8 , depsPath ? null
10 , lib
11 , stdenv
12 , makeWrapper
13 , gradle
14 , perl
15 , jre
16 , libGL
17 , libpulseaudio
18 , makeDesktopItem
19 , copyDesktopItems
20 , ...
21 }@attrs:
23 let
24   cleanAttrs = builtins.removeAttrs attrs [
25     "lib"
26     "stdenv"
27     "makeWrapper"
28     "gradle"
29     "perl"
30     "jre"
31     "libpulseaudio"
32     "makeDesktopItem"
33     "copyDesktopItems"
34   ];
36   postPatch = ''
37     # disable gradle plugins with native code and their targets
38     perl -i.bak1 -pe "s#(^\s*id '.+' version '.+'$)#// \1#" build.gradle
39     perl -i.bak2 -pe "s#(.*)#// \1# if /^(buildscript|task portable|task nsis|task proguard|task tgz|task\(afterEclipseImport\)|launch4j|macAppBundle|buildRpm|buildDeb|shadowJar|robovm|git-version)/ ... /^}/" build.gradle
40     # Remove unbuildable Android/iOS stuff
41     rm -f android/build.gradle ios/build.gradle
42     ${attrs.postPatch or ""}
43   '';
45   desktopItem = makeDesktopItem {
46     name = pname;
47     inherit desktopName;
48     comment = meta.description;
49     icon = pname;
50     exec = pname;
51     terminal = false;
52     categories = [ "Game" "AdventureGame" ];
53     keywords = [ "roguelike" "dungeon" "crawler" ];
54   };
56   depsPath' = if depsPath != null then depsPath else ./. + "/${pname}/deps.json";
58 in stdenv.mkDerivation (cleanAttrs // {
59   inherit pname version src patches postPatch;
61   mitmCache = gradle.fetchDeps {
62     inherit pname;
63     data = depsPath';
64   };
66   __darwinAllowLocalNetworking = true;
68   nativeBuildInputs = [
69     gradle
70     perl
71     makeWrapper
72     copyDesktopItems
73   ] ++ attrs.nativeBuildInputs or [];
75   desktopItems = [ desktopItem ];
77   gradleBuildTask = "desktop:release";
79   installPhase = ''
80     runHook preInstall
82     install -Dm644 desktop/build/libs/desktop-*.jar $out/share/${pname}.jar
83     mkdir $out/bin
84     makeWrapper ${jre}/bin/java $out/bin/${pname} \
85       --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libGL libpulseaudio ]} \
86       --add-flags "-jar $out/share/${pname}.jar"
88     for s in 16 32 48 64 128 256; do
89       # Some forks only have some icons and/or name them slightly differently
90       if [ -f desktop/src/main/assets/icons/icon_$s.png ]; then
91         install -Dm644 desktop/src/main/assets/icons/icon_$s.png \
92           $out/share/icons/hicolor/''${s}x$s/apps/${pname}.png
93       fi
94       if [ -f desktop/src/main/assets/icons/icon_''${s}x$s.png ]; then
95         install -Dm644 desktop/src/main/assets/icons/icon_''${s}x$s.png \
96           $out/share/icons/hicolor/''${s}x$s/apps/${pname}.png
97       fi
98     done
100     runHook postInstall
101   '';
103   meta = with lib; {
104     sourceProvenance = with sourceTypes; [
105       fromSource
106       binaryBytecode  # deps
107     ];
108     license = licenses.gpl3Plus;
109     maintainers = with maintainers; [ fgaz ];
110     platforms = platforms.all;
111     mainProgram = pname;
112   } // meta;