diff --git a/lib/keymap-helpers.nix b/lib/keymap-helpers.nix index e1e5f2ca..69ffbef2 100644 --- a/lib/keymap-helpers.nix +++ b/lib/keymap-helpers.nix @@ -79,63 +79,43 @@ in rec { # TODO: When `maps` will have to be deprecated (early December 2023), change this. # mapOptionSubmodule = {...} (no need for options... except for 'optionalAction') - mkMapOptionSubmodule = { - defaultMode ? "", - withKeyOpt ? true, - flatConfig ? false, - }: - with types; let - mapOptionSubmodule = submodule { - options = - ( - if withKeyOpt - then { - key = mkOption { - type = str; - description = "The key to map."; - example = ""; - }; - } - else {} - ) - // { - mode = mkOption { - type = either modeEnum (listOf modeEnum); - description = '' - One or several modes. - Use the short-names (`"n"`, `"v"`, ...). - See `:h map-modes` to learn more. - ''; - default = defaultMode; - example = ["n" "v"]; - }; + mapOptionSubmodule = with types; + submodule { + options = { + key = mkOption { + type = str; + description = "The key to map."; + example = ""; + }; - action = mkOption { - type = str; - description = "The action to execute."; - }; + mode = mkOption { + type = either modeEnum (listOf modeEnum); + description = '' + One or several modes. + Use the short-names (`"n"`, `"v"`, ...). + See `:h map-modes` to learn more. + ''; + default = ""; + example = ["n" "v"]; + }; - lua = mkOption { - type = bool; - description = '' - If true, `action` is considered to be lua code. - Thus, it will not be wrapped in `""`. - ''; - default = false; - }; - } - // ( - if flatConfig - then mapConfigOptions - else { - options = mapConfigOptions; - } - ); + action = mkOption { + type = str; + description = "The action to execute."; + }; + + lua = mkOption { + type = bool; + description = '' + If true, `action` is considered to be lua code. + Thus, it will not be wrapped in `""`. + ''; + default = false; + }; + + options = mapConfigOptions; }; - in - if flatConfig - then either str mapOptionSubmodule - else mapOptionSubmodule; + }; # Correctly merge two attrs (partially) representing a mapping. mergeKeymap = defaults: keymap: let @@ -145,56 +125,6 @@ in rec { # Then, merge the root attrs together and add the previously merged `options` attrs. (defaults // keymap) // {options = mergedOpts;}; - # Given an attrs of key mappings (for a single mode), applies the defaults to each one of them. - # - # Example: - # mkModeMaps { silent = true; } { - # Y = "y$"; - # "" = { action = ":b#"; silent = false; }; - # }; - # - # would give: - # { - # Y = { - # action = "y$"; - # silent = true; - # }; - # "" = { - # action = ":b#"; - # silent = false; - # }; - # }; - mkModeMaps = defaults: - mapAttrs - ( - key: action: let - actionAttrs = - if isString action - then {inherit action;} - else action; - in - defaults // actionAttrs - ); - - # Applies some default mapping options to a set of mappings - # - # Example: - # maps = mkMaps { silent = true; expr = true; } { - # normal = { - # ... - # }; - # visual = { - # ... - # }; - # } - mkMaps = defaults: - mapAttrs - ( - name: modeMaps: - mkModeMaps defaults modeMaps - ); - - # TODO deprecate `mkMaps` and `mkModeMaps` and leave only this one mkKeymaps = defaults: map (mergeKeymap defaults); diff --git a/modules/keymaps.nix b/modules/keymaps.nix index 4a895c08..b6c73fa6 100644 --- a/modules/keymaps.nix +++ b/modules/keymaps.nix @@ -5,59 +5,11 @@ ... }: with lib; { - options = { - maps = - mapAttrs - ( - modeName: modeProps: let - desc = modeProps.desc or modeName; - in - mkOption { - description = "Mappings for ${desc} mode"; - type = with types; - attrsOf - ( - either - str - ( - helpers.keymaps.mkMapOptionSubmodule - { - defaultMode = modeProps.short; - withKeyOpt = false; - flatConfig = true; - } - ) - ); - default = {}; - } - ) - helpers.keymaps.modes; - - keymaps = mkOption { - type = - types.listOf - (helpers.keymaps.mkMapOptionSubmodule {}); - default = []; - example = [ - { - key = ""; - action = "make"; - options.silent = true; - } - ]; - }; - }; - - config = { - warnings = - optional - ( - any - (modeMaps: modeMaps != {}) - (attrValues config.maps) - ) + # This warning has been added on 2023-12-02. TODO: remove it in early Feb. 2024. + imports = [ + (mkRemovedOptionModule + ["maps"] '' - The `maps` option will be deprecated in the near future. Please, use the new `keymaps` option which works as follows: keymaps = [ @@ -79,66 +31,42 @@ with lib; { }; } ]; - ''; + '') + ]; + options = { + keymaps = mkOption { + type = + types.listOf + helpers.keymaps.mapOptionSubmodule; + default = []; + example = [ + { + key = ""; + action = "make"; + options.silent = true; + } + ]; + }; + }; + + config = { extraConfigLua = let - modeMapsAsList = - flatten - ( - mapAttrsToList - ( - modeOptionName: modeProps: - mapAttrsToList - ( - key: action: - ( - if isString action - then { - mode = modeProps.short; - inherit action; - lua = false; - options = {}; - } - else - { - inherit - (action) - action - lua - mode - ; - } - // { - options = - getAttrs - (attrNames helpers.keymaps.mapConfigOptions) - action; - } - ) - // {inherit key;} - ) - config.maps.${modeOptionName} - ) - helpers.keymaps.modes - ); + normalizeMapping = keyMapping: { + inherit + (keyMapping) + mode + key + options + ; - mappings = let - normalizeMapping = keyMapping: { - inherit - (keyMapping) - mode - key - options - ; + action = + if keyMapping.lua + then helpers.mkRaw keyMapping.action + else keyMapping.action; + }; - action = - if keyMapping.lua - then helpers.mkRaw keyMapping.action - else keyMapping.action; - }; - in - map normalizeMapping - (config.keymaps ++ modeMapsAsList); + mappings = map normalizeMapping config.keymaps; in optionalString (mappings != []) '' diff --git a/tests/test-sources/modules/keymaps.nix b/tests/test-sources/modules/keymaps.nix index 7c437b29..9afa0de0 100644 --- a/tests/test-sources/modules/keymaps.nix +++ b/tests/test-sources/modules/keymaps.nix @@ -1,38 +1,4 @@ {helpers, ...}: { - legacy = { - maps.normal."," = "echo \"test\""; - }; - - legacy-mkMaps = { - maps = helpers.keymaps.mkMaps {silent = true;} { - normal."," = "echo \"test\""; - visual = { - "" = { - action = "function() print('toto') end"; - lua = true; - silent = false; - }; - "" = { - action = "bar"; - }; - }; - }; - }; - - legacy-mkModeMaps = { - maps.normal = helpers.keymaps.mkModeMaps {silent = true;} { - "," = "echo \"test\""; - "" = { - action = "function() print('toto') end"; - lua = true; - silent = false; - }; - "b" = { - action = "bar"; - }; - }; - }; - example = { keymaps = [ { @@ -47,7 +13,7 @@ ]; }; - mkMaps = { + mkKeymaps = { keymaps = helpers.keymaps.mkKeymaps {