summary refs log tree commit diff
path: root/pkgs/applications/misc/xmind
diff options
context:
space:
mode:
authorMaximilian Bosch <maximilian@mbosch.me>2019-05-10 06:34:25 +0200
committerMaximilian Bosch <maximilian@mbosch.me>2019-05-20 13:35:12 +0200
commit42c8cb61c616f6981a13af82847ed34a0ce0c062 (patch)
tree191c42a7d995c59f33e122869c71a1565e18ac27 /pkgs/applications/misc/xmind
parent0d00b0b646b7a3c909631354adc16ae07be44bc8 (diff)
downloadnixpkgs-42c8cb61c616f6981a13af82847ed34a0ce0c062.tar
nixpkgs-42c8cb61c616f6981a13af82847ed34a0ce0c062.tar.gz
nixpkgs-42c8cb61c616f6981a13af82847ed34a0ce0c062.tar.bz2
nixpkgs-42c8cb61c616f6981a13af82847ed34a0ce0c062.tar.lz
nixpkgs-42c8cb61c616f6981a13af82847ed34a0ce0c062.tar.xz
nixpkgs-42c8cb61c616f6981a13af82847ed34a0ce0c062.tar.zst
nixpkgs-42c8cb61c616f6981a13af82847ed34a0ce0c062.zip
xmind: 7.5-update1 -> 8-update8
The latest version of XMind doesn't support a prebuilt debian package
anymore, hence a manual installation of the ZIP is needed. The new
configuration for the Java GUI had to be patched as it relied on several
paths in the ZIP that won't work anymore in a Nix-based environment.

Additionally the following changes were made:

* Manual creation of a desktop item and an icon (we're using the one
  from AUR for now). Those files were available in the old `.deb`, but
  that isn't supported for the latest XMind version.

* Created a patch fro `XMind.ini` to use writable paths in $HOME and fix
  the path to the plugins in the store path.

* Created a custom startup script which ensures the creation of
  `$HOME/.xmind` and copies the relevant files from the store path into
  it. Such a behavior was available in the old `.deb` as well, but not
  anymore with the new ZIP.
Diffstat (limited to 'pkgs/applications/misc/xmind')
-rw-r--r--pkgs/applications/misc/xmind/default.nix69
-rw-r--r--pkgs/applications/misc/xmind/java-env-config-fixes.patch40
2 files changed, 88 insertions, 21 deletions
diff --git a/pkgs/applications/misc/xmind/default.nix b/pkgs/applications/misc/xmind/default.nix
index a12f3dc304b..fc5abf10989 100644
--- a/pkgs/applications/misc/xmind/default.nix
+++ b/pkgs/applications/misc/xmind/default.nix
@@ -1,20 +1,23 @@
-{ stdenv, lib, dpkg, fetchurl, gtk2, jre, libXtst, makeWrapper }:
+{ stdenv, lib, fetchzip, fetchurl, gtk2, jre, libXtst, makeWrapper, makeDesktopItem, runtimeShell }:
 
 stdenv.mkDerivation rec {
   name = "xmind-${version}";
-  version = "7.5-update1";
+  version = "8-update8";
 
-  src = if stdenv.hostPlatform.system == "i686-linux" then fetchurl {
-    url = "http://dl2.xmind.net/xmind-downloads/${name}-linux_i386.deb";
-    sha256 = "04kr6pw0kwy715bp9wcnqnw1k5wl65xa87lhljrskm291p402jy1";
-  } else if stdenv.hostPlatform.system == "x86_64-linux" then fetchurl {
-    url = "http://dl2.xmind.net/xmind-downloads/${name}-linux_amd64.deb";
-    sha256 = "1j2ynhk7p3m3vd6c4mjwpnlzqgfj5c4q3zydab3nfwncwx6gaqj9";
-  } else throw "platform ${stdenv.hostPlatform.system} not supported!";
+  src = fetchzip {
+    url = "https://xmind.net/xmind/downloads/${name}-linux.zip";
+    stripRoot = false;
+    sha256 = "1p68z0b4brgiyybz190alqv716ncql49vsksm41y90mcjd8s4jhn";
+  };
+
+  srcIcon = fetchurl {
+    url = "https://aur.archlinux.org/cgit/aur.git/plain/xmind.png?h=xmind";
+    sha256 = "0jxq2fiq69q9ly0m6hx2qfybqad22sl42ciw636071khpqgc885f";
+  };
 
-  nativeBuildInputs = [ dpkg makeWrapper ];
+  patches = [ ./java-env-config-fixes.patch ];
 
-  unpackCmd = "mkdir root ; dpkg-deb -x $curSrc root";
+  nativeBuildInputs = [ makeWrapper ];
 
   dontBuild = true;
   dontPatchELF = true;
@@ -22,12 +25,27 @@ stdenv.mkDerivation rec {
 
   libPath = lib.makeLibraryPath [ gtk2 libXtst ];
 
-  installPhase = ''
-    mkdir -p $out
-    cp -r usr/lib/xmind $out/libexec
-    cp -r usr/bin usr/share $out
-    rm $out/libexec/XMind.ini
-    mv etc/XMind.ini $out/libexec
+  desktopItem = makeDesktopItem {
+    name = "XMind";
+    exec = "XMind";
+    icon = "xmind";
+    desktopName = "XMind";
+    comment = meta.description;
+    categories = "Office;";
+    mimeType = "application/xmind;xscheme-handler/xmind";
+  };
+
+  installPhase = let
+    targetDir = if stdenv.hostPlatform.system == "i686-linux"
+      then "XMind_i386"
+      else "XMind_amd64";
+  in ''
+    mkdir -p $out/{bin,libexec/configuration/,share/{applications/,fonts/,icons/hicolor/scalable/apps/}}
+    cp -r ${targetDir}/{configuration,p2,XMind{,.ini}} $out/libexec
+    cp -r {plugins,features} $out/libexec/
+    cp -r fonts $out/share/fonts/
+    cp "${desktopItem}/share/applications/XMind.desktop" $out/share/applications/XMind.desktop
+    cp ${srcIcon} $out/share/icons/hicolor/scalable/apps/xmind.png
 
     patchelf --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \
       $out/libexec/XMind
@@ -35,8 +53,17 @@ stdenv.mkDerivation rec {
     wrapProgram $out/libexec/XMind \
       --prefix LD_LIBRARY_PATH : "${libPath}"
 
-    substituteInPlace "$out/bin/XMind" \
-       --replace '/usr/lib/xmind' "$out/libexec"
+    # Inspired by https://aur.archlinux.org/cgit/aur.git/tree/?h=xmind
+    cat >$out/bin/XMind <<EOF
+      #! ${runtimeShell}
+      if [ ! -d "\$HOME/.xmind" ]; then
+        mkdir -p "\$HOME/.xmind/configuration-cathy/"
+        cp -r $out/libexec/configuration/ \$HOME/.xmind/configuration-cathy/
+      fi
+
+      exec "$out/libexec/XMind" "$@"
+    EOF
+    chmod +x $out/bin/XMind
 
     ln -s ${jre} $out/libexec/jre
   '';
@@ -55,9 +82,9 @@ stdenv.mkDerivation rec {
       GTD. Meanwhile, XMind can read FreeMind and MindManager files,
       and save to Evernote.
     '';
-    homepage = http://www.xmind.net/;
+    homepage = https://www.xmind.net/;
     license = licenses.unfree;
     platforms = platforms.linux;
-    maintainers = with maintainers; [ michalrus ];
+    maintainers = with maintainers; [ michalrus ma27 ];
   };
 }
diff --git a/pkgs/applications/misc/xmind/java-env-config-fixes.patch b/pkgs/applications/misc/xmind/java-env-config-fixes.patch
new file mode 100644
index 00000000000..f359a9c2ba4
--- /dev/null
+++ b/pkgs/applications/misc/xmind/java-env-config-fixes.patch
@@ -0,0 +1,40 @@
+diff --git a/XMind_amd64/XMind.ini b/XMind_amd64/XMind.ini
+index bdd8a37..5f35daf 100644
+--- a/XMind_amd64/XMind.ini
++++ b/XMind_amd64/XMind.ini
+@@ -1,11 +1,11 @@
+ -configuration
+-./configuration
++@user.home/.xmind/configuration-cathy_linux_64
+ -data
+-../workspace
++@user.home/.xmind/workspace-cathy
+ -startup
+-../plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
++plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
+ --launcher.library
+-../plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.400.v20160518-1444
++plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.400.v20160518-1444
+ --launcher.defaultAction
+ openFile
+ --launcher.GTK_version
+diff --git a/XMind_i386/XMind.ini b/XMind_i386/XMind.ini
+index 4ed3225..1d74258 100644
+--- a/XMind_i386/XMind.ini
++++ b/XMind_i386/XMind.ini
+@@ -1,11 +1,11 @@
+ -configuration
+-./configuration
++@user.home/.xmind/configuration-cathy_linux_64
+ -data
+-../workspace
++@user.home/.xmind/workspace-cathy
+ -startup
+-../plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
++plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
+ --launcher.library
+-../plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.400.v20160518-1444
++plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.400.v20160518-1444
+ --launcher.defaultAction
+ openFile
+ --launcher.GTK_version