1{
2 lib,
3 stdenvNoCC,
4 fetchurl,
5 undmg,
6 makeWrapper,
7 openjdk21,
8 gnused,
9 autoPatchelfHook,
10 autoSignDarwinBinariesHook,
11 wrapGAppsHook3,
12 gtk3,
13 glib,
14 webkitgtk_4_1,
15 glib-networking,
16 override_xmx ? "1024m",
17}:
18
19stdenvNoCC.mkDerivation (finalAttrs: {
20 pname = "dbeaver-bin";
21 version = "25.1.3";
22
23 src =
24 let
25 inherit (stdenvNoCC.hostPlatform) system;
26 selectSystem = attrs: attrs.${system} or (throw "Unsupported system: ${system}");
27 suffix = selectSystem {
28 x86_64-linux = "linux.gtk.x86_64-nojdk.tar.gz";
29 aarch64-linux = "linux.gtk.aarch64-nojdk.tar.gz";
30 x86_64-darwin = "macos-x86_64.dmg";
31 aarch64-darwin = "macos-aarch64.dmg";
32 };
33 hash = selectSystem {
34 x86_64-linux = "sha256-SJCm5HnyhhpFvAK5ei9rkjCKnv8k904Vy0mOqTNcZXM=";
35 aarch64-linux = "sha256-hE4Eu8eL4fJlCj7s+VM4moPBGleibg3nT363avB9gq4=";
36 x86_64-darwin = "sha256-RWewJ5A0j+W17bv0DtxHG1iEz6q87/FwOvn34tHoN7Q=";
37 aarch64-darwin = "sha256-vpVQF3o054s6ztpxJVGj8z3R4E2bc3LD+t8/4PO4hXw=";
38 };
39 in
40 fetchurl {
41 url = "https://github.com/dbeaver/dbeaver/releases/download/${finalAttrs.version}/dbeaver-ce-${finalAttrs.version}-${suffix}";
42 inherit hash;
43 };
44
45 sourceRoot = lib.optional stdenvNoCC.hostPlatform.isDarwin "DBeaver.app";
46
47 nativeBuildInputs = [
48 makeWrapper
49 ]
50 ++ lib.optionals (!stdenvNoCC.hostPlatform.isDarwin) [
51 gnused
52 wrapGAppsHook3
53 autoPatchelfHook
54 ]
55 ++ lib.optionals stdenvNoCC.hostPlatform.isDarwin [
56 undmg
57 autoSignDarwinBinariesHook
58 ];
59
60 dontConfigure = true;
61 dontBuild = true;
62
63 prePatch = ''
64 substituteInPlace ${lib.optionalString stdenvNoCC.hostPlatform.isDarwin "Contents/Eclipse/"}dbeaver.ini \
65 --replace-fail '-Xmx1024m' '-Xmx${override_xmx}'
66 ''
67 # remove the bundled JRE configuration on Darwin
68 # dont use substituteInPlace here because it would match "-vmargs"
69 + lib.optionalString stdenvNoCC.hostPlatform.isDarwin ''
70 sed -i -e '/^-vm$/ { N; d; }' Contents/Eclipse/dbeaver.ini
71 '';
72
73 preInstall = ''
74 # most directories are for different architectures, only keep what we need
75 shopt -s extglob
76 pushd ${lib.optionalString stdenvNoCC.hostPlatform.isDarwin "Contents/Eclipse/"}plugins/com.sun.jna_*/com/sun/jna/
77 rm -r !(ptr|internal|linux-x86-64|linux-aarch64|darwin-x86-64|darwin-aarch64)/
78 popd
79 ''
80 # remove the bundled JRE on Darwin
81 + lib.optionalString stdenvNoCC.hostPlatform.isDarwin ''
82 rm -r Contents/Eclipse/jre/
83 '';
84
85 installPhase =
86 if !stdenvNoCC.hostPlatform.isDarwin then
87 ''
88 runHook preInstall
89
90 mkdir -p $out/opt/dbeaver $out/bin
91 cp -r * $out/opt/dbeaver
92 makeWrapper $out/opt/dbeaver/dbeaver $out/bin/dbeaver \
93 --prefix PATH : "${openjdk21}/bin" \
94 --set JAVA_HOME "${openjdk21.home}" \
95 --prefix GIO_EXTRA_MODULES : "${glib-networking}/lib/gio/modules" \
96 --prefix LD_LIBRARY_PATH : "$out/lib:${
97 lib.makeLibraryPath [
98 gtk3
99 glib
100 webkitgtk_4_1
101 glib-networking
102 ]
103 }"
104
105 mkdir -p $out/share/icons/hicolor/256x256/apps
106 ln -s $out/opt/dbeaver/dbeaver.png $out/share/icons/hicolor/256x256/apps/dbeaver.png
107
108 mkdir -p $out/share/applications
109 ln -s $out/opt/dbeaver/dbeaver-ce.desktop $out/share/applications/dbeaver.desktop
110
111 substituteInPlace $out/opt/dbeaver/dbeaver-ce.desktop \
112 --replace-fail "/usr/share/dbeaver-ce/dbeaver.png" "dbeaver" \
113 --replace-fail "/usr/share/dbeaver-ce/dbeaver" "$out/bin/dbeaver"
114
115 sed -i '/^Path=/d' $out/share/applications/dbeaver.desktop
116
117 runHook postInstall
118 ''
119 else
120 ''
121 runHook preInstall
122
123 mkdir -p $out/{Applications/dbeaver.app,bin}
124 cp -R . $out/Applications/dbeaver.app
125 wrapProgram $out/Applications/dbeaver.app/Contents/MacOS/dbeaver \
126 --prefix PATH : "${openjdk21}/bin" \
127 --set JAVA_HOME "${openjdk21.home}"
128 makeWrapper $out/{Applications/dbeaver.app/Contents/MacOS/dbeaver,bin/dbeaver}
129
130 runHook postInstall
131 '';
132
133 passthru.updateScript = ./update.sh;
134
135 meta = {
136 homepage = "https://dbeaver.io/";
137 changelog = "https://github.com/dbeaver/dbeaver/releases/tag/${finalAttrs.version}";
138 description = "Universal SQL Client for developers, DBA and analysts. Supports MySQL, PostgreSQL, MariaDB, SQLite, and more";
139 longDescription = ''
140 Free multi-platform database tool for developers, SQL programmers, database
141 administrators and analysts. Supports all popular databases: MySQL,
142 PostgreSQL, MariaDB, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access,
143 Teradata, Firebird, Derby, etc.
144 '';
145 sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
146 license = lib.licenses.asl20;
147 platforms = with lib.platforms; linux ++ darwin;
148 maintainers = with lib.maintainers; [
149 gepbird
150 mkg20001
151 yzx9
152 ];
153 mainProgram = "dbeaver";
154 };
155})