{ lib, stdenv, fetchurl, go }:

stdenv.mkDerivation rec {
  name = "minio-client-${shortVersion}";

  shortVersion = "20170206";
  longVersion = "2017-02-06T20-16-19Z";

  src = fetchurl {
    url = "https://github.com/minio/mc/archive/RELEASE.${lib.replaceStrings [":"] ["-"] longVersion}.tar.gz";
    sha256 = "0k66kr7x669jvydcxp3rpvg8p9knhmcihpnjiqynhqgrdy16mr1f";
  };

  buildInputs = [ go ];

  unpackPhase = ''
    d=$TMPDIR/src/github.com/minio/mc
    mkdir -p $d
    tar xf $src -C $d --strip-component 1
    export GOPATH=$TMPDIR
    cd $d
  '';

  buildPhase = ''
    mkdir -p $out/bin
    go build -o $out/bin/minio-client \
      --ldflags "-X github.com/minio/mc/cmd.Version=${longVersion}"
  '';

  installPhase = "ln -s minio-client $out/bin/mc";

  meta = {
    homepage = https://github.com/minio/mc;
    description = "A replacement for ls, cp, mkdir, diff and rsync commands for filesystems and object storage";
    maintainers = [ lib.maintainers.eelco ];
    platforms = lib.platforms.linux;
    license = lib.licenses.asl20;
  };
}