{ ldap ? false, sendmail ? false, light ? null, syden ? false, runCommand, libsass , lib, stdenv, rsync, fetchzip, youtube-dl, fetchurl, mylibs, python, nodejs, nodePackages, yarn2nix-moretea }: let nodeHeaders = fetchurl { url = "https://nodejs.org/download/release/v${nodejs.version}/node-v${nodejs.version}-headers.tar.gz"; sha256 = "1prvrcvbyal39k9axfwjixs4wfgs1m8xy4prsl0kq0s0n7r7nxzj"; }; source = mylibs.fetchedGithub ./peertube.json; patchedSource = stdenv.mkDerivation (source // rec { phases = [ "unpackPhase" "patchPhase" "installPhase" ]; patches = [ ./yarn_fix_http_node.patch ] ++ lib.optionals ldap [ ./ldap.patch ] ++ lib.optionals sendmail [ ./sendmail.patch ] ++ lib.optionals syden [ ./syden.patch ]; installPhase = let # Peertube supports several languages, but they take a very long # time to build. The build script accepts --light which builds # only English, and --light-fr which only builds English + French. # This small hack permits to builds only English + A chosen # language depending on the value of "light" # Default (null) is to build every language lightFix = if light == true || light == null then "" else '' sed -i -e "s/fr-FR/${light}/g" -e "s/--light-fr/--light-language/" $out/scripts/build/client.sh ''; in '' mkdir $out cp -a . $out/ ${lightFix} ''; }); serverPatchedPackage = runCommand "server-package" {} '' mkdir -p $out cp ${patchedSource}/package.json $out/ cp ${patchedSource}/yarn.lock $out/ ''; clientPatchedPackage = runCommand "client-package" {} '' mkdir -p $out cp ${patchedSource}/client/package.json $out/ cp ${patchedSource}/client/yarn.lock $out/ ''; yarnModulesConfig = { bcrypt = { buildInputs = [ nodePackages.node-pre-gyp ]; postInstall = let bcrypt_lib = fetchurl { url = "https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.7/bcrypt_lib-v3.0.7-node-v64-linux-x64-glibc.tar.gz"; sha256 = "0gbq4grhp5wl0f9yqb4y43kjfh8nivfd6y0nkv1x6gfvs2v23wb0"; }; in '' mkdir lib && tar -C lib -xf ${bcrypt_lib} patchShebangs ../node-pre-gyp npm run install ''; }; dtrace-provider = { buildInputs = [ python nodePackages.node-gyp ]; postInstall = '' npx node-gyp rebuild --tarball=${nodeHeaders} ''; }; node-sass = { buildInputs = [ libsass python ]; postInstall = '' node scripts/build.js --tarball=${nodeHeaders} ''; }; sharp = { buildInputs = [ python nodePackages.node-gyp ]; postInstall = let tarball = fetchurl { url = "https://github.com/lovell/sharp-libvips/releases/download/v8.8.1/libvips-8.8.1-linux-x64.tar.gz"; sha256 = "0xqv61g6s6rkvc31zq9a3bf8rp56ijnpw0xhr91hc88asqprd5yh"; }; in '' mkdir vendor tar -C vendor -xf ${tarball} patchShebangs ../prebuild-install npx node install/libvips npx node install/dll-copy npx prebuild-install || npx node-gyp rebuild --tarball=${nodeHeaders} ''; }; utf-8-validate = { buildInputs = [ nodePackages.node-gyp-build ]; }; youtube-dl = { postInstall = '' mkdir bin ln -s ${youtube-dl}/bin/youtube-dl bin/youtube-dl cat > bin/details <