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

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

94 lines
2.4 KiB
Nix
Raw Normal View History

{ lib, config, ... }:
2024-03-24 17:42:40 +01:00
with lib;
let
inherit (lib.nixvim) mkPluginPackageOption mkSettingsOption toSnakeCase;
in
2024-03-24 17:42:40 +01:00
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 toSnakeCase optionPath;
2024-03-24 17:42:40 +01:00
in
mkRenamedOptionModule (basePluginPath ++ optionPath) (settingsPath ++ optionPathSnakeCase)
) optionsRenamedToSettings);
options.plugins.telescope.extensions.${name} = {
enable = mkEnableOption "the `${name}` telescope extension";
package = mkPluginPackageOption name defaultPackage;
2024-03-24 17:42:40 +01:00
settings = mkSettingsOption {
2024-03-24 17:42:40 +01:00
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 types; attrsOf strLuaFn;
2024-03-24 17:42:40 +01:00
default = { };
description = ''
Keymaps in ${mode} mode.
Default:
```nix
${defaults}
```
'';
apply = mapAttrs (_: mkRaw);
2024-03-24 17:42:40 +01:00
};
mkMappingsOption =
{ insertDefaults, normalDefaults }:
{
i = mkModeMappingsOption "insert" insertDefaults;
n = mkModeMappingsOption "normal" normalDefaults;
};
}