29 , enableInstaller ? false
30 , enableMacOSGuests ? false, fetchFromGitHub, gnutar, unzip
35 fusionVersion = "13.5.1";
36 fusionBuild = "23298085";
37 unlockerVersion = "3.0.5";
40 darwinIsoSrc = fetchurl {
41 url = "https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/${fusionVersion}/${fusionBuild}/universal/core/com.vmware.fusion.zip.tar";
42 sha256 = "sha256-bn6hoicby2YVj1pZTBzBhabNhKefzVQTm5vIrdTO2K4=";
46 unlockerSrc = fetchFromGitHub {
47 owner = "paolo-projects";
49 rev = "${unlockerVersion}";
50 sha256 = "sha256-JSEW1gqQuLGRkathlwZU/TnG6dL/xWKW4//SfE+kO0A=";
53 gdbm3 = gdbm.overrideAttrs (old: rec {
57 url = "mirror://gnu/gdbm/gdbm-${version}.tar.gz";
58 sha256 = "sha256-zDQDOKLii0AFirnrU1SiHVP4ihWC6iG6C7GFw3ooHck=";
63 cp .libs/libgdbm*.so* $out/lib/
67 vmware-unpack-env = buildFHSEnv rec {
68 name = "vmware-unpack-env";
69 targetPkgs = pkgs: [ zlib ];
72 stdenv.mkDerivation rec {
73 pname = "vmware-workstation";
98 nativeBuildInputs = [ python3 vmware-unpack-env autoPatchelfHook makeWrapper ]
99 ++ lib.optionals enableInstaller [ sqlite bzip2 ]
100 ++ lib.optionals enableMacOSGuests [ gnutar unzip ];
103 url = "https://download3.vmware.com/software/WKST-${builtins.replaceStrings ["."] [""] version}-LX/VMware-Workstation-Full-${version}-${build}.x86_64.bundle";
104 sha256 = "sha256-qmC3zvKoes77z3x6UkLHsJ17kQrL1a/rxe9mF+UMdJY=";
108 ${vmware-unpack-env}/bin/vmware-unpack-env -c "sh ${src} --extract unpacked"
110 ${lib.optionalString enableMacOSGuests ''
112 tar -xvpf "${darwinIsoSrc}" -C fusion/
113 unzip "fusion/com.vmware.fusion.zip" \
114 "payload/VMware Fusion.app/Contents/Library/isoimages/x86_x64/darwin.iso" \
115 "payload/VMware Fusion.app/Contents/Library/isoimages/x86_x64/darwinPre15.iso" \
120 patchPhase = lib.optionalString enableMacOSGuests ''
121 cp -R "${unlockerSrc}" unlocker/
123 substituteInPlace unlocker/unlocker.py --replace \
124 "/usr/lib/vmware/bin/" "$out/lib/vmware/bin"
126 substituteInPlace unlocker/unlocker.py --replace \
127 "/usr/lib/vmware/lib/libvmwarebase.so/libvmwarebase.so" "$out/lib/vmware/lib/libvmwarebase.so/libvmwarebase.so"
138 #### Replicate vmware-installer's order but VMX first because of appLoader
139 ${lib.optionalString enableInstaller ''
141 echo "Installing VMware Installer"
142 unpacked="unpacked/vmware-installer"
143 vmware_installer_version=$(cat "unpacked/vmware-installer/manifest.xml" | grep -oPm1 "(?<=<version>)[^<]+")
144 dest="$out/lib/vmware-installer/$vmware_installer_version"
147 cp -r $unpacked/vmis* $dest/
148 cp -r $unpacked/sopython $dest/
149 cp -r $unpacked/python $dest/
150 cp -r $unpacked/cdsHelper $dest/
151 cp -r $unpacked/vmware* $dest/
152 cp -r $unpacked/bin $dest/
153 cp -r $unpacked/lib $dest/
155 chmod +x $dest/vmis-launcher $dest/sopython/* $dest/python/init.sh $dest/vmware-*
156 ln -s $dest/vmware-installer $out/bin/vmware-installer
158 mkdir -p $out/etc/vmware-installer
159 cp ${./vmware-installer-bootstrap} $out/etc/vmware-installer/bootstrap
160 sed -i -e "s,@@INSTALLERDIR@@,$dest," $out/etc/vmware-installer/bootstrap
161 sed -i -e "s,@@IVERSION@@,$vmware_installer_version," $out/etc/vmware-installer/bootstrap
162 sed -i -e "s,@@BUILD@@,${build}," $out/etc/vmware-installer/bootstrap
164 # create database of vmware guest tools (avoids vmware fetching them later)
165 mkdir -p $out/etc/vmware-installer/components
166 database_filename=$out/etc/vmware-installer/database
167 touch $database_filename
168 sqlite3 "$database_filename" "CREATE TABLE settings(key VARCHAR PRIMARY KEY, value VARCHAR NOT NULL, component_name VARCHAR NOT NULL);"
169 sqlite3 "$database_filename" "INSERT INTO settings(key,value,component_name) VALUES('db.schemaVersion','2','vmware-installer');"
170 sqlite3 "$database_filename" "CREATE TABLE components(id INTEGER PRIMARY KEY, name VARCHAR NOT NULL, version VARCHAR NOT NULL, buildNumber INTEGER NOT NULL, component_core_id INTEGER NOT NULL, longName VARCHAR NOT NULL, description VARCHAR, type INTEGER NOT NULL);"
171 for folder in unpacked/**/.installer ; do
172 component="$(basename $(dirname $folder))"
173 component_version=$(cat unpacked/$component/manifest.xml | grep -oPm1 "(?<=<version>)[^<]+")
174 component_core_id=$([ "$component" == "vmware-installer" ] && echo "-1" || echo "1")
175 type=$([ "$component" == "vmware-workstation" ] && echo "0" || echo "1")
176 sqlite3 "$database_filename" "INSERT INTO components(name,version,buildNumber,component_core_id,longName,description,type) VALUES(\"$component\",\"$component_version\",\"${build}\",$component_core_id,\"$component\",\"$component\",$type);"
177 mkdir -p $out/etc/vmware-installer/components/$component
178 cp -r $folder/* $out/etc/vmware-installer/components/$component
183 echo "Installing VMware Bootstrap"
184 cp ${./vmware-bootstrap} $out/etc/vmware/bootstrap
185 sed -i -e "s,@@PREFIXDIR@@,$out," $out/etc/vmware/bootstrap
188 echo "Installing VMware Config"
189 cp ${./vmware-config} $out/etc/vmware/config
190 sed -i -e "s,@@VERSION@@,${version}," $out/etc/vmware/config
191 sed -i -e "s,@@BUILD@@,${build}," $out/etc/vmware/config
192 sed -i -e "s,@@PREFIXDIR@@,$out," $out/etc/vmware/config
195 echo "Installing VMware VMX"
196 unpacked="unpacked/vmware-vmx"
197 cp -r $unpacked/bin/* $out/bin/
198 cp -r $unpacked/etc/modprobe.d $out/etc/
199 cp -r $unpacked/etc/init.d/* $out/etc/init.d/
200 cp -r $unpacked/roms $out/lib/vmware/
201 cp -r $unpacked/sbin/* $out/bin/
203 cp -r $unpacked/lib/libconf $out/lib/vmware/
204 rm $out/lib/vmware/libconf/etc/fonts/fonts.conf
206 cp -r $unpacked/lib/bin $out/lib/vmware/
207 cp -r $unpacked/lib/lib $out/lib/vmware/
208 cp -r $unpacked/lib/scripts $out/lib/vmware/
209 cp -r $unpacked/lib/icu $out/lib/vmware/
210 cp -r $unpacked/lib/share $out/lib/vmware/
211 cp -r $unpacked/lib/modules $out/lib/vmware/
212 cp -r $unpacked/lib/include $out/lib/vmware/
214 cp -r $unpacked/extra/checkvm $out/bin/
215 cp -r $unpacked/extra/modules.xml $out/lib/vmware/modules/
217 ln -s $out/lib/vmware/bin/appLoader $out/lib/vmware/bin/vmware-vmblock-fuse
218 ln -s $out/lib/vmware/icu $out/etc/vmware/icu
220 # Replace vmware-modconfig with simple error dialog
221 cp ${./vmware-modconfig} $out/bin/vmware-modconfig
222 sed -i -e "s,ETCDIR=/etc/vmware,ETCDIR=$out/etc/vmware," $out/bin/vmware-modconfig
224 # Patch dynamic libs in
225 for binary in "mksSandbox" "mksSandbox-debug" "mksSandbox-stats" "vmware-vmx" "vmware-vmx-debug" "vmware-vmx-stats"
228 --add-needed ${libaio}/lib/libaio.so.1 \
229 --add-needed ${vulkan-loader}/lib/libvulkan.so.1 \
230 --add-needed ${alsa-lib}/lib/libasound.so \
231 --add-needed ${libpulseaudio}/lib/libpulse.so.0 \
232 --add-needed ${libGL}/lib/libEGL.so.1 \
233 --add-needed ${numactl}/lib/libnuma.so.1 \
234 --add-needed ${libX11}/lib/libX11.so.6 \
235 --add-needed ${libXi}/lib/libXi.so.6 \
236 --add-needed ${libGL}/lib/libGL.so.1 \
237 $out/lib/vmware/bin/$binary
240 ## VMware USB Arbitrator
241 echo "Installing VMware USB Arbitrator"
242 unpacked="unpacked/vmware-usbarbitrator"
243 cp -r $unpacked/etc/init.d/* $out/etc/init.d/
244 cp -r $unpacked/bin/* $out/bin/
245 ln -s $out/lib/vmware/bin/appLoader $out/lib/vmware/bin/vmware-usbarbitrator
247 ## VMware Player Setup
248 echo "Installing VMware Player Setup"
249 unpacked="unpacked/vmware-player-setup"
250 mkdir -p $out/lib/vmware/setup
251 cp $unpacked/vmware-config $out/lib/vmware/setup/
253 ## VMware Network Editor
254 echo "Installing VMware Network Editor"
255 unpacked="unpacked/vmware-network-editor"
256 cp -r $unpacked/lib $out/lib/vmware/
259 echo "Installing VMware Tools"
260 mkdir -p $out/lib/vmware/isoimages/
261 cp unpacked/vmware-tools-linux/linux.iso \
262 unpacked/vmware-tools-linuxPreGlibc25/linuxPreGlibc25.iso \
263 unpacked/vmware-tools-netware/netware.iso \
264 unpacked/vmware-tools-solaris/solaris.iso \
265 unpacked/vmware-tools-winPre2k/winPre2k.iso \
266 unpacked/vmware-tools-winPreVista/winPreVista.iso \
267 unpacked/vmware-tools-windows/windows.iso \
268 $out/lib/vmware/isoimages/
270 ${lib.optionalString enableMacOSGuests ''
271 echo "Installing VMWare Tools for MacOS"
273 "fusion/payload/VMware Fusion.app/Contents/Library/isoimages/x86_x64/darwin.iso" \
274 "fusion/payload/VMware Fusion.app/Contents/Library/isoimages/x86_x64/darwinPre15.iso" \
275 $out/lib/vmware/isoimages/
278 ## VMware Player Application
279 echo "Installing VMware Player Application"
280 unpacked="unpacked/vmware-player-app"
281 cp -r $unpacked/lib/* $out/lib/vmware/
282 cp -r $unpacked/share/* $out/share/
283 cp -r $unpacked/bin/* $out/bin/
284 cp -r $unpacked/doc/* $out/share/doc/ # Licences
286 for target in "vmplayer" "vmware-enter-serial" "vmware-setup-helper" "licenseTool" "vmware-mount" "vmware-fuseUI" "vmware-app-control" "vmware-zenity"
288 ln -s $out/lib/vmware/bin/appLoader $out/lib/vmware/bin/$target
291 ln -s $out/lib/vmware/bin/vmware-mount $out/bin/vmware-mount
292 ln -s $out/lib/vmware/bin/vmware-fuseUI $out/bin/vmware-fuseUI
293 ln -s $out/lib/vmware/bin/vmrest $out/bin/vmrest
296 sed -i -e "s,ETCDIR=/etc/vmware,ETCDIR=$out/etc/vmware," $out/bin/vmplayer
297 sed -i -e "s,/sbin/modprobe,${kmod}/bin/modprobe," $out/bin/vmplayer
298 sed -i -e "s,@@BINARY@@,$out/bin/vmplayer," $out/share/applications/vmware-player.desktop
300 ## VMware OVF Tool compoment
301 echo "Installing VMware OVF Tool for Linux"
302 unpacked="unpacked/vmware-ovftool"
303 mkdir -p $out/lib/vmware-ovftool/
305 cp -r $unpacked/* $out/lib/vmware-ovftool/
306 chmod 755 $out/lib/vmware-ovftool/ovftool*
307 makeWrapper "$out/lib/vmware-ovftool/ovftool.bin" "$out/bin/ovftool"
309 ## VMware Network Editor User Interface
310 echo "Installing VMware Network Editor User Interface"
311 unpacked="unpacked/vmware-network-editor-ui"
312 cp -r $unpacked/share/* $out/share/
314 ln -s $out/lib/vmware/bin/appLoader $out/lib/vmware/bin/vmware-netcfg
315 ln -s $out/lib/vmware/bin/vmware-netcfg $out/bin/vmware-netcfg
317 # Patch network editor ui
319 sed -i -e "s,@@BINARY@@,$out/bin/vmware-netcfg," $out/share/applications/vmware-netcfg.desktop
321 ## VMware VIX Core Library
322 echo "Installing VMware VIX Core Library"
323 unpacked="unpacked/vmware-vix-core"
324 mkdir -p $out/lib/vmware-vix
325 cp -r $unpacked/lib/* $out/lib/vmware-vix/
326 cp -r $unpacked/bin/* $out/bin/
327 cp $unpacked/*.txt $out/lib/vmware-vix/
329 mkdir -p $out/share/doc/vmware-vix/
330 cp -r $unpacked/doc/* $out/share/doc/vmware-vix/
332 mkdir -p $out/include/
333 cp -r $unpacked/include/* $out/include/
335 ## VMware VIX Workstation-17.0.0 Library
336 echo "Installing VMware VIX Workstation-17.0.0 Library"
337 unpacked="unpacked/vmware-vix-lib-Workstation1700"
338 cp -r $unpacked/lib/* $out/lib/vmware-vix/
340 ## VMware VProbes component for Linux
341 echo "Installing VMware VProbes component for Linux"
342 unpacked="unpacked/vmware-vprobe"
343 cp -r $unpacked/bin/* $out/bin/
344 cp -r $unpacked/lib/* $out/lib/vmware/
346 ## VMware Workstation
347 echo "Installing VMware Workstation"
348 unpacked="unpacked/vmware-workstation"
349 cp -r $unpacked/bin/* $out/bin/
350 cp -r $unpacked/lib/* $out/lib/vmware/
351 cp -r $unpacked/share/* $out/share/
352 cp -r $unpacked/man $out/share/
353 cp -r $unpacked/doc $out/share/
355 ln -s $out/lib/vmware/bin/appLoader $out/lib/vmware/bin/vmware
356 ln -s $out/lib/vmware/bin/appLoader $out/lib/vmware/bin/vmware-tray
357 ln -s $out/lib/vmware/bin/appLoader $out/lib/vmware/bin/vmware-vprobe
360 sed -i -e "s,ETCDIR=/etc/vmware,ETCDIR=$out/etc/vmware,g" $out/bin/vmware
361 sed -i -e "s,/sbin/modprobe,${kmod}/bin/modprobe,g" $out/bin/vmware
362 sed -i -e "s,@@BINARY@@,$out/bin/vmware," $out/share/applications/vmware-workstation.desktop
364 chmod +x $out/bin/* $out/lib/vmware/bin/* $out/lib/vmware/setup/*
366 # Harcoded pkexec hack
367 for lib in "lib/vmware/lib/libvmware-mount.so/libvmware-mount.so" "lib/vmware/lib/libvmwareui.so/libvmwareui.so" "lib/vmware/lib/libvmware-fuseUI.so/libvmware-fuseUI.so"
369 sed -i -e "s,/usr/local/sbin,/run/vmware/bin," "$out/$lib"
372 ${lib.optionalString enableMacOSGuests ''
373 echo "Running VMWare Unlocker to enable macOS Guests"
374 python3 unlocker/unlocker.py
378 wrapProgram $out/lib/vmware/bin/vmware-vmx
379 rm $out/lib/vmware/bin/vmware-vmx
380 ln -s /run/wrappers/bin/vmware-vmx $out/lib/vmware/bin/vmware-vmx
384 description = "Industry standard desktop hypervisor for x86-64 architecture";
385 homepage = "https://www.vmware.com/products/workstation-pro.html";
386 sourceProvenance = with sourceTypes; [ binaryNativeCode ];
387 license = licenses.unfree;
388 platforms = [ "x86_64-linux" ];
389 maintainers = with maintainers; [ cawilliamson deinferno vifino ];