{
  lib,
  config,
  ...
}:
lib.mkMerge [
  {
    programs.foot = {
      enable = true;
      server.enable = true;
      settings = {
        main = {
          term = "xterm-direct";
          login-shell = "yes";
          dpi-aware = "no";
          horizontal-letter-offset = "1";
          pad = "1x1";
          font =
            let
              size = "13";
            in
            lib.mkForce (
              lib.concatStringsSep ", " [
                "Iosevka Comfy:size=${size}"
                "Symbols Nerd Font:size=${size}"
                "JoyPixels:size=${size}"
              ]
            );
        };
        cursor = {
          blink = true;
        };
        tweak = {
          overflowing-glyphs = true;
        };

        key-bindings = {
          scrollback-up-page = "Control+Shift+k";
          scrollback-down-page = "Control+Shift+j";
          search-start = "Control+Shift+s";
          pipe-command-output = ''[sh -c 'f=$(mktemp); cat - > $f; footclient hx $f; rm $f'] Control+Shift+g'';
        };

        mouse = {
          hide-when-typing = "yes";
        };
      };
    };
  }
  (lib.mkIf config.programs.fish.enable {
    programs.fish.functions = {
      mark_prompt_start = {
        body = ''echo -en "\e]133;A\e\\"'';
        onEvent = "fish_prompt";
      };
      foot_cmd_start = {
        body = ''echo -en "\e]133;C\e\\"'';
        onEvent = "fish_preexec";
      };
      foot_cmd_end = {
        body = ''echo -en "\e]133;D\e\\"'';
        onEvent = "fish_postexec";
      };
    };
  })
]