nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at python-updates 250 lines 7.3 kB view raw
1{ 2 lib, 3 stdenv, 4 fetchurl, 5 fetchFromGitHub, 6 wrapGAppsHook3, 7 makeDesktopItem, 8 copyDesktopItems, 9 makeShellWrapper, 10 unzip, 11 zip, 12 xdg-utils, 13 gtk3, 14 jdk25, 15 openjfx25, 16 jre25_minimal, 17 gradle_9, 18 python3, 19 postgresql, 20 jbang, 21}: 22 23let 24 jdk = jdk25; 25 openjfx = openjfx25; 26 jre = jre25_minimal.override { 27 modules = [ 28 "java.base" 29 "java.compiler" 30 "java.datatransfer" 31 "java.desktop" 32 "java.logging" 33 "java.management" 34 "java.naming" 35 "java.net.http" 36 "java.prefs" 37 "java.scripting" 38 "java.sql" 39 "java.sql.rowset" 40 "java.xml" 41 "jdk.httpserver" 42 "jdk.incubator.vector" 43 "jdk.jsobject" 44 "jdk.net" 45 "jdk.security.auth" 46 "jdk.unsupported" 47 "jdk.unsupported.desktop" 48 "jdk.xml.dom" 49 ]; 50 }; 51 gradle = gradle_9; 52 ltwaUrl = "https://www.issn.org/wp-content/uploads/2021/07/ltwa_20210702.csv"; 53 ltwa = fetchurl { 54 url = ltwaUrl; 55 hash = "sha256-jnS8Y9x8eg2L3L3RPnS6INTs19mEtwzfNIjJUw6HtIY="; 56 }; 57 kotlinDslVersion = "6.4.2"; 58in 59stdenv.mkDerivation rec { 60 version = "6.0-alpha.4"; 61 pname = "jabref"; 62 63 src = fetchFromGitHub { 64 owner = "JabRef"; 65 repo = "jabref"; 66 tag = "v${version}"; 67 hash = "sha256-ZhyWYZD8QT3dH6MwG2kMjTAjkxaVFIMR4C9aAvi3FJQ="; 68 fetchSubmodules = true; 69 }; 70 71 desktopItems = [ 72 (makeDesktopItem { 73 comment = meta.description; 74 name = "JabRef"; 75 desktopName = "JabRef"; 76 genericName = "BibTex Editor"; 77 categories = [ "Office" ]; 78 icon = "jabref"; 79 exec = "JabRef %U"; 80 startupWMClass = "org.jabref.gui.JabRefGUI"; 81 mimeTypes = [ "text/x-bibtex" ]; 82 }) 83 ]; 84 85 mitmCache = gradle.fetchDeps { 86 inherit pname; 87 data = ./deps.json; 88 }; 89 90 postPatch = '' 91 sed -i -e '/vendor/d' -e '/JavaLanguageVersion/s/24/25/' build-logic/src/main/kotlin/org.jabref.gradle.feature.compile.gradle.kts 92 sed -i -e '/javafx-base/s/24.0.2/25/' build-support/src/main/java/*.java 93 sed -i -e 's/javafx = .*/javafx = "25"/' versions/build.gradle.kts 94 95 sed -i -e '1a //REPOS file://${mitmCache}/https/repo.maven.apache.org/maven2,file://${mitmCache}/https/plugins.gradle.org/m2' build-support/src/main/java/*.java 96 97 substituteInPlace build-logic/build.gradle.kts \ 98 --replace-fail '`kotlin-dsl`' 'id("org.gradle.kotlin.kotlin-dsl") version "${kotlinDslVersion}"' 99 100 pushd jablib 101 102 # Disable update check 103 substituteInPlace src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java \ 104 --replace-fail 'VERSION_CHECK_ENABLED, Boolean.TRUE' \ 105 'VERSION_CHECK_ENABLED, Boolean.FALSE' 106 107 # Find OpenOffice/LibreOffice binary 108 substituteInPlace src/main/java/org/jabref/logic/openoffice/OpenOfficePreferences.java \ 109 --replace-fail '/usr' '/run/current-system/sw' 110 111 sed -i -e '/setOutputRedirector/d' src/main/java/org/jabref/logic/search/PostgreServer.java 112 113 substituteInPlace build.gradle.kts \ 114 --replace-fail '${ltwaUrl}' 'file://${ltwa}' 115 116 popd 117 ''; 118 119 nativeBuildInputs = [ 120 jdk 121 gradle 122 (jbang.override { inherit jdk; }) 123 wrapGAppsHook3 124 copyDesktopItems 125 unzip 126 zip 127 makeShellWrapper 128 ]; 129 130 buildInputs = [ 131 gtk3 132 python3 133 ]; 134 135 gradleFlags = [ 136 "-PprojVersion=${version}" 137 "-Dorg.gradle.java.home=${jdk}" 138 ]; 139 140 preBuild = '' 141 gradleFlagsArray+=(-PprojVersionInfo="${version} NixOS") 142 ''; 143 144 dontWrapGApps = true; 145 146 installPhase = '' 147 runHook preInstall 148 149 install -dm755 $out/share/java/jabref 150 install -Dm644 LICENSE $out/share/licenses/jabref/LICENSE 151 install -Dm644 jabgui/src/main/resources/icons/jabref.svg $out/share/pixmaps/jabref.svg 152 153 # script to support browser extensions 154 install -Dm755 jabgui/buildres/linux/jabrefHost.py $out/lib/jabrefHost.py 155 patchShebangs $out/lib/jabrefHost.py 156 install -Dm644 jabgui/buildres/linux/native-messaging-host/firefox/org.jabref.jabref.json $out/lib/mozilla/native-messaging-hosts/org.jabref.jabref.json 157 sed -i -e "s|/opt/jabref|$out|" $out/lib/mozilla/native-messaging-hosts/org.jabref.jabref.json 158 159 # Resources in the jar can't be found, workaround copied from AUR 160 cp -r */build/resources $out/share/java/jabref 161 162 for tarball in */build/distributions/*.tar; do 163 tar xf $tarball -C $out --strip-components=1 164 done 165 166 # Replace .so files with the ones from nixpkgs 167 cp ${openjfx}/modules_libs/javafx.graphics/*.so $out/lib 168 # Temp fix: openjfx doesn't build with webkit 169 unzip $out/lib/javafx-web-*-*.jar libjfxwebkit.so -d $out/lib/ 170 171 zip -d $out/lib/javafx-media-*-*.jar "*.so" 172 zip -d $out/lib/javafx-graphics-*-*.jar "*.so" 173 zip -d $out/lib/javafx-web-*-*.jar "*.so" 174 175 # Use postgresql from nixpkgs since the bundled binary doesn't work on NixOS 176 ARCH1=${if stdenv.isAarch64 then "arm64v8" else "amd64"} 177 ARCH2=${if stdenv.isAarch64 then "arm_64" else "x86_64"} 178 mkdir postgresql 179 cd postgresql 180 ln -s ${postgresql}/{lib,share} ./ 181 mkdir -p bin 182 ln -s ${postgresql}/bin/{postgres,initdb} ./bin 183 # Wrap pg_ctl to workaround https://github.com/NixOS/nixpkgs/issues/83770 184 # Use custom wrap to workaround https://github.com/NixOS/nixpkgs/issues/330471 185 makeShellWrapper ${postgresql}/bin/pg_ctl ./bin/pg_ctl \ 186 --add-flags '-o "-k /tmp"' 187 chmod +x ./bin/pg_ctl 188 189 jar=$(ls $out/lib/embedded-postgres-binaries-linux-$ARCH1-*.jar) 190 191 tar -cJf postgres-linux-$ARCH2.txz * 192 zip $jar postgres-linux-$ARCH2.txz 193 cd .. 194 195 runHook postInstall 196 ''; 197 198 postFixup = '' 199 for bin in jabgui jabkit jabsrv-cli; do 200 DEFAULT_JVM_OPTS=$(sed -n -E "s/^DEFAULT_JVM_OPTS='(.*)'$/\1/p" $out/bin/$bin | sed -e 's/"//g') 201 MODULE_PATH=$(sed -n -E 's/^MODULE_PATH=(.*)$/\1/p' $out/bin/$bin | sed -e "s|\$APP_HOME|$out|g") 202 MODULE=$(sed -n -E 's/\s*--module (.*) \\/\1/p' $out/bin/$bin) 203 rm $out/bin/$bin* 204 205 # put this in postFixup because some gappsWrapperArgs are generated in gappsWrapperArgsHook in preFixup 206 makeWrapper ${jre}/bin/java $out/bin/$bin \ 207 "''${gappsWrapperArgs[@]}" \ 208 --suffix PATH : ${ 209 lib.makeBinPath [ 210 xdg-utils 211 postgresql 212 ] 213 } \ 214 --add-flags "$DEFAULT_JVM_OPTS \ 215 -Djava.library.path=$out/lib/ \ 216 --module-path $MODULE_PATH \ 217 --module $MODULE" 218 done 219 220 # lowercase alias (for convenience and required for browser extensions) 221 ln -sf $out/bin/jabgui $out/bin/jabref 222 ln -sf $out/bin/jabgui $out/bin/JabRef 223 ''; 224 225 gradleUpdateScript = '' 226 # Add jbang deps to gradle 227 sed -n 's|//DEPS \(.*\)| implementation("\1")|p' build-support/src/main/java/*.java | sort -u | sed -i '/dependencies {/r /dev/stdin' build-logic/build.gradle.kts 228 229 gradle assemble -Dos.arch=amd64 230 gradle assemble -Dos.arch=aarch64 231 ''; 232 233 meta = { 234 description = "Open source bibliography reference manager"; 235 homepage = "https://www.jabref.org"; 236 sourceProvenance = with lib.sourceTypes; [ 237 fromSource 238 binaryBytecode # source bundles dependencies as jars 239 binaryNativeCode # source bundles dependencies as jars 240 ]; 241 license = lib.licenses.mit; 242 platforms = [ 243 "x86_64-linux" 244 "aarch64-linux" 245 ]; 246 maintainers = with lib.maintainers; [ 247 linsui 248 ]; 249 }; 250}