110 lines
2.7 KiB
Nix
110 lines
2.7 KiB
Nix
{ lib
|
|
, stdenvNoCC
|
|
|
|
, buildNpmPackage
|
|
, fetchFromGitHub
|
|
|
|
, nodejs
|
|
|
|
, withOnlyOffice ? true
|
|
}: let
|
|
onlyOfficeVersions = {
|
|
v1 = {
|
|
rev = "4f370bebe96e3a0d4054df87412ee5b2c6ed8aaa";
|
|
hash = "sha256-TE/99qOx4wT2s0op9wi+SHwqTPYq/H+a9Uus9Zj4iSY=";
|
|
};
|
|
v2b = {
|
|
rev = "d9da72fda95daf93b90ffa345757c47eb5b919dd";
|
|
hash = "sha256-SiRDRc2vnLwCVnvtk+C8PKw7IeuSzHBaJmZHogRe3hQ=";
|
|
};
|
|
v4 = {
|
|
rev = "6ebc6938b6841440ffad2efc1e23f1dc1ceda964";
|
|
hash = "sha256-eto1+8Tk/s3kbUCpbUh8qCS8EOq700FYG1/KiHyynaA=";
|
|
};
|
|
v5 = {
|
|
rev = "88a356f08ded2f0f4620bda66951caf1d7f02c21";
|
|
hash = "sha256-8j1rlAyHlKx6oAs2pIhjPKcGhJFj6ZzahOcgenyeOCc=";
|
|
};
|
|
v6 = {
|
|
rev = "abd8a309f6dd37289f950cd8cea40df4492d8a15";
|
|
hash = "sha256-BZdExj2q/bqUD3k9uluOot2dlrWKA+vpad49EdgXKww=";
|
|
};
|
|
v7 = {
|
|
rev = "9d8b914a81f0f9e5d0bc3f0fc631adf4b6d480e7";
|
|
hash = "sha256-M+rPJ/Xo2olhqB5ViynGRaesMLLfG/1ltUoLnepMPnM=";
|
|
};
|
|
};
|
|
mkOnlyOffice = {
|
|
pname, version
|
|
}: stdenvNoCC.mkDerivation (final: {
|
|
pname = "${pname}-onlyoffice";
|
|
inherit version;
|
|
|
|
srcs = lib.mapAttrsToList (version: { rev, hash ? lib.fakeHash }: fetchFromGitHub {
|
|
name = "${final.pname}-${version}-source";
|
|
owner = "cryptpad";
|
|
repo = "onlyoffice-builds";
|
|
inherit rev hash;
|
|
}) onlyOfficeVersions;
|
|
|
|
dontBuild = true;
|
|
|
|
sourceRoot = ".";
|
|
|
|
installPhase = ''
|
|
mkdir -p $out
|
|
${lib.concatLines (map
|
|
(version: "cp -Tr ${final.pname}-${version}-source $out/${version}")
|
|
(builtins.attrNames onlyOfficeVersions)
|
|
)}
|
|
'';
|
|
});
|
|
in buildNpmPackage rec {
|
|
pname = "cryptpad";
|
|
version = "2024.3.0";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "cryptpad";
|
|
repo = "cryptpad";
|
|
rev = version;
|
|
hash = "sha256-VUW6KvoSatk1/hlzklMQYlSNVH/tdbH+yU4ONUQ0JSQ=";
|
|
};
|
|
|
|
npmDepsHash = "sha256-tvTkoxxioPuNoe8KIuXSP7QQbvcpxMnygsMmzKBQIY0=";
|
|
|
|
inherit nodejs;
|
|
|
|
onlyOffice = lib.optional withOnlyOffice (mkOnlyOffice {
|
|
inherit pname version;
|
|
});
|
|
|
|
makeCacheWritable = true;
|
|
dontFixup = true;
|
|
|
|
postPatch = ''
|
|
cp -T ${./package-lock.json} package-lock.json
|
|
'';
|
|
|
|
preBuild = ''
|
|
npm run install:components
|
|
'' + lib.optionalString withOnlyOffice ''
|
|
ln -s $onlyOffice www/common/onlyoffice/dist
|
|
'';
|
|
|
|
installPhase = ''
|
|
mkdir -p $out
|
|
cp -R . $out/
|
|
|
|
substituteInPlace $out/lib/workers/index.js \
|
|
--replace-warn "lib/workers/db-worker" "$out/lib/workers/db-worker"
|
|
|
|
makeWrapper ${lib.getExe nodejs} $out/bin/cryptpad-server \
|
|
--chdir $out \
|
|
--add-flags server.js
|
|
'';
|
|
|
|
meta = {
|
|
homepage = "https://cryptpad.org";
|
|
mainProgram = "cryptpad-server";
|
|
};
|
|
}
|