{ 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 "nvo") cfg.maps.normalVisualOp) (mapAttrs (_key: processLegacyMap "nx") cfg.maps.visualOnly) (mapAttrs (_key: processLegacyMap "o") cfg.maps.operator) (mapAttrs (_key: processLegacyMap "ic") cfg.maps.insertCommand) (mapAttrs (_key: processLegacyMap "l") cfg.maps.lang) (mapAttrs (_key: processLegacyMap "c") cfg.maps.command) ]; }; }