{
  lib,
  config,
  pkgs,
  ...
}:
let
  inherit (lib) mkEnableOption mkIf;
  inherit (lib.marleyos) enabled;

  cfg = config.marleyos.programs.bat;
  inherit (config.marleyos.theme) colors;
in
{
  options.marleyos.programs.bat.enable = mkEnableOption "bat";

  config = mkIf cfg.enable {
    programs.bat = {
      enable = true;

      extraPackages = with pkgs.bat-extras; [
        batdiff
        batman
      ];

      rose-pine = mkIf colors.isRosePine enabled;

      config = {
        style = "auto";
      };
    };

    home.sessionVariables = lib.mkIf config.programs.git.delta.enable {
      BATDIFF_USE_DELTA = "true";
    };

    programs.fish = {
      functions = {
        cat = {
          wraps = "bat";
          body = # fish
            "bat $argv";
        };

        cath = {
          wraps = "bat";
          body = # fish
            "bat --plain --language=help $argv";
        };
      };
    };

    home.shellAbbrs = {
      B = {
        position = "anywhere";
        setCursor = true;
        expansion = # fish
          "% | bat";
      };

      "-h" = {
        position = "anywhere";
        expansion = # fish
          "-h | cath";
      };

      "--help" = {
        position = "anywhere";
        expansion = # fish
          "--help | cath";
      };

      help = {
        position = "anywhere";
        expansion = # fish
          "help | cath";
      };
    };
  };
}
