1{ stdenv, lib, fetchpatch, fetchFromGitHub, makeWrapper, writeText, runtimeShell, jdk11, perl, gradle_6, which }:
2
3let
4 pname = "freeplane";
5 version = "1.9.14";
6
7 src_sha256 = "UiXtGJs+hibB63BaDDLXgjt3INBs+NfMsKcX2Q/kxKw=";
8 deps_outputHash = "tHhRaMIQK8ERuzm+qB9tRe2XSesL0bN3rComB9/qWgg=";
9 emoji_outputHash = "w96or4lpKCRK8A5HaB4Eakr7oVSiQALJ9tCJvKZaM34=";
10
11 jdk = jdk11;
12 gradle = gradle_6;
13
14 src = fetchFromGitHub {
15 owner = pname;
16 repo = pname;
17 rev = "release-${version}";
18 sha256 = src_sha256;
19 };
20
21 deps = stdenv.mkDerivation {
22 name = "${pname}-deps";
23 inherit src;
24
25 nativeBuildInputs = [ jdk perl gradle ];
26
27 buildPhase = ''
28 GRADLE_USER_HOME=$PWD gradle -Dorg.gradle.java.home=${jdk} --no-daemon jar
29 '';
30
31 # Mavenize dependency paths
32 # e.g. org.codehaus.groovy/groovy/2.4.0/{hash}/groovy-2.4.0.jar -> org/codehaus/groovy/groovy/2.4.0/groovy-2.4.0.jar
33 installPhase = ''
34 find ./caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
35 | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
36 | sh
37 '';
38
39 outputHashAlgo = "sha256";
40 outputHashMode = "recursive";
41 outputHash = deps_outputHash;
42 };
43
44 # Point to our local deps repo
45 gradleInit = writeText "init.gradle" ''
46 logger.lifecycle 'Replacing Maven repositories with ${deps}...'
47 gradle.projectsLoaded {
48 rootProject.allprojects {
49 buildscript {
50 repositories {
51 clear()
52 maven { url '${deps}' }
53 }
54 }
55 repositories {
56 clear()
57 maven { url '${deps}' }
58 }
59 }
60 }
61 settingsEvaluated { settings ->
62 settings.pluginManagement {
63 repositories {
64 maven { url '${deps}' }
65 }
66 }
67 }
68 '';
69
70 emoji = stdenv.mkDerivation rec {
71 name = "${pname}-emoji";
72 inherit src;
73
74 nativeBuildInputs = [ jdk gradle ];
75
76 buildPhase = ''
77 GRADLE_USER_HOME=$PWD gradle -Dorg.gradle.java.home=${jdk} --no-daemon --offline --init-script ${gradleInit} :freeplane:downloadEmoji
78 '';
79
80 installPhase = ''
81 mkdir -p $out/emoji/txt $out/resources/images
82 cp freeplane/build/emoji/txt/emojilist.txt $out/emoji/txt
83 cp -r freeplane/build/emoji/resources/images/emoji/. $out/resources/images/emoji
84 '';
85
86 outputHashAlgo = "sha256";
87 outputHashMode = "recursive";
88 outputHash = emoji_outputHash;
89 };
90
91in stdenv.mkDerivation rec {
92 inherit pname version src;
93
94 nativeBuildInputs = [ makeWrapper jdk gradle ];
95
96 buildPhase = ''
97 mkdir -p -- ./freeplane/build/emoji/{txt,resources/images}
98 cp ${emoji}/emoji/txt/emojilist.txt ./freeplane/build/emoji/txt/emojilist.txt
99 cp -r ${emoji}/resources/images/emoji ./freeplane/build/emoji/resources/images/emoji
100 GRADLE_USER_HOME=$PWD gradle -Dorg.gradle.java.home=${jdk} --no-daemon --offline --init-script ${gradleInit} -x test -x :freeplane:downloadEmoji build
101 '';
102
103 installPhase = ''
104 runHook preInstall
105 mkdir -p $out/bin $out/share
106
107 cp -a ./BIN/. $out/share/${pname}
108 makeWrapper $out/share/${pname}/${pname}.sh $out/bin/${pname} \
109 --set FREEPLANE_BASE_DIR $out/share/${pname} \
110 --set JAVA_HOME ${jdk} \
111 --prefix PATH : ${lib.makeBinPath [ jdk which ]}
112 runHook postInstall
113 '';
114
115 meta = with lib; {
116 description = "Mind-mapping software";
117 homepage = "https://freeplane.org/";
118 license = licenses.gpl2Plus;
119 platforms = platforms.linux;
120 maintainers = with maintainers; [ chaduffy ];
121 };
122}