X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=pkgs%2Fwebapps%2Fpeertube%2Fdefault.nix;fp=pkgs%2Fwebapps%2Fpeertube%2Fdefault.nix;h=7889ceeb23f5feb93a472ebff8ecaead0d79f2f0;hb=5b1c5dbdcce9d4bf63662ecb7acf954a640ffef6;hp=992910605aac56ffdc3864946bec148bd52d0801;hpb=0a15a68cf30ccf0adfc8f19fe61c78e6313ea003;p=perso%2FImmae%2FConfig%2FNix%2FNUR.git diff --git a/pkgs/webapps/peertube/default.nix b/pkgs/webapps/peertube/default.nix index 99291060..7889ceeb 100644 --- a/pkgs/webapps/peertube/default.nix +++ b/pkgs/webapps/peertube/default.nix @@ -1,123 +1,213 @@ -{ ldap ? false -, lib, stdenv, fetchzip, youtube-dl, fetchurl, mylibs, python, nodejs, nodePackages }: +{ ldap ? false, sendmail ? false, light ? null, 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 = "1df3yhlwlvai0m9kvjyknjg11hnw0kj0rnhyzbwvsfjnmr6z8r76"; }; - patchedPackages = stdenv.mkDerivation (mylibs.fetchedGithub ./peertube.json // rec { - patches = if ldap then [ ./ldap.patch ././yarn_fix_bluebird_ldap.patch ] else [ ./yarn_fix_bluebird.patch ]; - installPhase = '' + 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 ]; + 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 package.json yarn.lock $out/ + cp -a . $out/ + ${lightFix} ''; }); - # if yarn complains about - # TypeError: Cannot read property 'lang' of undefined yarn - # make sure that all package names in yarn-packages.nix finish in - # .tar.gz where due (especially jsonld-signatures) - # Most errors where due to jsonld-signature (name, git version, etc.) - # or bluebird (3.5.18 instead vs 3.5.21) - yarnModulesArg = rec { - pname = "peertube-yarn-modules"; - version = "1.2.0"; - name = "peertube-yarn-modules-${version}"; - packageJSON = "${patchedPackages}/package.json"; - yarnLock = "${patchedPackages}/yarn.lock"; - yarnNix = ./yarn-packages.nix; - pkgConfig = { - all = { - buildInputs = [ mylibs.yarn2nixPackage.src ]; - }; - bcrypt = { - buildInputs = [ nodePackages.node-pre-gyp ]; - postInstall = let - bcrypt_lib = fetchurl { - url = "https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.2/bcrypt_lib-v3.0.2-node-v64-linux-x64-glibc.tar.gz"; - sha256 = "0i0dx4h52fqi3mda2zzqrxp2fh7spbvf7h88mjk218h8d7vl53yx"; + 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 = { + # all = { + # buildInputs = [ yarn2nix-moretea.yarn2nix.src ]; + # }; + 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 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} - ''; - }; - rdf-canonize = { - buildInputs = [ python nodePackages.node-gyp ]; - postInstall = '' - npx node-gyp rebuild --tarball=${nodeHeaders} - ''; - }; - sharp = { - buildInputs = [ python nodePackages.node-gyp ]; - postInstall = - let - tarball = fetchurl { - url = "https://github.com/lovell/sharp-libvips/releases/download/v8.7.0/libvips-8.7.0-linux-x64.tar.gz"; - sha256 = "1sq7qrp1q1pcrd165c3sky7qjx1kqihfpr4ailb5k73rwyh8lxg4"; - }; - 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 < bin/details <