{
  lib,
  config,
  namespace,
  pkgs,
  ...
}:
let
  inherit (lib) mkIf;
  inherit (lib.${namespace}) mkEnableModule enabled;

  cfg = config.${namespace}.programs.bat;
  inherit (config.${namespace}) theme;
in
{
  options = mkEnableModule "programs.bat";

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

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

      "${theme.colors.base}" = enabled;

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

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

    programs.fish = lib.mkIf config.programs.fish.enable {
      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";
      };
    };
  };
}