aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/servers/plex/raw.nix
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/servers/plex/raw.nix')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/servers/plex/raw.nix98
1 files changed, 98 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/servers/plex/raw.nix b/infra/libkookie/nixpkgs/pkgs/servers/plex/raw.nix
new file mode 100644
index 000000000000..e27048b27235
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/servers/plex/raw.nix
@@ -0,0 +1,98 @@
+{ stdenv
+, fetchurl
+, dpkg
+, writeScript
+, curl
+, jq
+, common-updater-scripts
+}:
+
+# The raw package that fetches and extracts the Plex RPM. Override the source
+# and version of this derivation if you want to use a Plex Pass version of the
+# server, and the FHS userenv and corresponding NixOS module should
+# automatically pick up the changes.
+stdenv.mkDerivation rec {
+ version = "1.21.0.3711-b509cc236";
+ pname = "plexmediaserver";
+
+ # Fetch the source
+ src = if stdenv.hostPlatform.system == "aarch64-linux" then fetchurl {
+ url = "https://downloads.plex.tv/plex-media-server-new/${version}/debian/plexmediaserver_${version}_arm64.deb";
+ sha256 = "0nhxxfcds3byhbz8gsd9107diy182m33xbcc8jgi78hwfadyjj7h";
+ } else fetchurl {
+ url = "https://downloads.plex.tv/plex-media-server-new/${version}/debian/plexmediaserver_${version}_amd64.deb";
+ sha256 = "0izsmcc337paakz1nqfsr78s097sxyxy3kbs43qpzpx7w5wshynb";
+ };
+
+ outputs = [ "out" "basedb" ];
+
+ nativeBuildInputs = [ dpkg ];
+
+ phases = [ "unpackPhase" "installPhase" "fixupPhase" "distPhase" ];
+
+ unpackPhase = ''
+ dpkg-deb -R $src .
+ '';
+
+ installPhase = ''
+ mkdir -p "$out/lib"
+ cp -dr --no-preserve='ownership' usr/lib/plexmediaserver $out/lib/
+
+ # Location of the initial Plex plugins database
+ f=$out/lib/plexmediaserver/Resources/com.plexapp.plugins.library.db
+
+ # Store the base database in the 'basedb' output
+ cat $f > $basedb
+
+ # Overwrite the base database in the Plex package with an absolute symlink
+ # to the '/db' file; we create this path in the FHS userenv (see the "plex"
+ # package).
+ ln -fs /db $f
+ '';
+
+ # We're running in a FHS userenv; don't patch anything
+ dontPatchShebangs = true;
+ dontStrip = true;
+ dontPatchELF = true;
+ dontAutoPatchelf = true;
+
+ passthru.updateScript = writeScript "${pname}-updater" ''
+ #!${stdenv.shell}
+ set -eu -o pipefail
+ PATH=${stdenv.lib.makeBinPath [curl jq common-updater-scripts]}:$PATH
+
+ plexApiJson=$(curl -sS https://plex.tv/api/downloads/5.json)
+ latestVersion="$(echo $plexApiJson | jq .computer.Linux.version | tr -d '"\n')"
+
+ for platform in ${stdenv.lib.concatStringsSep " " meta.platforms}; do
+ arch=$(echo $platform | cut -d '-' -f1)
+ dlUrl="$(echo $plexApiJson | jq --arg arch "$arch" -c '.computer.Linux.releases[] | select(.distro == "debian") | select(.build | contains($arch)) .url' | tr -d '"\n')"
+
+ latestSha="$(nix-prefetch-url $dlUrl)"
+
+ # The script will not perform an update when the version attribute is up to date from previous platform run
+ # We need to clear it before each run
+ update-source-version plexRaw 0 $(yes 0 | head -64 | tr -d "\n") --system=$platform
+ update-source-version plexRaw "$latestVersion" "$latestSha" --system=$platform
+ done
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = "https://plex.tv/";
+ license = licenses.unfree;
+ platforms = [ "x86_64-linux" "aarch64-linux" ];
+ maintainers = with maintainers; [
+ badmutex
+ colemickens
+ forkk
+ lnl7
+ pjones
+ thoughtpolice
+ ];
+ description = "Media library streaming server";
+ longDescription = ''
+ Plex is a media server which allows you to store your media and play it
+ back across many different devices.
+ '';
+ };
+}