{
  config,
  pkgs,
  lib,
  ...
}:
let
  inherit (config.my)
    key
    theme
    accent
    font
    ;
  inherit (theme) color;
in
{
  config = {
    programs.alacritty = {
      enable = true;
      settings = {
        font = {
          size = font.size.small;
          normal = {
            family = font.mono;
          };
        };
        colors = {
          primary = {
            background = "${color.bg}";
            foreground = "${color.txt}";
          };
          cursor = {
            text = "#000000";
            cursor = "${accent.color}";
          };
          normal = {
            black = "${color.normal.black}";
            red = "${color.normal.red}";
            green = "${color.normal.green}";
            yellow = "${color.normal.yellow}";
            blue = "${color.normal.blue}";
            magenta = "${color.normal.magenta}";
            cyan = "${color.normal.cyan}";
            white = "${color.normal.white}";
          };
          draw_bold_text_with_bright_colors = false;
        };
        window = {
          opacity = theme.opacity / 100.0;
          dynamic_padding = true;
        };

        hints = {
          alphabet = key.hints;
          enabled = [
            {
              regex =
                let
                  mimes = "(mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)";
                  # I fucking hate regex, look at this bullshit
                  delimiters = ''^\\u0000-\\u001F\\u007F-\\u009F<>"\\s{-}\\^⟨⟩`'';
                  # Kakoune uses these characters to represent whitespace,
                  # but alacritty doesn't know about them
                  whitespace_characters = ''¬·→'';
                in
                "${mimes}[${delimiters}${whitespace_characters}]+";
              command = "xdg-open";
              post_processing = true;
              mouse = {
                enabled = true;
                mods = "None";
              };
              binding = {
                key = "U";
                mods = "Control|Shift";
              };
            }
          ];
        };
        mouse = {
          hide_when_typing = true;
        };
        keyboard.bindings = [
          {
            key = lib.toUpper key.up;
            mode = "Vi|~Search";
            action = "Up";
          }
          {
            key = lib.toUpper key.down;
            mode = "Vi|~Search";
            action = "Down";
          }
          {
            key = lib.toUpper key.left;
            mode = "Vi|~Search";
            action = "Left";
          }
          {
            key = lib.toUpper key.right;
            mode = "Vi|~Search";
            action = "Right";
          }
          {
            key = lib.toUpper key.insertMode;
            mode = "Vi|~Search";
            action = "ScrollToBottom";
          }
          {
            key = lib.toUpper key.insertMode;
            mode = "Vi|~Search";
            action = "ToggleViMode";
          }
          {
            key = lib.toUpper key.next;
            mode = "Vi|~Search";
            action = "SearchNext";
          }
          {
            key = lib.toUpper key.next;
            mods = "Shift";
            mode = "Vi|~Search";
            action = "SearchPrevious";
          }
          {
            key = "Up";
            mods = "Control|Shift";
            mode = "~Alt";
            action = "ScrollLineUp";
          }
          {
            key = "Down";
            mods = "Control|Shift";
            mode = "~Alt";
            action = "ScrollLineDown";
          }
          {
            key = "PageUp";
            mods = "Control|Shift";
            mode = "~Alt";
            action = "ScrollHalfPageUp";
          }
          {
            key = "PageDown";
            mods = "Control|Shift";
            mode = "~Alt";
            action = "ScrollHalfPageDown";
          }
          {
            key = "N";
            mods = "Control|Shift";
            action = "SpawnNewInstance";
          }
          # {%@@ if key.layout == "colemak" @@%}
          {
            key = "T";
            mode = "Vi|~Search";
            action = "SemanticRightEnd";
          }
          # {%@@ endif @@%}
        ];
      };
    };

    home.sessionVariables = {
      TERMINAL = "alacritty";
    };

    # Look at this fucking bullshit:
    # https://gitlab.gnome.org/GNOME/glib/-/blob/20c4fcb2a7246a2b205649eae3ebda4296217afc/gio/gdesktopappinfo.c#L2702
    # Theres a fucking hard coded list of terminals!
    home.packages = with pkgs; [
      (pkgs.writeShellScriptBin "gnome-terminal" ''
        [ "$1" = "--" ] && shift
        exec terminal -e "$@"
      '')
    ];
  };
}
