{
  lib,
  pkgs,
  ...
}: {
  nixpkgs.overlays = [
    (
      self: super: {
        ranger = super.ranger.overrideAttrs (oldAttrs: rec {
          preConfigure = ''
            substituteInPlace ranger/__init__.py \
              --replace "DEFAULT_PAGER = 'less'" "DEFAULT_PAGER = '${lib.getBin pkgs.less}/bin/less'"

            # give image previews out of the box when building with w3m
            substituteInPlace ranger/config/rc.conf \
              --replace "set preview_images false" "set preview_images true"

            # adds this patch: https://github.com/ranger/ranger/pull/1758
            # fixes a bug for kitty users that use image previews
            substituteInPlace ranger/ext/img_display.py \
              --replace "self.image_id -= 1" "self.image_id = max(0, self.image_id - 1)"

            # fixes the .desktop file
            substituteInPlace doc/ranger.desktop \
              --replace "Terminal=true" "Terminal=false"
            substituteInPlace doc/ranger.desktop \
              --replace "Exec=ranger" "Exec=kitty -e ranger %U"
          '';
        });
      }
    )
  ];
}
