From 4c73e0220e62a8f10b41d349fb1e2410d0a714cf Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Mon, 29 Apr 2024 15:47:56 +0300 Subject: [PATCH] build/neovim: add keymap validation to build process --- modules/build/neovim.nix | 8 +++++++- modules/vim/keymap.nix | 8 ++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/modules/build/neovim.nix b/modules/build/neovim.nix index 67b9162..b473240 100644 --- a/modules/build/neovim.nix +++ b/modules/build/neovim.nix @@ -42,7 +42,13 @@ in (lib.optional (config.vim.cmd != "") (call "vim.cmd" config.vim.cmd)) # Keymaps (lib.flip map config.vim.keymap.set ({ mode, lhs, rhs, ... } @ vars: - call "vim.keymap.set" [ mode lhs rhs (removeAttrs vars [ "mode" "lhs" "rhs" ]) ] + let + buf = lib.optionalString (vars.buffer != null) vars.buffer; + m = if builtins.isList mode then lib.head mode else mode; + in + if config.vim.keymap._validate."${buf}"."${m}"."${lhs}" == rhs then + call "vim.keymap.set" [ mode lhs rhs (removeAttrs vars [ "mode" "lhs" "rhs" ]) ] + else abort "This case should never happen." )) ])); diff --git a/modules/vim/keymap.nix b/modules/vim/keymap.nix index a55162f..8f29e89 100644 --- a/modules/vim/keymap.nix +++ b/modules/vim/keymap.nix @@ -23,10 +23,10 @@ let cfg = config.vim.keymap; in let sourceModes = if builtins.isList mode then mode else [ mode ]; unwrappedModes = lib.flatten (lib.flip map sourceModes (m: - if m == "" then [ "n" "x" "s" "o" ] - else if m == "!" then [ "i" "c" ] - else if m == "v" then [ "x" "s" ] - else if m == "l" then [ "i" "c" "l" ] + 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" ] else m ));