mirror of
https://github.com/JulienMalka/snowfield.git
synced 2025-03-26 05:40:52 +01:00
385 lines
11 KiB
Nix
385 lines
11 KiB
Nix
{ lib
|
|
, stdenv
|
|
, buildNpmPackage
|
|
, fetchFromGitHub
|
|
, fetchzip
|
|
, fetchurl
|
|
, firefox-esr-102-unwrapped
|
|
, makeWrapper
|
|
, makeDesktopItem
|
|
, python3
|
|
, unzip
|
|
, zip
|
|
, perl
|
|
, rsync
|
|
, wrapGAppsHook
|
|
, gsettings-desktop-schemas
|
|
, glib
|
|
, gtk3
|
|
, gnome
|
|
, dconf
|
|
}:
|
|
|
|
let
|
|
pname = "zotero-dev";
|
|
version = "7.0.0";
|
|
rev = "096a3c5f2f57fffdecf001981129e13a1791ad89";
|
|
|
|
meta = with lib; {
|
|
description = "Zotero is a free, easy-to-use tool to help you collect, organize, cite, and share your research sources";
|
|
homepage = "https://github.com/zotero/zotero";
|
|
license = licenses.agpl3Only;
|
|
maintainers = with maintainers; [ camillemndn ];
|
|
platforms = platforms.all;
|
|
};
|
|
|
|
pdftools = let pdftools-version = "0.0.5"; in
|
|
fetchzip {
|
|
url = "https://zotero-download.s3.amazonaws.com/pdftools/pdftools-${pdftools-version}.tar.gz";
|
|
hash = "sha256-cvd0cJcuhSd2BTgRc5mz0bP9DakEKG/LK2onKOhes04=";
|
|
stripRoot = false;
|
|
};
|
|
|
|
zotero-client =
|
|
let
|
|
src = fetchFromGitHub {
|
|
owner = "zotero";
|
|
repo = "zotero";
|
|
inherit rev;
|
|
hash = "sha256-XGpk2CYgdaFCJJJc2XhW2fVD+dbACUkGClgwLoNMOoM=";
|
|
fetchSubmodules = true;
|
|
};
|
|
|
|
npmFlags = [ "--legacy-peer-deps" ];
|
|
NODE_OPTIONS = "--openssl-legacy-provider";
|
|
|
|
single-file = buildNpmPackage {
|
|
pname = "${pname}-single-file";
|
|
src = fetchFromGitHub {
|
|
owner = "gildas-lormeau";
|
|
repo = "SingleFile";
|
|
rev = "999976a20afb51a18da4abb42f434eac99796e84";
|
|
hash = "sha256-fHKVn9DTwshfBXf0nxCk0MLY1fEiQXD/SZPG1bICHo8=";
|
|
};
|
|
inherit version npmFlags NODE_OPTIONS meta;
|
|
npmDepsHash = "sha256-L4LuD7n8c42TPpbLWuJzeM27xcsXVdBnMTqNvRZMdz8=";
|
|
dontNpmBuild = true;
|
|
};
|
|
|
|
xpcom-utilities = buildNpmPackage {
|
|
pname = "${pname}-xpcom-utilities";
|
|
src = fetchFromGitHub {
|
|
owner = "zotero";
|
|
repo = "utilities";
|
|
rev = "b93f16dba483891c0ab4627cbaa303de5c7fa0c0";
|
|
hash = "sha256-Oz3h6aGorAm+Y5JZSclfz40YRj+uSPW2a5jgQWszLsk=";
|
|
};
|
|
inherit version npmFlags NODE_OPTIONS meta;
|
|
npmDepsHash = "sha256-tWDADhAeXG0HSvFnpdGOya3CjSb0i2aR3E1Y3r1J81o=";
|
|
dontNpmBuild = true;
|
|
};
|
|
|
|
note-editor = buildNpmPackage {
|
|
pname = "${pname}-note-editor";
|
|
src = fetchFromGitHub {
|
|
owner = "zotero";
|
|
repo = "note-editor";
|
|
rev = "076f5b3d3609051b9cba3cd68c4bb22746187834";
|
|
hash = "sha256-ZDmb3DQttftfS4w5+HlkTXRxhRYftBh1bm6MI+RBvII=";
|
|
};
|
|
inherit version npmFlags NODE_OPTIONS meta;
|
|
npmDepsHash = "sha256-yu2s4V2hB07eS0INVxQXU7YeWYmR3p4JPxKWuCK3Iys=";
|
|
|
|
postInstall = ''
|
|
cp -r build $out/lib/node_modules/zotero-note-editor/build
|
|
'';
|
|
};
|
|
|
|
translators = buildNpmPackage {
|
|
pname = "${pname}-translators";
|
|
src = fetchFromGitHub {
|
|
owner = "zotero";
|
|
repo = "translators";
|
|
rev = "3a9544d7b0b6fdcb6cdcbc8c08392f91d20d99b4";
|
|
hash = "sha256-XX1iBjuaFpmtkKTHuFPTtZOcFZk+oF8C8d2DPnENjV4=";
|
|
};
|
|
inherit version npmFlags NODE_OPTIONS meta;
|
|
npmDepsHash = "sha256-WDMOsklYKIurQw80Yh/mYQ9xmcHo3Yfkjj5+btqeie0=";
|
|
|
|
postPatch = ''
|
|
rm package-lock.json
|
|
cp ${./translator-lock.json} package-lock.json
|
|
sed -i '/eslint-plugin-zotero-translator/d' package.json
|
|
echo "chromedriver_skip_download=true" >> .npmrc
|
|
'';
|
|
|
|
dontNpmBuild = true;
|
|
};
|
|
|
|
pdf-reader-pdfjs = buildNpmPackage {
|
|
pname = "${pname}-pdf-reader-pdfjs";
|
|
src = fetchFromGitHub {
|
|
owner = "zotero";
|
|
repo = "pdf.js";
|
|
rev = "336247a15be77f2e253599f810a8cda107171566";
|
|
hash = "sha256-GBEBTyFMh+zi0KiHLNGfZi/XW9mhm3x0uCJkA7ml7mk=";
|
|
};
|
|
inherit version npmFlags NODE_OPTIONS meta;
|
|
npmDepsHash = "sha256-9e90iIKwWyBq68q/CKn+7laJwPFtJaZtblcWpIEDSXw=";
|
|
makeCacheWritable = true;
|
|
|
|
postPatch = ''
|
|
sed -i '/"name": "pdf.js"/a "version": "1.0.0",' package.json
|
|
sed -i '/"name": "pdf.js"/a "version": "1.0.0",' package-lock.json
|
|
'';
|
|
|
|
#dontNpmBuild = true;
|
|
|
|
buildPhase = ''
|
|
node_modules/.bin/gulp generic
|
|
'';
|
|
|
|
postInstall = ''
|
|
cp -r build $out/lib/node_modules/pdf.js/build
|
|
'';
|
|
};
|
|
|
|
pdf-worker-pdfjs = buildNpmPackage {
|
|
pname = "${pname}-pdf-worker-pdfjs";
|
|
src = fetchFromGitHub {
|
|
owner = "zotero";
|
|
repo = "pdf.js";
|
|
rev = "e198a17afc6f56e0a9d48b07e42ec80645a7a0a8";
|
|
hash = "sha256-FlKII11oPMPka+96Wo9ZjBuNp40i3OMuvlNz8X/r0Lw=";
|
|
};
|
|
inherit version npmFlags NODE_OPTIONS meta;
|
|
npmDepsHash = "sha256-9e90iIKwWyBq68q/CKn+7laJwPFtJaZtblcWpIEDSXw=";
|
|
makeCacheWritable = true;
|
|
|
|
postPatch = ''
|
|
sed -i '/"name": "pdf.js"/a "version": "1.0.0",' package.json
|
|
sed -i '/"name": "pdf.js"/a "version": "1.0.0",' package-lock.json
|
|
'';
|
|
|
|
#dontNpmBuild = true;
|
|
|
|
buildPhase = ''
|
|
node_modules/.bin/gulp lib
|
|
'';
|
|
|
|
postInstall = ''
|
|
cp -r build $out/lib/node_modules/pdf.js/build
|
|
'';
|
|
};
|
|
|
|
pdf-reader = buildNpmPackage {
|
|
pname = "${pname}-pdf-reader";
|
|
src = fetchFromGitHub {
|
|
owner = "zotero";
|
|
repo = "pdf-reader";
|
|
rev = "3b7f54727fdd8f238281a555988ada4615679b9c";
|
|
hash = "sha256-Y49bT08Z9ESK3yVkRQT67oU9jygr5xblHgUiX/SwyLE=";
|
|
};
|
|
inherit version npmFlags NODE_OPTIONS meta;
|
|
npmDepsHash = "sha256-tDr2WLnpltWPrlF21M8G/We4zzAXBp4px5xceOVLbhQ=";
|
|
|
|
postPatch = ''
|
|
sed -i 's/npx gulp/#npx gulp/g' scripts/build-pdfjs
|
|
sed -i 's/npm ci/#npm ci/g' scripts/build-pdfjs
|
|
'';
|
|
|
|
buildPhase = ''
|
|
rm -rf pdf.js
|
|
cp -Lr ${pdf-reader-pdfjs}/lib/node_modules/pdf.js pdf.js
|
|
'';
|
|
|
|
preInstall = ''
|
|
mkdir -p $out/lib/node_modules/pdf-reader
|
|
cp -r node_modules $out/lib/node_modules/pdf-reader/node_modules
|
|
'';
|
|
};
|
|
|
|
pdf-worker = buildNpmPackage {
|
|
pname = "${pname}-pdf-worker";
|
|
src = fetchFromGitHub {
|
|
owner = "zotero";
|
|
repo = "pdf-worker";
|
|
rev = "582f5d6cf91c5f09fc7898c3eced0ad32cbfccb1";
|
|
hash = "sha256-y1nEYGbtZzsc1Hn9B/Cvom3f7+OsYgwOuWFfp5U4gjc=";
|
|
};
|
|
inherit version npmFlags NODE_OPTIONS meta;
|
|
npmDepsHash = "sha256-rO/P7/22erxNeOpR8ph7taKyCeOEG9+U06oOfmPSa3w=";
|
|
|
|
postPatch = ''
|
|
sed -i 's/npx gulp/#npx gulp/g' scripts/build-pdfjs
|
|
sed -i 's/npm ci/#npm ci/g' scripts/build-pdfjs
|
|
'';
|
|
|
|
buildPhase = ''
|
|
rm -rf pdf.js
|
|
cp -Lr ${pdf-worker-pdfjs}/lib/node_modules/pdf.js pdf.js
|
|
'';
|
|
|
|
preInstall = ''
|
|
mkdir -p $out/lib/node_modules/pdf-worker
|
|
cp -r node_modules $out/lib/node_modules/pdf-worker/node_modules
|
|
'';
|
|
};
|
|
in
|
|
buildNpmPackage {
|
|
pname = "${pname}-client";
|
|
inherit src version npmFlags NODE_OPTIONS meta;
|
|
npmDepsHash = "sha256-b9MCHtt4Ewpt/prEMKtzSbLv3xnP2lnhclu4xDh1QGQ=";
|
|
nativeBuildInputs = [ rsync ];
|
|
|
|
postPatch = ''
|
|
rm -rf resource/SingleFile
|
|
cp -Lr ${single-file}/lib/node_modules/single-file resource/SingleFile
|
|
|
|
rm -rf chrome/content/zotero/xpcom/utilities
|
|
cp -Lr ${xpcom-utilities}/lib/node_modules/@zotero/utilities chrome/content/zotero/xpcom/utilities
|
|
|
|
rm -rf pdf-reader
|
|
cp -r ${pdf-reader}/lib/node_modules/pdf-reader pdf-reader
|
|
|
|
rm -rf pdf-worker
|
|
cp -r ${pdf-worker}/lib/node_modules/pdf-worker pdf-worker
|
|
|
|
chmod +w . -R
|
|
|
|
(
|
|
cd pdf-reader
|
|
rm -rf pdf.js
|
|
cp -Lr ${pdf-reader-pdfjs}/lib/node_modules/pdf.js pdf.js
|
|
)
|
|
(
|
|
cd pdf-worker
|
|
rm -rf pdf.js
|
|
cp -Lr ${pdf-worker-pdfjs}/lib/node_modules/pdf.js pdf.js
|
|
)
|
|
|
|
rm -rf translators
|
|
cp -Lr ${translators}/lib/node_modules/translators-check translators
|
|
|
|
rm -rf note-editor
|
|
cp -Lr ${note-editor}/lib/node_modules/zotero-note-editor note-editor
|
|
|
|
chmod +w . -R
|
|
|
|
find scripts -type f | xargs sed -i 's/npm ci/#npm ci/g'
|
|
find scripts -type f | xargs sed -i 's/git/#git/g'
|
|
|
|
sed -i 's/npm run build/#npm run build/g' scripts/note-editor.js
|
|
'';
|
|
|
|
installPhase = ''
|
|
mkdir $out
|
|
cp -r . $out
|
|
'';
|
|
};
|
|
|
|
zotero-build = stdenv.mkDerivation {
|
|
pname = "${pname}-build";
|
|
inherit version meta;
|
|
src = fetchFromGitHub {
|
|
owner = "zotero";
|
|
repo = "zotero-build";
|
|
rev = "00e854c6588f329b714250e450f4f7f663aa0222";
|
|
hash = "sha256-Gvt37jObgSQ10GBYjnCLu5XbUAy3oVTkWPvHbhLF+fw=";
|
|
fetchSubmodules = true;
|
|
};
|
|
|
|
postPatch = ''
|
|
sed -i -E "/-aL/a '--chmod=Du=rwx'," xpi/build_xpi
|
|
#sed -i 's/-aL/-L/' xpi/build_xpi
|
|
'';
|
|
|
|
buildInputs = [ python3 rsync perl ];
|
|
|
|
buildPhase = ''
|
|
python3 xpi/build_xpi -s ${zotero-client}/build -c source -m ${rev}
|
|
'';
|
|
|
|
installPhase = ''
|
|
mkdir $out
|
|
cp -r . $out
|
|
'';
|
|
};
|
|
|
|
in
|
|
|
|
stdenv.mkDerivation {
|
|
inherit pname version meta;
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "zotero";
|
|
repo = "zotero-standalone-build";
|
|
rev = "e9ef6bf21d39cc66f1edefdd5b7429bbaf0c5247";
|
|
hash = "sha256-NcnbqCN6Pti2KuVX79QLrTk2V/3sMxMrbgRzSTluOtM=";
|
|
fetchSubmodules = true;
|
|
};
|
|
|
|
patches = [ ./fetchxul.patch ];
|
|
|
|
postPatch = ''
|
|
patchShebangs .
|
|
|
|
sed -i 's|LINUX_i686_RUNTIME_PATH=.*|LINUX_i686_RUNTIME_PATH="$DIR/xulrunner/firefox"|' config.sh
|
|
sed -i 's|LINUX_x86_64_RUNTIME_PATH=.*|LINUX_x86_64_RUNTIME_PATH="$DIR/xulrunner/firefox"|' config.sh
|
|
sed -i 's|ZOTERO_SOURCE_DIR=.*|ZOTERO_SOURCE_DIR="${zotero-client}"|' config.sh
|
|
sed -i 's|ZOTERO_BUILD_DIR=.*|ZOTERO_BUILD_DIR="${zotero-build}"|' config.sh
|
|
|
|
sed -i -E 's|(.*hash=).*|\1${rev}|' scripts/dir_build
|
|
sed -i '/build_xpi/d' scripts/dir_build
|
|
|
|
sed -i -E 's|(rsync -a.*)|\1; chmod -R +w $BUILD_DIR|' build.sh
|
|
#sed -i 's|MaxVersion=.*|MaxVersion=111.0|' assets/application.ini
|
|
'';
|
|
|
|
nativeBuildInputs = [ makeWrapper python3 unzip zip perl rsync wrapGAppsHook ];
|
|
buildInputs = [ gsettings-desktop-schemas glib gtk3 gnome.adwaita-icon-theme dconf ];
|
|
configurePhase = ''
|
|
mkdir xulrunner
|
|
cp -Lr ${firefox-esr-102-unwrapped}/lib/firefox xulrunner
|
|
chmod -R +w xulrunner
|
|
|
|
cp -Lr ${pdftools} pdftools
|
|
chmod -R +w pdftools
|
|
|
|
./fetch_xulrunner.sh -p l
|
|
'';
|
|
|
|
buildPhase = ''
|
|
chmod -R +w /build
|
|
scripts/dir_build -p l
|
|
'';
|
|
|
|
installPhase =
|
|
let
|
|
desktopItem = makeDesktopItem {
|
|
name = "${pname}-${version}";
|
|
exec = "${pname} -url %U";
|
|
icon = "zotero";
|
|
comment = meta.description;
|
|
desktopName = "Zotero";
|
|
genericName = "Reference Management";
|
|
categories = [ "Office" "Database" ];
|
|
startupNotify = true;
|
|
mimeTypes = [ "x-scheme-handler/zotero" "text/plain" ];
|
|
};
|
|
in
|
|
''
|
|
mkdir -p $out/bin
|
|
cp -Lr staging/Zotero_linux $out/lib
|
|
|
|
mkdir -p $out/share/applications
|
|
cp ${desktopItem}/share/applications/* $out/share/applications/
|
|
for size in 16 32 48 256; do
|
|
install -Dm444 staging/Zotero_linux/chrome/icons/default/default$size.png \
|
|
$out/share/icons/hicolor/''${size}x''${size}/apps/zotero.png
|
|
done
|
|
|
|
makeWrapper "$out/lib/zotero" "$out/bin/${pname}" \
|
|
--set-default MOZ_ENABLE_WAYLAND 1
|
|
'';
|
|
}
|