{ lib, stdenv, rustPlatform, fetchFromGitHub, openssl, pkg-config, gtk3, mpv, libappindicator, libxkbcommon, libcef, makeWrapper, nodejs, # fetchurl, ... }: let # cef-rs expects a specific directory layout # Copied from https://github.com/NixOS/nixpkgs/pull/428206 because im lazy cef-path = stdenv.mkDerivation { pname = "cef-path"; version = libcef.version; dontUnpack = true; installPhase = '' mkdir -p "$out" find ${libcef}/lib -type f -name "*" -exec cp {} $out/ \; find ${libcef}/libexec -type f -name "*" -exec cp {} $out/ \; cp -r ${libcef}/share/cef/* $out/ mkdir -p "$out/include" cp -r ${libcef}/include/* "$out/include/" ''; postFixup = '' strip $out/*.so* ''; }; # NOTE stremio downloads server.js into XDG_DATA_DIR. Packaging it is not required. # I'm patching this because I don't enjoy stremio downloading code at runtime. # This and the postPatch are not needed if you're okay with stremio downloading server.js at runtime # Latest server.js version found at https://www.strem.io/updater/server/check # server = fetchurl rec { # pname = "stremio-server"; # version = "4.20.11"; # url = "https://dl.strem.io/server/v${version}/desktop/server.js"; # hash = "sha256-2QCwUlusNTGqbOmOGjyKOx0bHaoGmn9vy93qViXx95E="; # meta.license = lib.licenses.unfree; # }; in rustPlatform.buildRustPackage (finalAttrs: { name = "stremio-linux-shell"; version = "1.0.0-beta.11"; src = fetchFromGitHub { owner = "Stremio"; repo = "stremio-linux-shell"; tag = "v${finalAttrs.version}"; hash = "sha256-FNAeur5esDqBoYlmjUO6jdi1eC83ynbLxbjH07QZ++E="; }; cargoHash = "sha256-9/28BCG51jPnKXbbzzNp7KQLMkLEugFQfwszRR9kmUw="; # The build scripts tries to download CEF binaries by default. # Probably overkill since setting CEF_PATH should skip downloading binaries. buildFeatures = [ "offline-build" ]; buildInputs = [ openssl gtk3 mpv libcef ]; nativeBuildInputs = [ makeWrapper pkg-config ]; #postPatch = '' # substituteInPlace ./src/config.rs \ # --replace-fail \ # 'let file = data_dir.join(SERVER_FILE);' \ # 'let file = PathBuf::from(r"${server}");' # substituteInPlace ./src/server.rs \ # --replace-fail \ # 'let should_download = self.config.version() != Some(latest_version.clone());' \ # 'let should_download = false;' #''; postInstall = '' mkdir -p $out/share/applications mkdir -p $out/share/icons/hicolor/scalable/apps mv $out/bin/stremio-linux-shell $out/bin/stremio cp $src/data/com.stremio.Stremio.desktop $out/share/applications/com.stremio.Stremio.desktop cp $src/data/icons/com.stremio.Stremio.svg $out/share/icons/hicolor/scalable/apps/com.stremio.Stremio.svg wrapProgram $out/bin/stremio \ --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [libappindicator libxkbcommon]} \ --prefix PATH : ${lib.makeBinPath [nodejs]}''; env.CEF_PATH = cef-path; meta = { mainProgram = "stremio"; description = "Modern media center that gives you the freedom to watch everything you want"; homepage = "https://www.stremio.com/"; # (Server-side) 4.x versions of the web UI are closed-source license = with lib.licenses; [ gpl3Only # server.js is unfree # unfree ]; maintainers = with lib.maintainers; [ griffi-gh {name = "nuko";} ]; platforms = lib.platforms.linux; }; })