diff options
Diffstat (limited to 'pkgs/servers/peertube/default.nix')
-rw-r--r-- | pkgs/servers/peertube/default.nix | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/pkgs/servers/peertube/default.nix b/pkgs/servers/peertube/default.nix new file mode 100644 index 00000000000..558c21c6cd1 --- /dev/null +++ b/pkgs/servers/peertube/default.nix @@ -0,0 +1,125 @@ +{ lib, stdenv, callPackage, fetchurl, fetchFromGitHub, buildGoModule, fetchYarnDeps, nixosTests +, fixup_yarn_lock, jq, nodejs, yarn +}: +let + arch = + if stdenv.hostPlatform.system == "x86_64-linux" then "linux-x64" + else throw "Unsupported architecture: ${stdenv.hostPlatform.system}"; + + version = "4.1.1"; + + source = fetchFromGitHub { + owner = "Chocobozzz"; + repo = "PeerTube"; + rev = "v${version}"; + sha256 = "sha256-yBRontvkcVU3BNUIB6WfH2a5blU9u3CNyHrou16h42s="; + }; + + yarnOfflineCacheServer = fetchYarnDeps { + yarnLock = "${source}/yarn.lock"; + sha256 = "sha256-L1Nr6sGjYVm42OyeFOQeQ6WEXjmNkngWilBtfQJ6bPE="; + }; + + yarnOfflineCacheTools = fetchYarnDeps { + yarnLock = "${source}/server/tools/yarn.lock"; + sha256 = "sha256-maPR8OCiuNlle0JQIkZSgAqW+BrSxPwVm6CkxIrIg5k="; + }; + + yarnOfflineCacheClient = fetchYarnDeps { + yarnLock = "${source}/client/yarn.lock"; + sha256 = "sha256-cBa0lNq9JsYi34EJzl0pPbDXSYL9a8g6MmiL6Ge65ms="; + }; + + bcrypt_version = "5.0.1"; + bcrypt_lib = fetchurl { + url = "https://github.com/kelektiv/node.bcrypt.js/releases/download/v${bcrypt_version}/bcrypt_lib-v${bcrypt_version}-napi-v3-${arch}-glibc.tar.gz"; + sha256 = "3R3dBZyPansTuM77Nmm3f7BbTDkDdiT2HQIrti2Ottc="; + }; + +in stdenv.mkDerivation rec { + inherit version; + pname = "peertube"; + src = source; + + nativeBuildInputs = [ fixup_yarn_lock jq nodejs yarn ]; + + buildPhase = '' + # Build node modules + export HOME=$PWD + fixup_yarn_lock ~/yarn.lock + fixup_yarn_lock ~/server/tools/yarn.lock + fixup_yarn_lock ~/client/yarn.lock + yarn config --offline set yarn-offline-mirror ${yarnOfflineCacheServer} + yarn install --offline --frozen-lockfile --ignore-engines --ignore-scripts --no-progress + cd ~/server/tools + yarn config --offline set yarn-offline-mirror ${yarnOfflineCacheTools} + yarn install --offline --frozen-lockfile --ignore-engines --ignore-scripts --no-progress + cd ~/client + yarn config --offline set yarn-offline-mirror ${yarnOfflineCacheClient} + yarn install --offline --frozen-lockfile --ignore-engines --ignore-scripts --no-progress + + patchShebangs ~/node_modules + patchShebangs ~/server/tools/node_modules + patchShebangs ~/client/node_modules + patchShebangs ~/scripts + + # Fix bcrypt node module + cd ~/node_modules/bcrypt + if [ "${bcrypt_version}" != "$(cat package.json | jq -r .version)" ]; then + echo "Mismatching version please update bcrypt in derivation" + exit + fi + mkdir -p ./lib/binding && tar -C ./lib/binding -xf ${bcrypt_lib} + + # Return to home directory + cd ~ + + # Build PeerTube server + npm run tsc -- --build ./tsconfig.json + npm run resolve-tspaths:server + cp -r "./server/static" "./server/assets" "./dist/server" + cp -r "./server/lib/emails" "./dist/server/lib" + + # Build PeerTube tools + cp -r "./server/tools/node_modules" "./dist/server/tools" + npm run tsc -- --build ./server/tools/tsconfig.json + npm run resolve-tspaths:cli + + # Build PeerTube client + npm run build:client + ''; + + installPhase = '' + mkdir -p $out/dist + mv ~/dist $out + mv ~/node_modules $out/node_modules + mv ~/server/tools/node_modules $out/dist/server/tools/node_modules + mkdir $out/client + mv ~/client/{dist,node_modules,package.json,yarn.lock} $out/client + mv ~/{config,scripts,support,CREDITS.md,FAQ.md,LICENSE,README.md,package.json,tsconfig.json,yarn.lock} $out + ''; + + passthru.tests.peertube = nixosTests.peertube; + + meta = with lib; { + description = "A free software to take back control of your videos"; + longDescription = '' + PeerTube aspires to be a decentralized and free/libre alternative to video + broadcasting services. + PeerTube is not meant to become a huge platform that would centralize + videos from all around the world. Rather, it is a network of + inter-connected small videos hosters. + Anyone with a modicum of technical skills can host a PeerTube server, aka + an instance. Each instance hosts its users and their videos. In this way, + every instance is created, moderated and maintained independently by + various administrators. + You can still watch from your account videos hosted by other instances + though if the administrator of your instance had previously connected it + with other instances. + ''; + license = licenses.agpl3Plus; + homepage = "https://joinpeertube.org/"; + platforms = [ "x86_64-linux" ]; + maintainers = with maintainers; [ immae izorkin matthiasbeyer mohe2015 stevenroose ]; + }; +} |