{ config, pkgs, lib, font, ... }:
let inherit (import ./variables.nix) key theme color accent font;
in {
  config = {
    programs.helix = {
      enable = true;
      package = pkgs.unstable.helix;
      settings = {
        theme = "gruvbox";
        editor = {
          whitespace.render = "all";
          whitespace.characters = {
            space = "·";
            tab = "→";
            newline = "¬";
          };
        };
        keys.normal = {
          # basic movement
          n = "move_char_left";
          e = "move_line_down";
          i = "move_line_up";
          o = "move_char_right";
          # search
          l = "search_next";
          L = "search_prev";
          # edits
          s = "insert_mode";
          # open newline
          h = "open_below";
          H = "open_above";
          # selections
          k = "select_regex";
          K = "split_selection";
          "C-k" = "split_selection_on_newline";
          # goto mode
          g.n = "goto_line_start";
          g.o = "goto_line_end";
        };
        keys.select = {
          # basic movement
          n = "extend_char_left";
          e = "extend_line_down";
          i = "extend_line_up";
          o = "extend_char_right";
          # search
          l = "search_next";
          L = "search_prev";
          # edits
          s = "insert_mode";
          # open newline
          h = "open_below";
          H = "open_above";
          # selections
          k = "select_regex";
          K = "split_selection";
          "C-k" = "split_selection_on_newline";
          # goto mode
          g.n = "goto_line_start";
          g.o = "goto_line_end";
        };
        keys.insert = { "A-k" = "normal_mode"; };
      };
    };
    home.packages = with pkgs; [ pkgs.unstable.helix ];
  };
}
