nixfiles: final: prev:
let
  pkgs-unstable = import nixfiles.inputs.nixpkgs-unstable { config.allowUnfree = true; inherit (final) system; };
  inherit (final) callPackage kdePackages lib;

  backport = let
    _callPackage = callPackage;
  in {  pkgname,
        callPackage ? _callPackage,
        new ? pkgs-unstable,
        override ? {} } : let
    inherit (lib) getAttrFromPath;
    inherit (builtins) getAttr isString;

    getAttr' = name: attrs: if isString pkgname then getAttr name attrs else getAttrFromPath name attrs;
    oldPkg = getAttr' pkgname prev;
    newPkg = getAttr' pkgname pkgs-unstable;
  in if oldPkg.version == newPkg.version
    then oldPkg
    else (callPackage newPkg.override) override;

  backport' = pkgname: backport { inherit pkgname; };

  # defined locally to not pull in perl from unstable
  stripJavaArchivesHook = final.makeSetupHook {
    name = "strip-java-archives-hook";
    propagatedBuildInputs = [ final.strip-nondeterminism ];
  } ./strip-java-archives.sh;

in {
  vesktop = backport' "vesktop";
  obsidian = backport { pkgname="obsidian"; override.electron = final.electron_28; };
  prismlauncher-unwrapped = backport {
    pkgname = "prismlauncher-unwrapped";
    inherit (kdePackages) callPackage;
    override = {
      # apple something idk why the package doesn't just ask for darwin and get it itself
      # maybe i should make a pull request that changes the params to `darwin, Cocoa ? darwin.apple_sdk.frameworks.Cocoa`
      inherit (final.darwin.apple_sdk.frameworks) Cocoa;
    };
  };
}