{ stdenv
, lib
, libusb1
, installShellFiles
, fetchFromGitHub
, pkg-config
}:

stdenv.mkDerivation (finalAttrs: {
  pname = "mouse_m908";
  version = "3.4";

  src = fetchFromGitHub {
    owner = "dokutan";
    repo = "mouse_m908";
    rev = "v${finalAttrs.version}";
    hash = "sha256-sCAvjNpJYkp4G0KkDJtHOBR1vc80DZJtWR2W9gakkzQ=";
  };

  nativeBuildInputs = [ pkg-config installShellFiles ];

  buildInputs = [ libusb1 ];

  # Uses proper nix directories rather than the ones specified in the makefile
  installPhase = ''
    runHook preInstall

    mkdir -p $out/bin \
      $out/share/doc \
      $out/share/doc/mouse_m908 \
      $out/lib/udev/rules.d

    cp mouse_m908 $out/bin/mouse_m908
    cp mouse_m908.rules $out/lib/udev/rules.d
    cp examples/* $out/share/doc/mouse_m908
    cp README.md $out/share/doc/mouse_m908
    cp keymap.md $out/share/doc/mouse_m908
    installManPage mouse_m908.1

    runHook postInstall
  '';

  meta = {
    homepage = "https://github.com/dokutan/mouse_m908";
    description = "Control various Redragon gaming mice from Linux, BSD and Haiku";
    mainProgram = "mouse_m908";
    license = lib.licenses.gpl3Plus;
    platforms = [ "x86_64-linux" ];
    maintainers = with lib.maintainers; [ kylelovestoad ];
  };
})