{
  config,
  lib,
  ...
}: let
  inherit (lib.modules) mkIf mkMerge;
  inherit (lib.trivial) pipe;
  inherit (lib.attrsets) mapAttrsToList;
  inherit (lib.lists) flatten;

  legacyMapModes = {
    normal = ["n"];
    insert = ["i"];
    select = ["s"];
    visual = ["v"];
    terminal = ["t"];
    normalVisualOp = ["n" "v" "o"];
    visualOnly = ["n" "x"];
    operator = ["o"];
    insertCommand = ["i" "c"];
    lang = ["l"];
    command = ["c"];
  };

  cfg = config.vim;
in {
  config = {
    vim.keymaps = mkMerge [
      (
        mkIf cfg.disableArrows [
          {
            key = "<up>";
            mode = ["n" "i"];
            action = "<nop>";
            noremap = false;
          }
          {
            key = "<down>";
            mode = ["n" "i"];
            action = "<nop>";
            noremap = false;
          }
          {
            key = "<left>";
            mode = ["n" "i"];
            action = "<nop>";
            noremap = false;
          }
          {
            key = "<right>";
            mode = ["n" "i"];
            action = "<nop>";
            noremap = false;
          }
        ]
      )
      (
        pipe cfg.maps
        [
          (mapAttrsToList (
            oldMode: keybinds:
              mapAttrsToList (
                key: bind:
                  bind
                  // {
                    inherit key;
                    mode = legacyMapModes.${oldMode};
                  }
              )
              keybinds
          ))
          flatten
        ]
      )
    ];
  };
}