{ buildEnv, lib, callPackage, makeWrapper, makeDesktopItem }:

let
  description = "Action-adventure game, starring a certain quixotic frog";
  engine = callPackage ./engine.nix { };
  data = callPackage ./data.nix { };
  desktopItem = makeDesktopItem {
    name = "frogatto";
    exec = "frogatto";
    startupNotify = true;
    icon = "${data}/share/frogatto/modules/frogatto/images/os/frogatto-icon.png";
    comment = description;
    desktopName = "Frogatto";
    genericName = "frogatto";
    categories = [ "Game" "ArcadeGame" ];
  };
  inherit (data) version;
in buildEnv {
  name = "frogatto-${version}";

  nativeBuildInputs = [ makeWrapper ];
  paths = [ engine data desktopItem ];
  pathsToLink = [
    "/bin"
    "/share/frogatto/data"
    "/share/frogatto/images"
    "/share/frogatto/modules"
    "/share/applications"
  ];

  postBuild = ''
    wrapProgram $out/bin/frogatto \
      --chdir "$out/share/frogatto"
  '';

  meta = with lib; {
    homepage = "https://frogatto.com";
    description = description;
    license = with licenses; [ cc-by-30 unfree ];
    platforms = platforms.linux;
    maintainers = with maintainers; [ astro ];
  };
}
