{ stdenv, fetchgit, perl, makeWrapper, makeDesktopItem
, which, perlPackages
}:

stdenv.mkDerivation rec {
  version = "1.1.7";
  name = "slic3r-${version}";

  # Slic3r doesn't put out tarballs, only a git repository is available
  src = fetchgit {
    url = "git://github.com/alexrj/Slic3r";
    rev = "refs/tags/${version}";
    sha256 = "0hss90iw4xwca08d03wrz0fds5nqwb9zjqii2n6rgpcl4km69fka";
  };

  buildInputs = with perlPackages; [ perl makeWrapper which
    EncodeLocale MathClipper ExtUtilsXSpp BoostGeometryUtils
    MathConvexHullMonotoneChain MathGeometryVoronoi MathPlanePath Moo
    IOStringy ClassXSAccessor Wx GrowlGNTP NetDBus ImportInto XMLSAX
    ExtUtilsMakeMaker
  ];

  desktopItem = makeDesktopItem {
    name = "slic3r";
    exec = "slic3r";
    icon = "slic3r";
    comment = "G-code generator for 3D printers";
    desktopName = "Slic3r";
    genericName = "3D printer tool";
    categories = "Application;Development;";
  };

  buildPhase = ''
    export SLIC3R_NO_AUTO=true
    export PERL5LIB="./xs/blib/arch/:./xs/blib/lib:$PERL5LIB"

    pushd xs
      perl Build.PL
      perl Build
    popd

    perl Build.PL
  '';

  installPhase = ''
    mkdir -p "$out/share/slic3r/"
    cp -r * "$out/share/slic3r/"
    wrapProgram "$out/share/slic3r/slic3r.pl" \
      --prefix PERL5LIB : "$out/share/slic3r/xs/blib/arch:$out/share/slic3r/xs/blib/lib:$PERL5LIB"
    mkdir -p "$out/bin"
    ln -s "$out/share/slic3r/slic3r.pl" "$out/bin/slic3r"
    mkdir -p "$out/share/pixmaps/"
    ln -s "$out/share/slic3r/var/Slic3r.png" "$out/share/pixmaps/slic3r.png"
    mkdir -p "$out/share/applications"
    cp "$desktopItem"/share/applications/* "$out/share/applications/"
  '';

  meta = with stdenv.lib; {
    description = "G-code generator for 3D printers";
    longDescription = ''
      Slic3r is the tool you need to convert a digital 3D model into printing
      instructions for your 3D printer. It cuts the model into horizontal
      slices (layers), generates toolpaths to fill them and calculates the
      amount of material to be extruded.'';
    homepage = http://slic3r.org/;
    license = licenses.agpl3;
    platforms = platforms.linux;
    maintainers = with maintainers; [ bjornfor the-kenny ];
  };
}
