nix-community.nixvim/plugins/telescope/extensions/_helpers.nix

99 lines
2.3 KiB
Nix
Raw Normal View History

2024-03-24 17:42:40 +01:00
{
lib,
config,
helpers,
...
}:
with lib; rec {
mkExtension = {
name,
defaultPackage,
extensionName ? name,
settingsOptions ? {},
settingsExample ? null,
extraOptions ? {},
imports ? [],
optionsRenamedToSettings ? [],
extraConfig ? cfg: {},
}: {
# TODO remove this once all deprecation warnings will have been removed.
imports = let
basePluginPath = ["plugins" "telescope" "extensions" name];
settingsPath = basePluginPath ++ ["settings"];
in
imports
++ (
map
(
option: let
optionPath =
if isString option
then [option]
else option; # option is already a path (i.e. a list)
optionPathSnakeCase = map helpers.toSnakeCase optionPath;
in
mkRenamedOptionModule
(basePluginPath ++ optionPath)
(settingsPath ++ optionPathSnakeCase)
)
optionsRenamedToSettings
);
options.plugins.telescope.extensions.${name} =
{
enable = mkEnableOption "the `${name}` telescope extension";
package = helpers.mkPackageOption name defaultPackage;
settings = helpers.mkSettingsOption {
description = "settings for the `${name}` telescope extension.";
options = settingsOptions;
example = settingsExample;
};
}
// extraOptions;
config = let
cfg = config.plugins.telescope.extensions.${name};
in
mkIf cfg.enable
(
mkMerge [
{
extraPlugins = [cfg.package];
plugins.telescope = {
enabledExtensions = [extensionName];
settings.extensions.${extensionName} = cfg.settings;
};
}
(extraConfig cfg)
]
);
};
mkModeMappingsOption = mode: defaults:
mkOption {
type = with helpers.nixvimTypes; attrsOf strLuaFn;
default = {};
description = ''
Keymaps in ${mode} mode.
Default:
```nix
${defaults}
```
'';
apply = mapAttrs (_: helpers.mkRaw);
};
mkMappingsOption = {
insertDefaults,
normalDefaults,
}: {
i = mkModeMappingsOption "insert" insertDefaults;
n = mkModeMappingsOption "normal" normalDefaults;
};
}