{ fetchurl, lib, stdenv, makeWrapper, perl, perlPackages }:

stdenv.mkDerivation rec {
  pname = "dirvish";
  version = "1.2.1";

  src = fetchurl {
    url = "http://dirvish.org/dirvish${version}.tgz";
    sha256 = "6b7f29c3541448db3d317607bda3eb9bac9fb3c51f970611ffe27e9d63507dcd";
  };

  nativeBuildInputs = [ makeWrapper ];
  buildInputs = [ perl ] ++ (with perlPackages; [ GetoptLong TimeParseDate TimePeriod ]);

  executables = [ "dirvish" "dirvish-runall" "dirvish-expire" "dirvish-locate" ];
  manpages = [ "dirvish.8" "dirvish-runall.8" "dirvish-expire.8" "dirvish-locate.8" "dirvish.conf.5" ];

  buildPhase = ''
    HEADER="#!${perl}/bin/perl

    \$CONFDIR = \"/etc/dirvish\";

    "

    for executable in $executables; do
      (
        echo "$HEADER"
        cat $executable.pl loadconfig.pl
      ) > $executable
      chmod +x $executable
    done
  '';

  installPhase = ''
    mkdir -p $out/bin
    cp --target-directory=$out/bin $executables

    for manpage in $manpages; do
      if [[ $manpage =~ \.([[:digit:]]+)$ ]]; then
        section=''${BASH_REMATCH[1]}
        mkdir -p $out/man/man$section
        cp --target-directory=$out/man/man$section $manpage
      else
        echo "Couldn't determine man page section by filename"
        exit 1
      fi
    done
  '';

  postFixup = ''
    for executable in $executables; do
      wrapProgram $out/bin/$executable \
        --set PERL5LIB "$PERL5LIB"
    done
  '';

  meta = with lib; {
    description = "Fast, disk based, rotating network backup system";
    homepage = "http://dirvish.org/";
    license = lib.licenses.osl2;
    platforms = platforms.linux;
    maintainers = [ maintainers.winpat ];
  };
}
