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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
{ lib, stdenv
, makeWrapper
, fetchurl
, cabextract
, gettext
, glxinfo
, gnupg
, icoutils
, imagemagick
, netcat-gnu
, p7zip
, python3
, unzip
, wget
, wine
, xdg-user-dirs
, xterm
, pkgs
, pkgsi686Linux
, which
, curl
, jq
, xorg
, libGL
, steam-run
# needed for avoiding crash on file selector
, gsettings-desktop-schemas
, glib
, wrapGAppsHook
, hicolor-icon-theme
}:
let
version = "4.4";
binpath = lib.makeBinPath [
cabextract
python
gettext
glxinfo
gnupg
icoutils
imagemagick
netcat-gnu
p7zip
unzip
wget
wine
xdg-user-dirs
xterm
which
curl
jq
];
ld32 =
if stdenv.hostPlatform.system == "x86_64-linux" then "${stdenv.cc}/nix-support/dynamic-linker-m32"
else if stdenv.hostPlatform.system == "i686-linux" then "${stdenv.cc}/nix-support/dynamic-linker"
else throw "Unsupported platform for PlayOnLinux: ${stdenv.hostPlatform.system}";
ld64 = "${stdenv.cc}/nix-support/dynamic-linker";
libs = pkgs: lib.makeLibraryPath [ xorg.libX11 libGL ];
python = python3.withPackages(ps: with ps; [
wxpython
setuptools
natsort
]);
in stdenv.mkDerivation {
pname = "playonlinux";
inherit version;
src = fetchurl {
url = "https://www.playonlinux.com/script_files/PlayOnLinux/${version}/PlayOnLinux_${version}.tar.gz";
sha256 = "0n40927c8cnjackfns68zwl7h4d7dvhf7cyqdkazzwwx4k2xxvma";
};
patches = [
./0001-fix-locale.patch
];
nativeBuildInputs = [ makeWrapper wrapGAppsHook ];
preBuild = ''
makeFlagsArray+=(PYTHON="python -m py_compile")
'';
buildInputs = [
glib
xorg.libX11
libGL
python
gsettings-desktop-schemas
hicolor-icon-theme
];
postPatch = ''
substituteAllInPlace python/lib/lng.py
patchShebangs python tests/python
sed -i "s/ %F//g" etc/PlayOnLinux.desktop
'';
installPhase = ''
install -d $out/share/playonlinux
cp -r . $out/share/playonlinux/
install -D -m644 etc/PlayOnLinux.desktop $out/share/applications/playonlinux.desktop
makeWrapper $out/share/playonlinux/playonlinux{,-wrapper} \
--prefix PATH : ${binpath} \
--prefix XDG_DATA_DIRS : ${gsettings-desktop-schemas}/share/GConf
# steam-run is needed to run the downloaded wine executables
mkdir -p $out/bin
cat > $out/bin/playonlinux <<EOF
#!${stdenv.shell} -e
exec ${steam-run}/bin/steam-run $out/share/playonlinux/playonlinux-wrapper "\$@"
EOF
chmod a+x $out/bin/playonlinux
bunzip2 $out/share/playonlinux/bin/check_dd_x86.bz2
patchelf --set-interpreter $(cat ${ld32}) --set-rpath ${libs pkgsi686Linux} $out/share/playonlinux/bin/check_dd_x86
${if stdenv.hostPlatform.system == "x86_64-linux" then ''
bunzip2 $out/share/playonlinux/bin/check_dd_amd64.bz2
patchelf --set-interpreter $(cat ${ld64}) --set-rpath ${libs pkgs} $out/share/playonlinux/bin/check_dd_amd64
'' else ''
rm $out/share/playonlinux/bin/check_dd_amd64.bz2
''}
for f in $out/share/playonlinux/bin/*; do
bzip2 $f
done
'';
dontWrapGApps = true;
postFixup = ''
makeWrapper $out/share/playonlinux/playonlinux{,-wrapped} \
--prefix PATH : ${binpath} \
''${gappsWrapperArgs[@]}
makeWrapper ${steam-run}/bin/steam-run $out/bin/playonlinux \
--add-flags $out/share/playonlinux/playonlinux-wrapped
'';
meta = with lib; {
description = "GUI for managing Windows programs under linux";
homepage = "https://www.playonlinux.com/";
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
license = licenses.gpl3;
maintainers = [ maintainers.pasqui23 ];
platforms = [ "x86_64-linux" "i686-linux" ];
mainProgram = "playonlinux";
};
}
|