{
  lib,
  autoPatchelfHook,
  fetchurl,
  fontconfig,
  freetype,
  glib,
  libgcc,
  libjpeg,
  libpng12,
  libz,
  makeWrapper,
  stdenvNoCC,
  unrar,
  xorg,
}:

let
  rarPassword = "spflashtool.com";
in

stdenvNoCC.mkDerivation (self: {
  pname = "SPFlashTool5";
  version = "5.1916";
  src = fetchurl {
    url = "https://spflashtool.com/files/SP_Flash_Tool-5.1916_Linux.rar";
    hash = "sha256-5lv/uPfUoke0IwjGuV/gTBt4kCbr95mwco3q9cjW/mE=";
    curlOptsList = [
      "--referer" "https://spflashtool.com/download/"
    ];
  };
  nativeBuildInputs = [
    autoPatchelfHook
    fontconfig
    freetype
    glib
    libgcc
    libjpeg
    libpng12
    libz
    makeWrapper
    unrar
    xorg.libSM
    xorg.libX11
    xorg.libXext
    xorg.libXrender
  ];
  unpackPhase = ''
    runHook preUnpack

    unrar x -p${lib.escapeShellArg rarPassword} $src
    cd */

    runHook postUnpack
  '';
  # remove plugins that have outdated dependencies not available in nixpkgs
  # they are not needed to run the tool anyway
  prePatch = ''
    rm \
      plugins/imageformats/libqsvg.so \
      plugins/imageformats/libqmng.so \
      plugins/imageformats/libqtiff.so
  '';
  dontConfigure = true;
  dontBuild = true;
  dontCheck = true;
  installPhase = ''
    runHook preInstall

    mkdir -p $out/bin
    mkdir -p $out/share/SPFlashTool5
    cp -r * $out/share/SPFlashTool5
    chmod +x $out/share/SPFlashTool5/flash_tool
    makeWrapper $out/share/SPFlashTool5/flash_tool $out/bin/SPFlashTool5

    runHook postInstall
  '';
  meta = {
    description = "Flash tool for MediaTek devices";
    homepage = "https://spflashtool.com/";
    license = lib.licenses.unfree;
    maintainers = with lib.maintainers; [ amozeo ];
  };
})