1{
2 lib,
3 stdenv,
4 cmake,
5 curl,
6 fetchFromGitHub,
7 hunspell,
8 pkg-config,
9 qmake,
10 qtbase,
11 qtwebengine,
12 wrapGAppsHook3,
13 wrapQtAppsHook,
14}:
15let
16 version = "2.0.0";
17 srcs = {
18 mindforger = fetchFromGitHub {
19 owner = "dvorka";
20 repo = "mindforger";
21 rev = version;
22 sha256 = "sha256-+8miV2xuQcaWGdWCEXPIg6EXjAHtgD9pX7Z8ZNhpMjA=";
23 };
24 cmark-gfm = fetchFromGitHub {
25 owner = "dvorka";
26 repo = "cmark";
27 rev = "4ca8688093228c599432a87d7bd945804c573d51";
28 sha256 = "sha256-0WiG8aot8mc0h1BKPgC924UKQrgunZvKKBy9bD7nhoQ=";
29 };
30 mindforger-repository = fetchFromGitHub {
31 owner = "dvorka";
32 repo = "mindforger-repository";
33 rev = "ec81a27e5de6408bbcd3f6d7733a7c6f3b52e433";
34 sha256 = "sha256-JGTP1He7G2Obmsav64Lf7BLHp8OTvPtg38VHsrEC36o=";
35 };
36 };
37in
38stdenv.mkDerivation {
39 pname = "mindforger";
40 inherit version;
41
42 src = srcs.mindforger;
43
44 nativeBuildInputs = [
45 cmake
46 pkg-config
47 qmake
48 wrapGAppsHook3
49 wrapQtAppsHook
50 ];
51 buildInputs = [
52 curl
53 hunspell
54 qtbase
55 qtwebengine
56 ];
57
58 # Disable the cmake hook (so we don't try to build MindForger with it), and
59 # build MindForger's internal fork of cmark-gfm ahead of MindForger itself.
60 #
61 # Moreover unpack the docs that are needed for the MacOS build.
62 postUnpack = ''
63 cp -TR ${srcs.cmark-gfm} $sourceRoot/deps/cmark-gfm
64 ''
65 + lib.optionalString stdenv.hostPlatform.isDarwin ''
66 cp -TR ${srcs.mindforger-repository} $sourceRoot/doc
67 '';
68 dontUseCmakeConfigure = true;
69 preBuild = ''
70 (
71 mkdir deps/cmark-gfm/build &&
72 cd deps/cmark-gfm/build &&
73 cmake -DCMARK_TESTS=OFF -DCMARK_SHARED=OFF .. &&
74 cmake --build . --parallel
75 )'';
76
77 doCheck = true;
78
79 patches = [
80 ./hunspell_pkgconfig.patch
81 ];
82
83 postPatch = ''
84 substituteInPlace lib/src/install/installer.cpp --replace /usr "$out"
85 substituteInPlace app/resources/gnome-shell/mindforger.desktop --replace /usr "$out"
86 for f in app/app.pro lib/lib.pro; do
87 substituteInPlace "$f" --replace "QMAKE_CXX = g++" ""
88 done
89 '';
90
91 qmakeFlags = [
92 "-r"
93 "mindforger.pro"
94 "CONFIG+=mfnoccache"
95 "CONFIG+=mfwebengine"
96 ];
97
98 postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
99 mkdir "$out"/Applications
100 mv app/mindforger.app "$out"/Applications/
101 '';
102
103 meta = with lib; {
104 description = "Thinking Notebook & Markdown IDE";
105 longDescription = ''
106 MindForger is actually more than an editor or IDE - it's human
107 mind inspired personal knowledge management tool
108 '';
109 homepage = "https://www.mindforger.com";
110 license = licenses.gpl2Plus;
111 platforms = [
112 "aarch64-linux"
113 "x86_64-linux"
114 ];
115 maintainers = with maintainers; [ cyplo ];
116 mainProgram = "mindforger";
117 };
118}