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