11{
22 lib ,
3- stdenv ,
3+ maven ,
44 makeDesktopItem ,
5- fetchurl ,
5+ fetchFromGitHub ,
66 temurin-jre-bin-21 ,
7- javaPackages ,
8- wrapGAppsHook3 ,
9- dpkg ,
10- xorg ,
7+ temurin-bin-21 ,
8+ glib ,
9+ libxxf86vm ,
10+ libxtst ,
1111 gtk3 ,
1212 libGL ,
13- alsa-lib ,
14- nix-update-script ,
15- desktop-file-utils ,
13+
14+ # native
15+ copyDesktopItems ,
16+ wrapGAppsHook3 ,
17+ gettext ,
1618} :
1719
18- stdenv . mkDerivation ( finalAttrs : {
20+ let
21+ mavenOurJdk = maven . override {
22+ jdk_headless = temurin-jre-bin-21 ;
23+ } ;
24+ in
25+ mavenOurJdk . buildMavenPackage rec {
1926 pname = "pdfsam-basic" ;
2027 version = "5.4.1" ;
2128
22- src = fetchurl {
23- url = "https://github.com/torakiki/pdfsam/releases/download/v${ finalAttrs . version } /pdfsam-basic_${ finalAttrs . version } -1_amd64.deb" ;
24- hash = "sha256-iM0avC0YwxaB2prWbiKJZ9Fzd/HcdDWJg5IWRmNlVkM=" ;
29+ src = fetchFromGitHub {
30+ owner = "torakiki" ;
31+ repo = "pdfsam" ;
32+ rev = "v${ version } " ;
33+ hash = "sha256-9IzYnWYE0OD1b4xybl3NdaBvVSw6C4+1ORUnrotqSuc=" ;
2534 } ;
2635
36+ mvnParameters = "-Drelease -Dmaven.test.skip" ;
37+ mvnHash = "sha256-Y/wz/XuzDpT7qnk/pRBkv6PeI0GmqKXh54gqb7cWHHw=" ;
38+
39+ buildInputs = [
40+ glib
41+ libxxf86vm
42+ ] ;
43+
2744 nativeBuildInputs = [
28- dpkg
45+ # Used as the main java implementation. Also the build relies upon jlink
46+ # which is included in this package.
47+ temurin-bin-21
48+ gettext
2949 wrapGAppsHook3
30- desktop-file-utils
50+ copyDesktopItems
3151 ] ;
3252
3353 installPhase = ''
3454 runHook preInstall
35- desktop-file-edit usr/share/applications/pdfsam-basic.desktop \
36- --set-key="Exec" --set-value="pdfsam-basic %F" \
37- --set-key="Path" --set-value="$out/share/pdfsam-basic" \
38- --set-icon="pdfsam-basic"
39- mkdir $out
40- cp -r usr/share $out/share
41- mkdir $out/share/pdfsam-basic
42- cp -r opt/pdfsam-basic/lib $out/share/pdfsam-basic/lib
43- install -Dm0644 opt/pdfsam-basic/splash.png $out/share/pdfsam-basic/splash.png
44- install -Dm0644 opt/pdfsam-basic/icon.svg $out/share/icons/hicolor/scalable/apps/pdfsam-basic.svg
45- mkdir $out/bin
46- makeWrapper ${ temurin-jre-bin-21 } /bin/java $out/bin/pdfsam-basic \
47- "'' ${gappsWrapperArgs[@]}" \
48- --set JAVA_HOME ${ temurin-jre-bin-21 } \
49- --set PDFSAM_JAVA_PATH ${ temurin-jre-bin-21 } \
50- --prefix LD_LIBRARY_PATH : ${
51- lib . makeLibraryPath [
52- javaPackages . openjfx25 # PDFSam Basic requires JDK 21 and JavaFX 23 https://github.com/torakiki/pdfsam/issues/785#issuecomment-3446564717
53- xorg . libXxf86vm
54- xorg . libXtst
55- gtk3
56- libGL
57- alsa-lib
58- ]
59- } \
60- --add-flags ${
61- lib . escapeShellArg (
62- lib . escapeShellArgs [
63- "--enable-preview"
64- "--module-path"
65- "${ placeholder "out" } /share/pdfsam-basic/lib"
66- "--module"
67- "org.pdfsam.basic/org.pdfsam.basic.App"
68- "-Xmx512M"
69- "-splash:${ placeholder "out" } /share/pdfsam-basic/splash.png"
70- "-Dapp.name=\" pdfsam-basic\" "
71- "-Dapp.pid=\" $$\" "
72- "-Dapp.home=\" ${ placeholder "out" } /share/pdfsam-basic\" "
73- "-Dbasedir=\" ${ placeholder "out" } /share/pdfsam-basic\" "
74- "-Dprism.lcdtext=false"
75- ]
76- )
77- }
55+
56+ install -Dm0644 pdfsam-basic/src/deb/icon.svg $out/share/icons/pdfsam-basic.svg
57+ mkdir $out/lib
58+ tar -xf pdfsam-basic/target/pdfsam-basic-${ version } -linux-x64.tar.gz -C $out/lib
59+ mv $out/lib/pdfsam-basic-${ version } -linux-x64 $out/lib/pdfsam-basic
60+ # Based upon upstream's default $out/lib/pdfsam-basic/bin/pdfsam.sh file,
61+ # but with Nix specific dynamically loaded libraries
62+ makeWrapper ${ temurin-jre-bin-21 } /bin/java $out/bin/pdfsam-basic \
63+ "'' ${gappsWrapperArgs[@]}" \
64+ --prefix LD_LIBRARY_PATH : "${
65+ lib . makeLibraryPath [
66+ libxxf86vm
67+ libxtst
68+ gtk3
69+ libGL
70+ ]
71+ } " \
72+ --argv0 pdfsam-basic \
73+ --add-flags --enable-preview \
74+ --add-flags "--module-path $out/lib/pdfsam-basic/lib" \
75+ --add-flags "--module org.pdfsam.basic/org.pdfsam.basic.App" \
76+ --add-flags "-Xmx512M" \
77+ --add-flags "-Dprism.lcdtext=false" \
78+ --add-flags "-splash:$out/lib/pdfsam-basic/splash.png" \
79+ --add-flags "-Dapp.name=pdfsam-basic" \
80+ --add-flags "-Dapp.home=$out/lib/pdfsam-basic" \
81+ --add-flags "-Dbasedir=$out/lib/pdfsam-basic"
82+ # Remove bundled executables, shared objects etc, that are not needed on
83+ # Nix (we just need the jar files).
84+ rm -r $out/lib/pdfsam-basic/{doc,bin,runtime}
85+
7886 runHook postInstall
7987 '' ;
8088
81- dontWrapGApps = true ;
82-
83- passthru . updateScript = nix-update-script { } ;
89+ # Based on upstream's desktop file:
90+ # https://github.com/torakiki/pdfsam/blob/master/pdfsam-basic/src/deb/pdfsam-basic.desktop
91+ desktopItems = [
92+ ( makeDesktopItem {
93+ name = "PDFsam Basic" ;
94+ exec = "pdfsam-basic" ;
95+ icon = "pdfsam-basic" ;
96+ comment = meta . description ;
97+ desktopName = "PDFsam Basic" ;
98+ genericName = "PDF Split and Merge" ;
99+ mimeTypes = [ "application/pdf" ] ;
100+ categories = [ "Office" ] ;
101+ } )
102+ ] ;
84103
85104 meta = {
86105 homepage = "https://github.com/torakiki/pdfsam" ;
@@ -92,6 +111,9 @@ stdenv.mkDerivation (finalAttrs: {
92111 ] ;
93112 license = lib . licenses . agpl3Plus ;
94113 platforms = [ "x86_64-linux" ] ;
95- maintainers = with lib . maintainers ; [ _1000101 ] ;
114+ maintainers = with lib . maintainers ; [
115+ doronbehar
116+ _1000101
117+ ] ;
96118 } ;
97- } )
119+ }
0 commit comments