lib/keymap-helpers: refactor mkMapOptionSubmodule

Make the `key` and `action` options optional, and allow configuring
whether `action` can be a raw type.
This commit is contained in:
Matt Sturgeon 2024-06-01 16:17:23 +01:00
parent 87d6654a9f
commit df3aa86713
No known key found for this signature in database
GPG key ID: 4F91844CED1A8299
2 changed files with 53 additions and 35 deletions

View file

@ -60,7 +60,11 @@ rec {
# ["" "n" "v" ...]
(map ({ short, ... }: short) (attrValues modes));
mapOptionSubmodule = mkMapOptionSubmodule { };
mapOptionSubmodule = mkMapOptionSubmodule {
hasKey = true;
hasAction = true;
rawAction = true;
};
mkModeOption =
default:
@ -79,14 +83,20 @@ rec {
};
mkMapOptionSubmodule =
defaults:
{
defaults ? { },
hasKey ? false,
hasAction ? false,
rawAction ? true,
}:
# TODO remove assert once `lua` option is gone
# This is here to ensure no uses of `mkMapOptionSubmodule` set a `lua` default
assert !(defaults ? lua);
(
with types;
submodule {
options = {
options =
(optionalAttrs hasKey {
key = mkOption (
{
type = str;
@ -95,16 +105,19 @@ rec {
}
// (optionalAttrs (defaults ? key) { default = defaults.key; })
);
mode = mkModeOption defaults.mode or "";
})
// (optionalAttrs hasAction {
action = mkOption (
{
type = nixvimTypes.maybeRaw str;
type = if rawAction then nixvimTypes.maybeRaw str else str;
description = "The action to execute.";
}
// (optionalAttrs (defaults ? action) { default = defaults.action; })
);
})
// {
mode = mkModeOption defaults.mode or "";
options = mapConfigOptions;
lua = mkOption {
type = nullOr bool;
@ -118,8 +131,6 @@ rec {
default = null;
visible = false;
};
options = mapConfigOptions;
};
}
);

View file

@ -36,7 +36,14 @@ in
keymaps = mapAttrs (
action: defaults:
helpers.mkNullOrOption (
with types; either str (helpers.keymaps.mkMapOptionSubmodule defaults)
with types;
either str (
helpers.keymaps.mkMapOptionSubmodule {
inherit defaults;
hasKey = true;
hasAction = true;
}
)
) "Keymap for the ${action} action."
) defaultKeymaps;