{ config, pkgs, lib, ... }:
let inherit (import ./variables.nix) key theme color accent font;
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{-}\\^⟨⟩`'';
              in
              "${mimes}[${delimiters}]+";
            command = "xdg-open";
            post_processing = true;
            mouse = {
              enabled = true;
              mods = "None";
            };
            binding = {
              key = "U";
              mods = "Control|Shift";
            };
          }];
        };
        mouse = { hide_when_typing = true; };
        key_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 = "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 @@%}
        ];
      };
    };
  };
}
