biome: 1.9.2 -> 1.9.3 (#349335)
[NixPkgs.git] / pkgs / games / classicube / default.nix
blobe17c8bffd336060de379c9aa573ac308bde69a2f
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , dos2unix
5 , makeWrapper
6 , makeDesktopItem
7 , copyDesktopItems
8 , libX11
9 , libXi
10 , libGL
11 , curl
12 , openal
13 , liberation_ttf
16 stdenv.mkDerivation rec {
17   pname = "ClassiCube";
18   version = "1.3.7";
20   src = fetchFromGitHub {
21     owner = "UnknownShadow200";
22     repo = "ClassiCube";
23     rev = version;
24     sha256 = "sha256-ZITyfxkQB4Jpm2ZsQyM+ouPLqCVmGB7UZRXDSU/BX0k=";
25   };
27   nativeBuildInputs = [ dos2unix makeWrapper copyDesktopItems ];
29   desktopItems = [
30     (makeDesktopItem {
31       name = pname;
32       desktopName = pname;
33       genericName = "Sandbox Block Game";
34       exec = "ClassiCube";
35       icon = "CCicon";
36       comment = "Minecraft Classic inspired sandbox game";
37       categories = [ "Game" ];
38     })
39   ];
41   prePatch = ''
42     # The ClassiCube sources have DOS-style newlines
43     # which causes problems with diff/patch.
44     dos2unix 'src/Platform_Posix.c' 'src/Core.h'
45   '';
47   patches = [
48     # Fix hardcoded font paths
49     ./font-location.patch
50     # For some reason, the Makefile doesn't link
51     # with libcurl and openal when ClassiCube requires them.
52     ./fix-linking.patch
53   ];
55   font_path = "${liberation_ttf}/share/fonts/truetype";
57   enableParallelBuilding = true;
59   postPatch = ''
60     # ClassiCube hardcodes locations of fonts.
61     # This changes the hardcoded location
62     # to the path of liberation_ttf instead
63     substituteInPlace src/Platform_Posix.c \
64       --replace '%NIXPKGS_FONT_PATH%' "${font_path}"
65     # ClassiCube's Makefile hardcodes JOBS=1 for some reason,
66     # even though it works perfectly well multi-threaded.
67     substituteInPlace Makefile \
68       --replace 'JOBS=1' "JOBS=$NIX_BUILD_CORES"
69   '';
71   buildInputs = [ libX11 libXi libGL curl openal liberation_ttf ];
73   installPhase = ''
74     runHook preInstall
76     mkdir -p "$out/bin"
77     cp 'ClassiCube' "$out/bin"
78     # ClassiCube puts downloaded resources
79     # next to the location of the executable by default.
80     # This doesn't work with Nix
81     # as the location of the executable is read-only.
82     # We wrap the program to make it put its resources
83     # in ~/.local/share instead.
84     wrapProgram "$out/bin/ClassiCube" \
85       --run 'mkdir -p "$HOME/.local/share/ClassiCube"' \
86       --run 'cd       "$HOME/.local/share/ClassiCube"'
88     mkdir -p "$out/share/icons/hicolor/256x256/apps"
89     cp misc/CCicon.png "$out/share/icons/hicolor/256x256/apps"
91     runHook postInstall
92   '';
94   meta = with lib; {
95     homepage = "https://www.classicube.net/";
96     description = "Lightweight, custom Minecraft Classic/ClassiCube client with optional additions written from scratch in C";
97     license = licenses.bsd3;
98     platforms = platforms.linux;
99     maintainers = with maintainers; [ _360ied ];
100     mainProgram = "ClassiCube";
101   };