nixeovim/modules/vim/keymap.nix

41 lines
1.1 KiB
Nix
Raw Normal View History

2024-04-28 01:54:38 +03:00
{ config, lib, ... }:
2024-04-26 02:08:23 +03:00
2024-04-28 01:54:38 +03:00
let cfg = config.vim.keymap; in
2024-04-26 02:08:23 +03:00
{
options.vim.keymap = with lib; {
2024-04-28 01:54:38 +03:00
_validate = mkOption {
# mode lhs rhs
type = with types; attrsOf (attrsOf (either str attrs));
2024-04-28 01:54:38 +03:00
visible = false;
internal = true;
readOnly = true;
};
2024-04-26 02:08:23 +03:00
set = mkOption {
type = with types; listOf keymap;
2024-04-26 02:08:23 +03:00
default = [ ];
};
};
2024-04-28 01:54:38 +03:00
config = {
vim.keymap._validate = lib.mkMerge
(map
({ mode, lhs, rhs, buffer, ... }:
let
sourceModes = if builtins.isList mode then mode else [ mode ];
unwrappedModes = lib.unique (lib.flatten (lib.flip map sourceModes (m:
if m == "" then [ m "n" "x" "s" "o" ]
else if m == "!" then [ m "i" "c" ]
else if m == "v" then [ m "x" "s" ]
else if m == "l" then [ m "i" "c" "l" ]
2024-04-28 01:54:38 +03:00
else m
)));
2024-04-28 01:54:38 +03:00
in
lib.foldl lib.recursiveUpdate { }
(lib.flip map unwrappedModes (m: {
"${m}"."${lhs}" = rhs;
2024-04-28 01:54:38 +03:00
}))
)
cfg.set);
};
2024-04-26 02:08:23 +03:00
}