about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/jellyfin/web.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/jellyfin/web.nix')
-rw-r--r--nixpkgs/pkgs/servers/jellyfin/web.nix81
1 files changed, 81 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/jellyfin/web.nix b/nixpkgs/pkgs/servers/jellyfin/web.nix
new file mode 100644
index 000000000000..1bd4a305a7ad
--- /dev/null
+++ b/nixpkgs/pkgs/servers/jellyfin/web.nix
@@ -0,0 +1,81 @@
+{ lib
+, fetchFromGitHub
+, pkgs
+, stdenv
+, nodejs
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jellyfin-web";
+  version = "10.7.5";
+  # TODO: on the next major release remove src.postFetch
+  # and use the lock file in web-update.sh:
+  # https://github.com/jellyfin/jellyfin-web/commit/6efef9680d55a93f4333ef8bfb65a8a650c99a49
+
+  src = fetchFromGitHub {
+    owner = "jellyfin";
+    repo = "jellyfin-web";
+    rev = "v${version}";
+    sha256 = "5y6hWEDxY5WbOUdjujmuMV3bQVvYU2J9oIANBVN5XOc=";
+    postFetch = ''
+      mkdir -p $out
+      cd $out
+      tar -xzf $downloadedFile --strip-components=1
+
+      # replace unsupported dependency url
+      # https://github.com/svanderburg/node2nix/issues/163
+      substituteInPlace package.json \
+        --replace \
+          "https://github.com/jellyfin/JavascriptSubtitlesOctopus#4.0.0-jf-smarttv" \
+          "https://github.com/jellyfin/JavascriptSubtitlesOctopus/archive/refs/tags/4.0.0-jf-smarttv.tar.gz"
+    '';
+  };
+
+  nativeBuildInputs = [
+    nodejs
+  ];
+
+  buildPhase =
+    let
+      nodeDependencies = ((import ./node-composition.nix {
+        inherit pkgs nodejs;
+        inherit (stdenv.hostPlatform) system;
+      }).nodeDependencies.override (old: {
+        # access to path '/nix/store/...-source' is forbidden in restricted mode
+        src = src;
+
+        # dont run the prepare script:
+        # Error: Cannot find module '/nix/store/...-node-dependencies-jellyfin-web-.../jellyfin-web/scripts/prepare.js
+        # npm run build:production runs the same command
+        dontNpmInstall = true;
+      }));
+    in
+    ''
+      runHook preBuild
+
+      ln -s ${nodeDependencies}/lib/node_modules ./node_modules
+      export PATH="${nodeDependencies}/bin:$PATH"
+
+      npm run build:production
+
+      runHook postBuild
+    '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share
+    cp -a dist $out/share/jellyfin-web
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = ./web-update.sh;
+
+  meta = with lib; {
+    description = "Web Client for Jellyfin";
+    homepage = "https://jellyfin.org/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ nyanloutre minijackson purcell jojosch ];
+  };
+}