{
  lib,
  fetchFromGitHub,
  glib,
  gst_all_1,
  iproute2,
  libtool,
  makeBinaryWrapper,
  meson,
  miraclecast,
  ninja,
  pkg-config,
  readline,
  stdenv,
  systemdLibs,
  testers,
  udev,
  wpa_supplicant,
  relyUdev ? true,
}:

let
  gstreamerPluginPaths = lib.concatMapStrings (pth: pth + "/lib/gstreamer-1.0:") [
    (lib.getLib gst_all_1.gstreamer)
    gst_all_1.gst-libav
    gst_all_1.gst-plugins-bad
    gst_all_1.gst-plugins-base
    gst_all_1.gst-plugins-good
  ];
in
stdenv.mkDerivation {
  pname = "miraclecast";
  version = "1.0-unstable-2024-07-13";

  src = fetchFromGitHub {
    owner = "albfan";
    repo = "miraclecast";
    rev = "937747fd4de64a33bccf5adb73924c435ceb821b";
    hash = "sha256-y37+AOz8xYjtDk9ITxMB7UeWeMpDH+b6HQBczv+x5zo=";
  };

  nativeBuildInputs = [
    makeBinaryWrapper
    meson
    ninja
    pkg-config
  ];

  buildInputs = [
    glib
    gst_all_1.gstreamer
    iproute2
    libtool
    readline
    systemdLibs
    udev
    wpa_supplicant
  ];

  mesonFlags =
    [
      "-Dbuild-tests=true"
      "-Dip-binary=${iproute2}/bin/ip"
    ]
    ++ lib.optionals relyUdev [
      "-Drely-udev=true"
    ];

  postPatch = ''
    substituteInPlace res/miracle-gst \
      --replace-fail "/usr/bin/gst-launch-1.0" "${gst_all_1.gstreamer}/bin/gst-launch-1.0"
  '';

  postInstall = ''
    wrapProgram $out/bin/miracle-gst --set GST_PLUGIN_SYSTEM_PATH_1_0 ${gstreamerPluginPaths}
  '';

  passthru.tests.version = testers.testVersion {
    package = miraclecast;
    command = "miracled --version";
    version = "Miraclecast 1";
  };

  meta = with lib; {
    description = "Connect external monitors to your system via Wifi-Display specification also known as Miracast";
    homepage = "https://github.com/albfan/miraclecast";
    license = licenses.lgpl21Plus;
    maintainers = [ maintainers.wizardlink ];
    platforms = platforms.linux;
  };
}
