{ lib
, fetchFromGitHub
, python3Packages
, gnupg
, installShellFiles
}:

let
  pname = "apt-offline";
  version = "1.8.5";

  src = fetchFromGitHub {
    owner = "rickysarraf";
    repo = "apt-offline";
    rev = "v${version}";
    hash = "sha256-KkJwQ9EpOSJK9PaM747l6Gqp8Z8SWvuo3TJ+Ry6d0l4=";
  };
in
python3Packages.buildPythonApplication {
  inherit pname version src;

  nativeBuildInputs = [ installShellFiles ];

  postPatch = ''
    substituteInPlace org.debian.apt.aptoffline.policy \
      --replace-fail /usr/bin/ "$out/bin"

    substituteInPlace apt_offline_core/AptOfflineCoreLib.py \
      --replace-fail /usr/bin/gpgv "${lib.getBin gnupg}/bin/gpgv"
  '';

  postInstall = ''
    installManPage apt-offline.8
  '';

  postFixup = ''
    rm "$out/bin/apt-offline-gui" "$out/bin/apt-offline-gui-pkexec"
  '';

  doCheck = false; # API incompatibilities, maybe?

  pythonImportsCheck = [ "apt_offline_core" ];

  outputs = [ "out" "man" ];

  meta = {
    homepage = "https://github.com/rickysarraf/apt-offline";
    description = "Offline APT package manager";
    license = with lib.licenses; [ gpl3Plus ];
    mainProgram = "apt-offline";
    maintainers = with lib.maintainers; [ ];
  };
}
# TODO: verify GUI and pkexec