snowfield/packages/flaresolverr/default.nix
2023-10-11 15:36:20 +02:00

52 lines
1.6 KiB
Nix

{ lib, stdenv, python3, chromium, xvfb-run, xorgserver, makeWrapper, chromedriver, fetchFromGitHub, substituteAll }:
let
python_env = python3.withPackages
(p: with p; [ bottle waitress selenium func-timeout requests websockets xvfbwrapper webtest certifi prometheus-client ]);
in
stdenv.mkDerivation rec {
pname = "flaresolverr";
version = "3.3.6";
src = fetchFromGitHub {
owner = pname;
repo = pname;
rev = "v${version}";
sha256 = "sha256-lSOw63yjFdi32N44r3A8Ggvexpov9CnaEP7fD7EBdKc=";
};
buildInputs = [ makeWrapper ];
nativeBuildInputs = [ chromedriver ];
patches = [
./is_patched.patch
(substituteAll {
src = ./chromedriver_path.patch;
chromedriver_path = "${chromedriver}/bin/chromedriver";
})
];
installPhase = ''
runHook preInstall
mkdir -p $out/share
cp -r src $out/share/flaresolverr
cp package.json $out/share/flaresolverr
runHook postInstall
'';
postFixup = ''
makeWrapper ${python_env}/bin/python $out/bin/flaresolverr \
--prefix PATH : ${lib.makeBinPath [ chromium xvfb-run xorgserver chromedriver ]} \
--add-flags $out/share/flaresolverr/flaresolverr.py \
--chdir $out/share/flaresolverr
'';
meta = with lib; {
description = "Proxy server to bypass Cloudflare protection";
homepage = "https://github.com/FlareSolverr/FlareSolverr";
license = licenses.mit;
maintainers = with maintainers; [ julienmalka ];
# Flaresolverr will not run without chromedriver and xvfb-run
platforms = lib.intersectLists chromedriver.meta.platforms xvfb-run.meta.platforms;
};
}