From e9d59f47e8241f7b7528053b836b5c1e96d333d4 Mon Sep 17 00:00:00 2001 From: pax Date: Sun, 1 Feb 2026 15:26:12 -0800 Subject: [PATCH] keymaps: fix unable to set noremap = false Currently setting `vim.keymaps.*.noremap = false` has no effect. Given that noremap is set by default, the only way to undo it is to use `remap = true`. This commit adds `remap` as an internal option, and derives its final value as the inverse of noremap. This way, setting `noremap` to `false` now behaves as expected. See https://neovim.io/doc/user/lua-guide.html#_creating-mappings --- docs/manual/release-notes/rl-0.9.md | 4 ++++ modules/neovim/mappings/options.nix | 8 +++++++- modules/wrapper/rc/config.nix | 8 +++++--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/manual/release-notes/rl-0.9.md b/docs/manual/release-notes/rl-0.9.md index 662f7aeb..09602f16 100644 --- a/docs/manual/release-notes/rl-0.9.md +++ b/docs/manual/release-notes/rl-0.9.md @@ -178,4 +178,8 @@ https://github.com/gorbit99/codewindow.nvim - Add [codewindow.nvim] plugin in `vim.assistant.codewindow` with `enable` and `setupOpts` +[irobot](https://github.com/irobot): + +- Add `remap` option to `vim.keymaps` + diff --git a/modules/neovim/mappings/options.nix b/modules/neovim/mappings/options.nix index 98e04a65..2c622b43 100644 --- a/modules/neovim/mappings/options.nix +++ b/modules/neovim/mappings/options.nix @@ -1,6 +1,6 @@ {lib, ...}: let inherit (lib.options) mkOption literalMD; - inherit (lib.types) either str listOf attrsOf nullOr submodule; + inherit (lib.types) either str listOf attrsOf nullOr submodule bool; inherit (lib.nvim.config) mkBool; mapConfigOptions = { @@ -25,6 +25,12 @@ expr = mkBool false "Means that the action is actually an expression. Equivalent to adding to a map."; unique = mkBool false "Whether to fail if the map is already defined. Equivalent to adding to a map."; noremap = mkBool true "Whether to use the 'noremap' variant of the command, ignoring any custom mappings on the defined action. It is highly advised to keep this on, which is the default."; + remap = mkOption { + default = false; + type = bool; + internal = true; + description = "'noremap' is on by default. This option is used internally when noremap is set to false."; + }; }; mapType = submodule { diff --git a/modules/wrapper/rc/config.nix b/modules/wrapper/rc/config.nix index 77a62d58..8781cedd 100644 --- a/modules/wrapper/rc/config.nix +++ b/modules/wrapper/rc/config.nix @@ -37,9 +37,11 @@ in { then mkLuaInline keymap.action else keymap.action; - getOpts = keymap: { - inherit (keymap) desc silent nowait script expr unique noremap; - }; + getOpts = keymap: + { + inherit (keymap) desc silent nowait script expr unique noremap; + } + // {remap = !keymap.noremap;}; toLuaKeymap = bind: "vim.keymap.set(${toLuaObject bind.mode}, ${toLuaObject bind.key}, ${toLuaObject (getAction bind)}, ${toLuaObject (getOpts bind)})";