{config, ...}: {
  programs.alacritty = {
    enable = true;
    settings = {
      env = {
        TERM = "alacritty";
      };
      window = {
        dimensionns = {
          columns = 0;
          lines = 0;
        };

        positinon = {
          #x = 0;
          #y = 0;
        };

        padding = {
          x = 5;
          y = 5;
        };

        dynamic_padding = false;
        decorations = "None";
        opacity = 0.9;
        startup_mode = "Windowed";
        title = "Alacritty";
        dynamic_title = true;
        class = {
          instance = "Alacritty";
          general = "Alacritty";
        };
        docorations_theme_variant = "None";
      };

      scrolling = {
        history = 10000;
        multiplier = 3;
      };

      font = {
        normal = {
          family = "Source Code Pro";
          style = "Regular";
        };
        bold = {
          family = "Source Code Pro";
          style = "Bold";
        };
        italic = {
          family = "Source Code Pro";
          style = "Italic";
        };
        bold_italic = {
          family = "Source Code Pro";
          style = "Bold Italic";
        };
        size = 12.0;
        offset = {
          x = -1;
          y = -1;
        };
        glyph_offset = {
          x = -1;
          y = -1;
        };
        builtin_box_drawing = true;
      };

      draw_bold_text_with_bright_colors = false;

      colors = {
        primary = {
          background = "#191919";
          foreground = "#d8dee9";
          #dim_foreground= "#828482";
          #bright_foreground= "#eaeaea";

          cursor = {
            text = "#191919";
            cursor = "#d8dee9";
          };
          vi_mode_cursor = {
            text = "CellBackground";
            cursor = "CellForeground";
          };
          search = {
            matches = {
              foreground = "#000000";
              background = "#ffffff";
            };
            focused_match = {
              foreground = "#ffffff";
              background = "#000000";
            };
          };

          hints = {
            start = {
              foreground = "#1d1f21";
              background = "#e9ff5e";
            };

            end = {
              foreground = "#e9ff5e";
              background = "#1d1f21";
            };
            line_indicator = {
              #foreground= "None";
              #background= "None";
            };

            footer_bar = {
              background = "#c5c8c6";
              foreground = "#1d1f21";
            };

            selection = {
              text = "#191919";
              background = "#d8dee9";
            };

            normal = {
              black = "#191919";
              red = "#b02626";
              green = "#40a62f";
              yellow = "#f2e635";
              blue = "#314ad0";
              magenta = "#b30ad0";
              cyan = "#32d0fc";
              white = "#acadb1";
            };
            bright = {
              black = "#36393d";
              red = "#ce2727";
              green = "#47c930";
              yellow = "#fff138";
              blue = "#2e4bea";
              magenta = "#cc15ed";
              cyan = "#54d9ff";
              white = "#dbdbdb";
            };

            dim = {
              black = "#676f78";
              red = "#b55454";
              green = "#78a670";
              yellow = "#faf380";
              blue = "#707fd0";
              magenta = "#c583d0";
              cyan = "#8adaf1";
              white = "#e0e3e7";
            };

            #indexed_colors = [
            #        {index = 16; color = "#ff00ff";}
            #    ];
            transparent_background_colors = false; # TODO
          };
        };

        bell = {
          animation = "EaseOutExpo";
          duration = 0;
          color = "#ffffff";
          command = "None";
        };

        selection = {
          semantic_escape_chars = ",│`|:\"' ()[]{}<>\t";
          save_to_clipboard = false;
        };

        cursor = {
          style = {
            shape = "Beam";
            blinking = "On";
          };
          vi_mode_style = "None";
          blink_interval = 750;
          blink_timeout = 5;
          unfocused_hollow = true;
          thickness = 0.15;
        };
        live_config_reload = true;

        #shell = {
        #    program = "/bin/sh";
        #    args = ["--login"];
        #}

        working_directory = "None";

        ipc_socket = true; # TODO

        mouse = {
          hide_when_typing = false;
          double_click.threshold = 300;
          triple_click.threshold = 300;
        };

        hints = {
          alphabet = "jfkdls;ahgurieowpq";
          enabled = [
            {
              regex = "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\
           [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+";
              hyperlinks = true;
              command = "xdg-open";
              post_processing = true;
              mouse = {
                enabled = true;
                mods = "None";
              };
              binding = {
                key = "U";
                mods = "Control|Shift";
              };
            }

            {
              # multi regex for different purposes:
              # 2. UUIDs
              # 3. hex (for example signatures)
              # 4. IP addresses
              regex = "([[:alnum:]_$%&+=/@-]+)|([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})|([0-9a-f]{12,128})|([[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3})";
              action = "Copy";
              post_processing = false;
              binding = {
                key = "U";
                mods = "Control|Shift";
              };
            }
          ];

          mouse_bindings = [
            #   { mouse =  "Right";                 action =  "ExpandSelection" ;}
            #   { mouse =  "Right";  mods =  "Control"; action =  "ExpandSelection" ;}
            #   { mouse =  "Middle"; mode =  "~Vi";     action =  "PasteSelection"  ;}
            {
              mouse = "Middle";
              action = "Copy";
            }
          ];

          key_bindings = [
            # (Windows, Linux, and BSD only)
            {
              key = "P";
              mods = "Control";
              action = "Paste";
            }
            {
              key = "Insert";
              mods = "Shift";
              action = "Paste";
            }
            {
              key = "Slash";
              mods = "Control";
              chars = "gc";
            }
            {
              key = "Y";
              mods = "Control";
              action = "Copy";
            }
            {
              key = "Key0";
              mods = "Control";
              action = "ResetFontSize";
            }
            {
              key = "Equals";
              mods = "Control";
              action = "IncreaseFontSize";
            }
            {
              key = "Plus";
              mods = "Control";
              action = "IncreaseFontSize";
            }
            {
              key = "Minus";
              mods = "Control";
              action = "DecreaseFontSize";
            }
            # Vi Mode
            {
              key = "Space";
              mods = "Control";
              action = "ToggleViMode";
            }
            {
              key = "Space";
              mods = "Control";
              mode = "Vi";
              action = "ScrollToBottom";
            }
            {
              key = "I";
              mode = "Vi";
              action = "ScrollToBottom";
            }
            {
              key = "I";
              mode = "Vi";
              action = "ToggleViMode";
            }
            {
              key = "C";
              mods = "Control";
              mode = "Vi";
              action = "ScrollToBottom";
            }
            {
              key = "C";
              mods = "Control";
              mode = "Vi";
              action = "ToggleViMode";
            }
            {
              key = "Escape";
              mode = "Vi";
              action = "ClearSelection";
            }
            {
              key = "Y";
              mods = "Control";
              mode = "Vi";
              action = "ScrollLineUp";
            }
            {
              key = "E";
              mods = "Control";
              mode = "Vi";
              action = "ScrollLineDown";
            }
            {
              key = "G";
              mode = "Vi";
              action = "ScrollToTop";
            }
            {
              key = "G";
              mods = "Shift";
              mode = "Vi";
              action = "ScrollToBottom";
            }
            {
              key = "B";
              mods = "Control";
              mode = "Vi";
              action = "ScrollPageUp";
            }
            {
              key = "F";
              mods = "Control";
              mode = "Vi";
              action = "ScrollPageDown";
            }
            {
              key = "U";
              mods = "Control";
              mode = "Vi";
              action = "ScrollHalfPageUp";
            }
            {
              key = "D";
              mods = "Control";
              mode = "Vi";
              action = "ScrollHalfPageDown";
            }
            {
              key = "Y";
              mode = "Vi";
              action = "Copy";
            }
            {
              key = "Y";
              mode = "Vi";
              action = "ClearSelection";
            }
            {
              key = "V";
              mode = "Vi";
              action = "ToggleNormalSelection";
            }
            {
              key = "V";
              mods = "Shift";
              mode = "Vi";
              action = "ToggleLineSelection";
            }
            {
              key = "V";
              mods = "Control";
              mode = "Vi";
              action = "ToggleBlockSelection";
            }
            {
              key = "V";
              mods = "Alt";
              mode = "Vi";
              action = "ToggleSemanticSelection";
            }
            {
              key = "Return";
              mode = "Vi";
              action = "Open";
            }
            {
              key = "K";
              mode = "Vi";
              action = "Up";
            }
            {
              key = "J";
              mode = "Vi";
              action = "Down";
            }
            {
              key = "H";
              mode = "Vi";
              action = "Left";
            }
            {
              key = "L";
              mode = "Vi";
              action = "Right";
            }
            {
              key = "Up";
              mode = "Vi";
              action = "Up";
            }
            {
              key = "Down";
              mode = "Vi";
              action = "Down";
            }
            {
              key = "Left";
              mode = "Vi";
              action = "Left";
            }
            {
              key = "Right";
              mode = "Vi";
              action = "Right";
            }
            {
              key = "Key0";
              mode = "Vi";
              action = "First";
            }
            {
              key = "Key4";
              mode = "Vi";
              action = "Last";
            }
            {
              key = "Key6";
              mods = "Shift";
              mode = "Vi";
              action = "FirstOccupied";
            }
            {
              key = "H";
              mods = "Shift";
              mode = "Vi";
              action = "High";
            }
            {
              key = "M";
              mods = "Shift";
              mode = "Vi";
              action = "Middle";
            }
            {
              key = "L";
              mods = "Shift";
              mode = "Vi";
              action = "Low";
            }
            {
              key = "B";
              mode = "Vi";
              action = "SemanticLeft";
            }
            {
              key = "W";
              mode = "Vi";
              action = "SemanticRight";
            }
            {
              key = "E";
              mode = "Vi";
              action = "SemanticRightEnd";
            }
            {
              key = "B";
              mods = "Shift";
              mode = "Vi";
              action = "WordLeft";
            }
            {
              key = "W";
              mods = "Shift";
              mode = "Vi";
              action = "WordRight";
            }
            {
              key = "E";
              mods = "Shift";
              mode = "Vi";
              action = "WordRightEnd";
            }
            {
              key = "Key5";
              mods = "Shift";
              mode = "Vi";
              action = "Bracket";
            }
            {
              key = "Slash";
              mode = "Vi";
              action = "SearchForward";
            }
            {
              key = "Slash";
              mods = "Shift";
              mode = "Vi";
              action = "SearchBackward";
            }
            {
              key = "N";
              mode = "Vi";
              action = "SearchNext";
            }
            {
              key = "N";
              mods = "Shift";
              mode = "Vi";
              action = "SearchPrevious";
            }
          ];
        };
      };

      #debug:
      # Display the time it takes to redraw each frame.
      #render_timer: false

      # Keep the log file after quitting Alacritty.
      #persistent_logging: false

      # Log level
      #
      # Values for `log_level`:
      #   - Off
      #   - Error
      #   - Warn
      #   - Info
      #   - Debug
      #   - Trace
      #log_level: Warn

      # Renderer override.
      #   - glsl3
      #   - gles2
      #   - gles2_pure
      #renderer: None

      # Print all received window events.
      #print_events: false

      # Highlight window damage information.
      #highlight_damage: false
    };
  };
}