Files
2025-12-10 14:11:15 +02:00

120 lines
3.2 KiB
Nix

{
lib,
maven,
makeDesktopItem,
fetchFromGitHub,
temurin-jre-bin-21,
temurin-bin-21,
glib,
libxxf86vm,
libxtst,
gtk3,
libGL,
# native
copyDesktopItems,
wrapGAppsHook3,
gettext,
}:
let
mavenOurJdk = maven.override {
jdk_headless = temurin-jre-bin-21;
};
in
mavenOurJdk.buildMavenPackage rec {
pname = "pdfsam-basic";
version = "5.4.1";
src = fetchFromGitHub {
owner = "torakiki";
repo = "pdfsam";
rev = "v${version}";
hash = "sha256-9IzYnWYE0OD1b4xybl3NdaBvVSw6C4+1ORUnrotqSuc=";
};
mvnParameters = "-Drelease -Dmaven.test.skip";
mvnHash = "sha256-Y/wz/XuzDpT7qnk/pRBkv6PeI0GmqKXh54gqb7cWHHw=";
buildInputs = [
glib
libxxf86vm
];
nativeBuildInputs = [
# Used as the main java implementation. Also the build relies upon jlink
# which is included in this package.
temurin-bin-21
gettext
wrapGAppsHook3
copyDesktopItems
];
installPhase = ''
runHook preInstall
install -Dm0644 pdfsam-basic/src/deb/icon.svg $out/share/icons/pdfsam-basic.svg
mkdir $out/lib
tar -xf pdfsam-basic/target/pdfsam-basic-${version}-linux-x64.tar.gz -C $out/lib
mv $out/lib/pdfsam-basic-${version}-linux-x64 $out/lib/pdfsam-basic
# Based upon upstream's default $out/lib/pdfsam-basic/bin/pdfsam.sh file,
# but with Nix specific dynamically loaded libraries
makeWrapper ${temurin-jre-bin-21}/bin/java $out/bin/pdfsam-basic \
"''${gappsWrapperArgs[@]}" \
--prefix LD_LIBRARY_PATH : "${
lib.makeLibraryPath [
libxxf86vm
libxtst
gtk3
libGL
]
}" \
--argv0 pdfsam-basic \
--add-flags --enable-preview \
--add-flags "--module-path $out/lib/pdfsam-basic/lib" \
--add-flags "--module org.pdfsam.basic/org.pdfsam.basic.App" \
--add-flags "-Xmx512M" \
--add-flags "-Dprism.lcdtext=false" \
--add-flags "-splash:$out/lib/pdfsam-basic/splash.png" \
--add-flags "-Dapp.name=pdfsam-basic" \
--add-flags "-Dapp.home=$out/lib/pdfsam-basic" \
--add-flags "-Dbasedir=$out/lib/pdfsam-basic"
# Remove bundled executables, shared objects etc, that are not needed on
# Nix (we just need the jar files).
rm -r $out/lib/pdfsam-basic/{doc,bin,runtime}
runHook postInstall
'';
# Based on upstream's desktop file:
# https://github.com/torakiki/pdfsam/blob/master/pdfsam-basic/src/deb/pdfsam-basic.desktop
desktopItems = [
(makeDesktopItem {
name = "PDFsam Basic";
exec = "pdfsam-basic";
icon = "pdfsam-basic";
comment = meta.description;
desktopName = "PDFsam Basic";
genericName = "PDF Split and Merge";
mimeTypes = [ "application/pdf" ];
categories = [ "Office" ];
})
];
meta = {
homepage = "https://github.com/torakiki/pdfsam";
description = "Multi-platform software designed to extract pages, split, merge, mix and rotate PDF files";
mainProgram = "pdfsam-basic";
sourceProvenance = with lib.sourceTypes; [
binaryBytecode
binaryNativeCode
];
license = lib.licenses.agpl3Plus;
platforms = [ "x86_64-linux" ];
maintainers = with lib.maintainers; [
doronbehar
_1000101
];
};
}