Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ 2 stdenv, 3 lib, 4 procps, 5 fetchurl, 6 dpkg, 7 writeShellScript, 8 buildFHSEnv, 9 nspr, 10 kmod, 11 systemdMinimal, 12 glib, 13 pulseaudio, 14 libXext, 15 libX11, 16 libXrandr, 17 glibc, 18 cairo, 19 libva, 20 libdrm, 21 coreutils, 22 libXi, 23 libGL, 24 bash, 25 libXcomposite, 26 libXdamage, 27 libXfixes, 28 libXtst, 29 nss, 30 libXxf86vm, 31 gtk3, 32 gdk-pixbuf, 33 pango, 34 libz, 35 libayatana-appindicator, 36}: 37 38let 39 version = "4.7.2.0"; 40 todesk-unwrapped = stdenv.mkDerivation (finalAttrs: { 41 pname = "todesk-unwrapped"; 42 version = version; 43 src = fetchurl { 44 url = "https://web.archive.org/web/20250302114501if_/https://newdl.todesk.com/linux/todesk-v4.7.2.0-amd64.deb"; 45 hash = "sha256-v7VpXXFVaKI99RpzUWfAc6eE7NHGJeFrNeUTbVuX+yg="; 46 }; 47 nativeBuildInputs = [ dpkg ]; 48 49 unpackPhase = '' 50 runHook preUnpack 51 dpkg -x $src ./todesk-src 52 runHook postUnpack 53 ''; 54 55 installPhase = '' 56 runHook preInstall 57 mkdir -p "$out/lib" 58 cp -r todesk-src/* "$out" 59 cp "${libayatana-appindicator}/lib/libayatana-appindicator3.so.1" "$out/opt/todesk/bin/libappindicator3.so.1" 60 mv "$out/opt/todesk/bin" "$out/bin" 61 cp "$out/bin/libmfx.so.1" "$out/lib" 62 cp "$out/bin/libglut.so.3" "$out/lib" 63 mkdir "$out/opt/todesk/config" 64 mkdir "$out/opt/todesk/bin" 65 mkdir -p "$out/share/applications" 66 mkdir "$out/share/icons" 67 runHook postInstall 68 ''; 69 70 }); 71 72in 73buildFHSEnv { 74 inherit version; 75 pname = "todesk"; 76 targetPkgs = pkgs: [ 77 todesk-unwrapped 78 pulseaudio 79 nspr 80 kmod 81 libXi 82 systemdMinimal 83 glib 84 libz 85 bash 86 coreutils 87 libX11 88 libXext 89 libXrandr 90 glibc 91 libdrm 92 libGL 93 procps 94 cairo 95 libXcomposite 96 libXdamage 97 libXfixes 98 libXtst 99 nss 100 libXxf86vm 101 gtk3 102 gdk-pixbuf 103 pango 104 libva 105 ]; 106 extraBwrapArgs = [ 107 "--tmpfs /opt/todesk" 108 "--bind /var/lib/todesk /opt/todesk/config" # create the folder before bind to avoid permission denided. 109 "--bind ${todesk-unwrapped}/bin /opt/todesk/bin" 110 "--bind /var/lib/todesk /etc/todesk" # service write uuid here. Such a pain! 111 ]; # soft link doesn't work so that we should bind ourselves 112 runScript = writeShellScript "ToDesk.sh" '' 113 export LIBVA_DRIVER_NAME=iHD 114 export LIBVA_DRIVERS_PATH=${todesk-unwrapped}/bin 115 if [ "''${1}" = 'service' ] 116 then 117 /opt/todesk/bin/ToDesk_Service 118 else 119 /opt/todesk/bin/ToDesk 120 fi 121 ''; # a small script to choose what to exec 122 extraInstallCommands = '' 123 mkdir -p "$out/share/applications" 124 mkdir -p "$out/share/icons" 125 cp ${todesk-unwrapped}/usr/share/applications/todesk.desktop $out/share/applications 126 cp -rf ${todesk-unwrapped}/usr/share/icons/* $out/share/icons 127 substituteInPlace "$out/share/applications/todesk.desktop" \ 128 --replace-fail '/opt/todesk/bin/ToDesk' "$out/bin/todesk desktop" 129 substituteInPlace "$out/share/applications/todesk.desktop" \ 130 --replace-fail '/opt/todesk/bin' "${todesk-unwrapped}/lib" 131 ''; 132 meta = { 133 description = "Remote Desktop Application"; 134 homepage = "https://www.todesk.com/linux.html"; 135 license = lib.licenses.unfree; 136 platforms = [ "x86_64-linux" ]; 137 sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; 138 maintainers = with lib.maintainers; [ bot-wxt1221 ]; 139 mainProgram = "todesk"; 140 }; 141}