1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 fetchpatch,
6 cmake,
7 git,
8 pkg-config,
9 qttools,
10 which,
11 wrapQtAppsHook,
12 boost,
13 hunspell,
14 libGLU,
15 libsForQt5,
16 libsecret,
17 libzip,
18 lua,
19 pcre,
20 pugixml,
21 qtbase,
22 qtmultimedia,
23 discord-rpc,
24 yajl,
25}:
26
27let
28 overrideLua =
29 let
30 packageOverrides = self: super: {
31 # luasql-sqlite3 master branch broke compatibility with lua 5.1. Pin to
32 # an earlier commit.
33 # https://github.com/lunarmodules/luasql/issues/147
34 luasql-sqlite3 = super.luaLib.overrideLuarocks super.luasql-sqlite3 (drv: {
35 version = "2.6.0-1-custom";
36 src = fetchFromGitHub {
37 owner = "lunarmodules";
38 repo = "luasql";
39 rev = "8c58fd6ee32faf750daf6e99af015a31402578d1";
40 hash = "sha256-XlTB5O81yWCrx56m0cXQp7EFzeOyfNeqGbuiYqMrTUk=";
41 };
42 });
43 };
44 in
45 lua.override { inherit packageOverrides; };
46
47 luaEnv = overrideLua.withPackages (
48 ps: with ps; [
49 luazip
50 luafilesystem
51 lrexlib-pcre
52 luasql-sqlite3
53 lua-yajl
54 luautf8
55 ]
56 );
57in
58stdenv.mkDerivation rec {
59 pname = "mudlet";
60 version = "4.17.2";
61
62 src = fetchFromGitHub {
63 owner = "Mudlet";
64 repo = "Mudlet";
65 rev = "Mudlet-${version}";
66 fetchSubmodules = true;
67 hash = "sha256-K75frptePKfHeGQNXaX4lKsLwO6Rs6AAka6hvP8MA+k=";
68 };
69
70 patches = [
71 (fetchpatch {
72 name = "darwin-AppKit.patch";
73 url = "https://github.com/Mudlet/Mudlet/commit/68cdd404f81a6d16c80068c45fe0f10802f08d9e.patch";
74 hash = "sha256-74FtcjOR/lu9ohtcoup0+gUfCQRznO48zMmb97INhdY=";
75 })
76 ];
77
78 nativeBuildInputs = [
79 cmake
80 git
81 luaEnv
82 pkg-config
83 qttools
84 which
85 wrapQtAppsHook
86 ];
87
88 buildInputs = [
89 boost
90 hunspell
91 libGLU
92 libsForQt5.qtkeychain
93 libsecret
94 libzip
95 luaEnv
96 pcre
97 pugixml
98 qtbase
99 qtmultimedia
100 yajl
101 discord-rpc
102 ];
103
104 cmakeFlags = [
105 # RPATH of binary /nix/store/.../bin/... contains a forbidden reference to /build/
106 "-DCMAKE_SKIP_BUILD_RPATH=ON"
107 ];
108
109 WITH_FONTS = "NO";
110 WITH_UPDATER = "NO";
111
112 installPhase = ''
113 runHook preInstall
114
115 mkdir -pv $out/lib
116 cp 3rdparty/edbee-lib/edbee-lib/qslog/lib/libQsLog${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib
117 mkdir -pv $out/share/mudlet
118 cp -r ../src/mudlet-lua/lua $out/share/mudlet/
119
120 mkdir -pv $out/share/pixmaps
121 cp -r ../mudlet.png $out/share/pixmaps/
122
123 cp -r ../translations $out/share/
124
125 ''
126 + lib.optionalString stdenv.hostPlatform.isDarwin ''
127 mkdir -p $out/Applications
128 cp -r src/mudlet.app/ $out/Applications/mudlet.app
129 mv $out/Applications/mudlet.app/Contents/MacOS/mudlet $out/Applications/mudlet.app/Contents/MacOS/mudlet-unwrapped
130 makeQtWrapper $out/Applications/Mudlet.app/Contents/MacOS/mudlet-unwrapped $out/Applications/Mudlet.app/Contents/MacOS/mudlet \
131 --set LUA_CPATH "${luaEnv}/lib/lua/${lua.luaversion}/?.so" \
132 --prefix LUA_PATH : "$NIX_LUA_PATH" \
133 --prefix DYLD_LIBRARY_PATH : "${
134 lib.makeLibraryPath [
135 libsForQt5.qtkeychain
136 discord-rpc
137 ]
138 }:$out/lib" \
139 --chdir "$out";
140
141 ''
142 + lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
143 mkdir -pv $out/bin
144 cp src/mudlet $out/bin/mudlet-unwrapped
145 makeQtWrapper $out/bin/mudlet-unwrapped $out/bin/mudlet \
146 --set LUA_CPATH "${luaEnv}/lib/lua/${lua.luaversion}/?.so" \
147 --prefix LUA_PATH : "$NIX_LUA_PATH" \
148 --prefix LD_LIBRARY_PATH : "${
149 lib.makeLibraryPath [
150 libsForQt5.qtkeychain
151 discord-rpc
152 ]
153 }" \
154 --chdir "$out";
155
156 mkdir -pv $out/share/applications
157 cp ../mudlet.desktop $out/share/applications/
158
159 ''
160 + ''
161 runHook postInstall
162 '';
163
164 meta = with lib; {
165 description = "Crossplatform mud client";
166 homepage = "https://www.mudlet.org/";
167 maintainers = with maintainers; [
168 wyvie
169 pstn
170 cpu
171 felixalbrigtsen
172 ];
173 platforms = platforms.linux ++ platforms.darwin;
174 license = licenses.gpl2Plus;
175 mainProgram = "mudlet";
176 };
177}