Files
nixpkgs/pkgs/applications/video/mpv/scripts/webtorrent-mpv-hook.nix
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

109 lines
2.9 KiB
Nix

{
lib,
buildNpmPackage,
fetchFromGitHub,
gitUpdater,
nodejs,
cmake,
pkg-config,
openssl,
libdatachannel,
plog,
}:
let
# Modified from pkgs/by-name/ht/httptoolkit-server/package.nix
nodeDatachannel = buildNpmPackage {
pname = "node-datachannel";
version = "0.10.1";
src = fetchFromGitHub {
owner = "murat-dogan";
repo = "node-datachannel";
rev = "refs/tags/v${nodeDatachannel.version}";
hash = "sha256-r5tBg645ikIWm+RU7Muw/JYyd7AMpkImD0Xygtm1MUk=";
};
npmFlags = [ "--ignore-scripts" ];
makeCacheWritable = true;
npmDepsHash = "sha256-1ZJd0Y45B3CT2YPXDYfCuFMBo5uggWRuDH11eCobyyY=";
nativeBuildInputs = [
cmake
pkg-config
];
buildInputs = [
openssl
libdatachannel
plog
];
dontUseCmakeConfigure = true;
env.NIX_CFLAGS_COMPILE = "-I${nodejs}/include/node";
preBuild = ''
# don't use static libs and don't use FetchContent
substituteInPlace CMakeLists.txt \
--replace-fail 'OPENSSL_USE_STATIC_LIBS TRUE' 'OPENSSL_USE_STATIC_LIBS FALSE' \
--replace-fail 'if(NOT libdatachannel)' 'if(false)' \
--replace-fail 'datachannel-static' 'datachannel'
sed -i '2ifind_package(plog)' CMakeLists.txt
# don't fetch node headers
substituteInPlace node_modules/cmake-js/lib/dist.js \
--replace-fail '!this.downloaded' 'false'
'';
installPhase = ''
runHook preInstall
install -Dm755 build/Release/*.node -t $out/build/Release
runHook postInstall
'';
};
in
buildNpmPackage rec {
pname = "webtorrent-mpv-hook";
version = "1.4.4";
src = fetchFromGitHub {
owner = "mrxdst";
repo = "webtorrent-mpv-hook";
rev = "v${version}";
hash = "sha256-qFeQBVPZZFKkxz1fhK3+ah3TPDovklhhQwtv09TiSqo=";
};
passthru.updateScript = gitUpdater { rev-prefix = "v"; };
postPatch = ''
substituteInPlace src/webtorrent.ts --replace-fail "node_path: 'node'" "node_path: '${lib.getExe nodejs}'"
# This executable is just for telling non-Nix users how to install
substituteInPlace package.json --replace-fail '"bin": "build/bin.mjs",' ""
rm -rf src/bin.ts
'';
npmDepsHash = "sha256-fKzXdbtxC2+63/GZdvPOxvBpQ5rzgvfseigOgpP1n5I=";
makeCacheWritable = true;
npmFlags = [ "--ignore-scripts" ];
postConfigure = ''
# manually place our prebuilt `node-datachannel` binary into its place, since we used '--ignore-scripts'
ln -s ${nodeDatachannel}/build node_modules/node-datachannel/build
'';
postInstall = ''
mkdir -p $out/share/mpv/scripts/
ln -s $out/lib/node_modules/webtorrent-mpv-hook/build/webtorrent.js $out/share/mpv/scripts/
'';
passthru.scriptName = "webtorrent.js";
meta = {
description = "Adds a hook that allows mpv to stream torrents";
homepage = "https://github.com/mrxdst/webtorrent-mpv-hook";
maintainers = [ lib.maintainers.chuangzhu ];
license = lib.licenses.isc;
};
}