nixpkgs/pkgs/applications/misc/xmind/default.nix
Maximilian Bosch 42c8cb61c6
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.
2019-05-20 13:35:12 +02:00

91 lines
2.9 KiB
Nix

{ stdenv, lib, fetchzip, fetchurl, gtk2, jre, libXtst, makeWrapper, makeDesktopItem, runtimeShell }:
stdenv.mkDerivation rec {
name = "xmind-${version}";
version = "8-update8";
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";
};
patches = [ ./java-env-config-fixes.patch ];
nativeBuildInputs = [ makeWrapper ];
dontBuild = true;
dontPatchELF = true;
dontStrip = true;
libPath = lib.makeLibraryPath [ gtk2 libXtst ];
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
wrapProgram $out/libexec/XMind \
--prefix LD_LIBRARY_PATH : "${libPath}"
# 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
'';
meta = with stdenv.lib; {
description = "Mind-mapping software";
longDescription = ''
XMind is a mind mapping and brainstorming software. In addition
to the management elements, the software can capture ideas,
clarify thinking, manage complex information, and promote team
collaboration for higher productivity.
It supports mind maps, fishbone diagrams, tree diagrams,
organization charts, spreadsheets, etc. Normally, it is used for
knowledge management, meeting minutes, task management, and
GTD. Meanwhile, XMind can read FreeMind and MindManager files,
and save to Evernote.
'';
homepage = https://www.xmind.net/;
license = licenses.unfree;
platforms = platforms.linux;
maintainers = with maintainers; [ michalrus ma27 ];
};
}