{
  stdenv,
  lib,
  python3Packages,
  fetchFromGitHub,
  pkg-config,
  cmake,
  libsamplerate,
  fftwFloat,
  rtl-sdr,
  soapysdr-with-plugins,
  csdr,
  direwolf,
  sox,
  wsjtx,
  codecserver,
  versionCheckHook,
}:

let

  js8py = python3Packages.buildPythonPackage rec {
    pname = "js8py";
    version = "0.1.1";
    format = "setuptools";

    src = fetchFromGitHub {
      owner = "jketterl";
      repo = "js8py";
      tag = version;
      hash = "sha256-nAj8fI4MkAKr+LjvJQbz7Px8TVAYA9AwZYWy8Cj7AMk=";
    };

    pythonImportsCheck = [
      "js8py"
      "test"
    ];

    meta = {
      homepage = "https://github.com/jketterl/js8py";
      description = "Library to decode the output of the js8 binary of JS8Call";
      license = lib.licenses.gpl3Only;
    };
  };

  owrx_connector = stdenv.mkDerivation rec {
    pname = "owrx_connector";
    version = "0.6.0";

    src = fetchFromGitHub {
      owner = "jketterl";
      repo = "owrx_connector";
      tag = version;
      hash = "sha256-1H0TJ8QN3b6Lof5TWvyokhCeN+dN7ITwzRvEo2X8OWc=";
    };

    postPatch = ''
      substituteInPlace CMakeLists.txt --replace-fail \
        "cmake_minimum_required (VERSION 3.0)" \
        "cmake_minimum_required (VERSION 3.10)"
    '';

    nativeBuildInputs = [
      cmake
      pkg-config
    ];

    buildInputs = [
      libsamplerate
      fftwFloat
      csdr
      rtl-sdr
      soapysdr-with-plugins
    ];

    nativeInstallCheckInputs = [ versionCheckHook ];
    versionCheckProgram = "${placeholder "out"}/bin/rtl_connector";
    doInstallCheck = true;

    meta = {
      homepage = "https://github.com/jketterl/owrx_connector";
      description = "Set of connectors that are used by OpenWebRX to interface with SDR hardware";
      license = lib.licenses.gpl3Only;
      platforms = lib.platforms.unix;
    };
  };

in
python3Packages.buildPythonApplication rec {
  pname = "openwebrx";
  version = "1.2.2";
  format = "setuptools";

  src = fetchFromGitHub {
    owner = "jketterl";
    repo = "openwebrx";
    tag = version;
    hash = "sha256-i3Znp5Sxs/KtJazHh2v9/2P+3cEocWB5wIpF7E4pK9s=";
  };

  dependencies =
    with python3Packages;
    [
      setuptools
      csdr
      pycsdr
      pydigiham
    ]
    ++ [
      js8py
      soapysdr-with-plugins
      owrx_connector
      direwolf
      sox
      wsjtx
      codecserver
    ];

  pythonImportsCheck = [
    "csdr"
    "owrx"
    "test"
  ];

  nativeInstallCheckInputs = [ versionCheckHook ];
  doInstallCheck = true;

  passthru = {
    inherit js8py owrx_connector;
  };

  meta = {
    homepage = "https://github.com/jketterl/openwebrx";
    description = "Simple DSP library and command-line tool for Software Defined Radio";
    mainProgram = "openwebrx";
    license = lib.licenses.gpl3Only;
    # Hasn't been updated in a long time, and is broken since 2026-07-14
    broken = true;
  };
}
