{
  bzip2,
  cabextract,
  dmg2img,
  dtc,
  dumpifs,
  enableUnfree ? false,
  fetchFromGitHub,
  fontconfig,
  gnutar,
  jefferson,
  lib,
  lzfse,
  lzo,
  lzop,
  lz4,
  openssl_3,
  pkg-config,
  python3,
  rustPlatform,
  sasquatch,
  sleuthkit,
  srec2bin,
  stdenv,
  ubi_reader,
  ucl,
  uefi-firmware-parser,
  unrar,
  unyaffs,
  unzip,
  versionCheckHook,
  vmlinux-to-elf,
  xz,
  zlib,
  zstd,
  _7zz,
}:

rustPlatform.buildRustPackage rec {
  pname = "binwalk";
  version = "3.1.0";

  src = fetchFromGitHub {
    owner = "ReFirmLabs";
    repo = "binwalk";
    tag = "v${version}";
    hash = "sha256-em+jOnhCZH5EEJrhXTHmxiwpMcBr5oNU1+5IJ1H/oco=";
  };

  useFetchCargoVendor = true;
  cargoHash = "sha256-cnJVeuvNNApEHqgZDcSgqkH3DKAr8+HkqXUH9defTCA=";

  nativeBuildInputs = [ pkg-config ];

  # https://github.com/ReFirmLabs/binwalk/commits/master/dependencies
  buildInputs = [
    bzip2
    cabextract
    dmg2img
    dtc
    dumpifs
    fontconfig
    gnutar
    jefferson
    lzfse
    lzo
    lzop
    lz4
    openssl_3
    python3.pkgs.python-lzo
    sasquatch
    sleuthkit
    srec2bin
    ubi_reader
    ucl
    uefi-firmware-parser
    unyaffs
    unzip
    vmlinux-to-elf
    xz
    zlib
    zstd
    _7zz
  ] ++ lib.optionals enableUnfree [ unrar ];

  # skip broken tests
  checkFlags =
    [
      "--skip=binwalk::Binwalk"
      "--skip=binwalk::Binwalk::scan"
    ]
    ++ lib.optionals stdenv.hostPlatform.isLinux [
      "--skip=binwalk::Binwalk::analyze"
      "--skip=binwalk::Binwalk::extract"
    ]
    ++ lib.optionals stdenv.hostPlatform.isDarwin [
      "--skip=extractors::common::Chroot::append_to_file"
      "--skip=extractors::common::Chroot::carve_file"
      "--skip=extractors::common::Chroot::create_block_device"
      "--skip=extractors::common::Chroot::create_character_device"
      "--skip=extractors::common::Chroot::create_directory"
      "--skip=extractors::common::Chroot::create_fifo"
      "--skip=extractors::common::Chroot::create_file"
      "--skip=extractors::common::Chroot::create_socket"
      "--skip=extractors::common::Chroot::create_symlink"
      "--skip=extractors::common::Chroot::make_executable"
    ];

  nativeInstallCheckInputs = [ versionCheckHook ];
  doInstallCheck = true;
  versionCheckProgramArg = "-V";

  meta = {
    description = "Firmware Analysis Tool";
    homepage = "https://github.com/ReFirmLabs/binwalk";
    changelog = "https://github.com/ReFirmLabs/binwalk/releases/tag/v${version}";
    license = lib.licenses.mit;
    platforms = lib.platforms.unix;
    maintainers = with lib.maintainers; [
      koral
      felbinger
    ];
    mainProgram = "binwalk";
  };
}