python312Packages.yoda: 2.0.1 -> 2.0.2
[NixPkgs.git] / pkgs / by-name / pl / plex-desktop / package.nix
blobaa79d6040db49a6a68b0fa82b79ff2627fbd2d52
2   alsa-lib,
3   autoPatchelfHook,
4   buildFHSEnv,
5   dbus,
6   elfutils,
7   expat,
8   extraEnv ? { },
9   fetchFromGitLab,
10   fetchurl,
11   glib,
12   glibc,
13   lib,
14   libGL,
15   libapparmor,
16   libbsd,
17   libedit,
18   libffi_3_3,
19   libgcrypt,
20   libglvnd,
21   makeShellWrapper,
22   sqlite,
23   squashfsTools,
24   stdenv,
25   tcp_wrappers,
26   udev,
27   waylandpp,
28   writeShellScript,
29   xkeyboard_config,
30   xorg,
31   xz,
32   zstd,
34 let
35   pname = "plex-desktop";
36   version = "1.101.0";
37   rev = "75";
38   meta = {
39     homepage = "https://plex.tv/";
40     description = "Streaming media player for Plex";
41     longDescription = ''
42       Plex for Linux is your client for playback on the Linux
43       desktop. It features the point and click interface you see in your browser
44       but uses a more powerful playback engine as well as
45       some other advance features.
46     '';
47     maintainers = with lib.maintainers; [ detroyejr ];
48     license = lib.licenses.unfree;
49     platforms = [ "x86_64-linux" ];
50     mainProgram = "plex-desktop";
51   };
53   # The latest unstable version isn't compatible with libraries that ship in the snap.
54   libglvnd-1_4_0 = libglvnd.overrideAttrs {
55     src = fetchFromGitLab {
56       domain = "gitlab.freedesktop.org";
57       owner = "glvnd";
58       repo = "libglvnd";
59       rev = "v1.4.0";
60       sha256 = "sha256-Y6JHRygXcZtnrdnqi1Lzyvh/635gwZWnMeW9aRCpxxs";
61     };
62   };
63   plex-desktop = stdenv.mkDerivation {
64     inherit pname version meta;
66     src = fetchurl {
67       url = "https://api.snapcraft.io/api/v1/snaps/download/qc6MFRM433ZhI1XjVzErdHivhSOhlpf0_${rev}.snap";
68       hash = "sha512-3ofO4a8HDWeUfjsv+4A5bC0jlQwxIew1CnL39Oa0bjnqShwRQjMW1vSHOjsJ1AHMkbp3h5W/2tFRxPL2C/Heqg==";
69     };
71     nativeBuildInputs = [ squashfsTools ];
73     buildInputs = [
74       alsa-lib
75       autoPatchelfHook
76       dbus
77       elfutils
78       expat
79       glib
80       glibc
81       libGL
82       libapparmor
83       libbsd
84       libedit
85       libffi_3_3
86       libgcrypt
87       makeShellWrapper
88       sqlite
89       squashfsTools
90       stdenv.cc.cc
91       tcp_wrappers
92       udev
93       waylandpp
94       xorg.libXinerama
95       xz
96       zstd
97     ];
99     unpackPhase = ''
100       runHook preUnpack
101       unsquashfs "$src"
102       cd squashfs-root
103       runHook postUnpack
104     '';
106     dontWrapQtApps = true;
108     installPhase = ''
109       runHook preInstall
111       cp -r . $out
113       ln -s ${libedit}/lib/libedit.so.0 $out/lib/libedit.so.2
114       rm $out/usr/lib/x86_64-linux-gnu/libasound.so.2
115       ln -s ${alsa-lib}/lib/libasound.so.2 $out/usr/lib/x86_64-linux-gnu/libasound.so.2
116       rm $out/usr/lib/x86_64-linux-gnu/libasound.so.2.0.0
117       ln -s ${alsa-lib}/lib/libasound.so.2.0.0 $out/usr/lib/x86_64-linux-gnu/libasound.so.2.0.0
119       runHook postInstall
120     '';
121   };
123 buildFHSEnv {
124   inherit pname version meta;
125   targetPkgs = pkgs: [ xkeyboard_config ];
127   extraInstallCommands = ''
128     mkdir -p $out/share/applications $out/share/icons/hicolor/scalable/apps
129     install -m 444 -D ${plex-desktop}/meta/gui/plex-desktop.desktop $out/share/applications/plex-desktop.desktop
130     substituteInPlace $out/share/applications/plex-desktop.desktop \
131       --replace-fail \
132       'Icon=''${SNAP}/meta/gui/icon.png' \
133       'Icon=${plex-desktop}/meta/gui/icon.png'
134   '';
136   runScript = writeShellScript "plex-desktop.sh" ''
137     # Widevine won't download unless this directory exists.
138     mkdir -p $HOME/.cache/plex/
139     PLEX_USR_PATH=${lib.makeSearchPath "usr/lib/x86_64-linux-gnu" [ plex-desktop ]}
141     set -o allexport
142     LD_LIBRARY_PATH=${
143       lib.makeLibraryPath [
144         plex-desktop
145         libglvnd-1_4_0
146       ]
147     }:$PLEX_USR_PATH
148     LIBGL_DRIVERS_PATH=$PLEX_USR_PATH/dri
149     ${lib.toShellVars extraEnv}
150     exec ${plex-desktop}/Plex.sh
151   '';
152   passthru.updateScript = ./update.sh;