pytrainer: unpin python 3.10
[NixPkgs.git] / pkgs / servers / plex / raw.nix
blobc892130b3a6cf9f8f0d9a9de4841de1969b4c0ab
1 { lib, stdenv
2 , fetchurl
3 , dpkg
4 , writeScript
5 , curl
6 , jq
7 , common-updater-scripts
8 }:
10 # The raw package that fetches and extracts the Plex RPM. Override the source
11 # and version of this derivation if you want to use a Plex Pass version of the
12 # server, and the FHS userenv and corresponding NixOS module should
13 # automatically pick up the changes.
14 stdenv.mkDerivation rec {
15   version = "1.41.0.8994-f2c27da23";
16   pname = "plexmediaserver";
18   # Fetch the source
19   src = if stdenv.hostPlatform.system == "aarch64-linux" then fetchurl {
20     url = "https://downloads.plex.tv/plex-media-server-new/${version}/debian/plexmediaserver_${version}_arm64.deb";
21     sha256 = "118mqmqfpfskqa19869lg9riip64jz0c2jrvnkpdilvzzhy9ngwx";
22   } else fetchurl {
23     url = "https://downloads.plex.tv/plex-media-server-new/${version}/debian/plexmediaserver_${version}_amd64.deb";
24     sha256 = "10nis1hk3fc9bvgiz41x4gmgbzlz2cczz47a2x14liqxmiwqwl3v";
25   };
27   outputs = [ "out" "basedb" ];
29   nativeBuildInputs = [ dpkg ];
31   unpackPhase = ''
32     dpkg-deb -R $src .
33   '';
35   installPhase = ''
36     runHook preInstall
37     mkdir -p "$out/lib"
38     cp -dr --no-preserve='ownership' usr/lib/plexmediaserver $out/lib/
40     # Location of the initial Plex plugins database
41     f=$out/lib/plexmediaserver/Resources/com.plexapp.plugins.library.db
43     # Store the base database in the 'basedb' output
44     cat $f > $basedb
46     # Overwrite the base database in the Plex package with an absolute symlink
47     # to the '/db' file; we create this path in the FHS userenv (see the "plex"
48     # package).
49     ln -fs /db $f
50     runHook postInstall
51   '';
53   # We're running in a FHS userenv; don't patch anything
54   dontPatchShebangs = true;
55   dontStrip = true;
56   dontPatchELF = true;
57   dontAutoPatchelf = true;
59   passthru.updateScript = writeScript "${pname}-updater" ''
60     #!${stdenv.shell}
61     set -eu -o pipefail
62     PATH=${lib.makeBinPath [curl jq common-updater-scripts]}:$PATH
64     plexApiJson=$(curl -sS https://plex.tv/api/downloads/5.json)
65     latestVersion="$(echo $plexApiJson | jq .computer.Linux.version | tr -d '"\n')"
67     for platform in ${lib.concatStringsSep " " meta.platforms}; do
68       arch=$(echo $platform | cut -d '-' -f1)
69       dlUrl="$(echo $plexApiJson | jq --arg arch "$arch" -c '.computer.Linux.releases[] | select(.distro == "debian") | select(.build | contains($arch)) .url' | tr -d '"\n')"
71       latestSha="$(nix-prefetch-url $dlUrl)"
73       update-source-version plexRaw "$latestVersion" "$latestSha" --system=$platform --ignore-same-version
74     done
75   '';
77   meta = with lib; {
78     homepage = "https://plex.tv/";
79     sourceProvenance = with sourceTypes; [ binaryNativeCode ];
80     license = licenses.unfree;
81     platforms = [ "x86_64-linux" "aarch64-linux" ];
82     maintainers = with maintainers; [
83       badmutex
84       forkk
85       lnl7
86       pjones
87       thoughtpolice
88       MayNiklas
89     ];
90     description = "Media library streaming server";
91     longDescription = ''
92       Plex is a media server which allows you to store your media and play it
93       back across many different devices.
94     '';
95   };