{ config, lib, ... }: let inherit (lib.modules) mkIf mkMerge; inherit (builtins) mapAttrs; processLegacyMap = modes: legacyMap: [(legacyMap // {mode = modes;})]; cfg = config.vim; in { config = { vim.keymaps = mkMerge [ (mkIf cfg.disableArrows { "" = [ { mode = ["n" "i"]; action = ""; noremap = false; } ]; "" = [ { mode = ["n" "i"]; action = ""; noremap = false; } ]; "" = [ { mode = ["n" "i"]; action = ""; noremap = false; } ]; "" = [ { mode = ["n" "i"]; action = ""; noremap = false; } ]; }) (mapAttrs (_key: processLegacyMap ["n"]) cfg.maps.normal) (mapAttrs (_key: processLegacyMap ["i"]) cfg.maps.insert) (mapAttrs (_key: processLegacyMap ["s"]) cfg.maps.select) (mapAttrs (_key: processLegacyMap ["v"]) cfg.maps.visual) (mapAttrs (_key: processLegacyMap ["t"]) cfg.maps.terminal) (mapAttrs (_key: processLegacyMap ["n" "v" "o"]) cfg.maps.normalVisualOp) (mapAttrs (_key: processLegacyMap ["n" "x"]) cfg.maps.visualOnly) (mapAttrs (_key: processLegacyMap ["o"]) cfg.maps.operator) (mapAttrs (_key: processLegacyMap ["i" "c"]) cfg.maps.insertCommand) (mapAttrs (_key: processLegacyMap ["l"]) cfg.maps.lang) (mapAttrs (_key: processLegacyMap ["c"]) cfg.maps.command) ]; }; }