mirror of
https://github.com/NotAShelf/neovim-flake.git
synced 2025-01-18 11:39:47 +01:00
utility/telescope: add custom extensions API; clean up setupOptions
This commit is contained in:
parent
a0d6d8407f
commit
6594409a25
2 changed files with 71 additions and 31 deletions
|
@ -5,8 +5,8 @@
|
|||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf;
|
||||
inherit (lib.strings) optionalString;
|
||||
inherit (lib.lists) optionals;
|
||||
inherit (lib.strings) optionalString concatMapStringsSep;
|
||||
inherit (lib.lists) optionals concatLists;
|
||||
inherit (lib.nvim.binds) pushDownDefault mkKeymap;
|
||||
|
||||
cfg = config.vim.telescope;
|
||||
|
@ -16,7 +16,7 @@
|
|||
in {
|
||||
config = mkIf cfg.enable {
|
||||
vim = {
|
||||
startPlugins = ["plenary-nvim"];
|
||||
startPlugins = ["plenary-nvim"] ++ concatLists (map (x: x.packages) cfg.extensions);
|
||||
|
||||
lazy.plugins.telescope = {
|
||||
package = "telescope";
|
||||
|
@ -28,11 +28,14 @@ in {
|
|||
vim.g.loaded_telescope = nil
|
||||
'';
|
||||
|
||||
after = ''
|
||||
after = let
|
||||
enabledExtensions = map (x: x.name) cfg.extensions;
|
||||
in ''
|
||||
local telescope = require("telescope")
|
||||
${optionalString config.vim.ui.noice.enable "telescope.load_extension('noice')"}
|
||||
${optionalString config.vim.notify.nvim-notify.enable "telescope.load_extension('notify')"}
|
||||
${optionalString config.vim.projects.project-nvim.enable "telescope.load_extension('projects')"}
|
||||
${concatMapStringsSep "\n" (x: "telescope.load_extension('${x}')") enabledExtensions}
|
||||
'';
|
||||
|
||||
cmd = ["Telescope"];
|
||||
|
|
|
@ -4,16 +4,12 @@
|
|||
...
|
||||
}: let
|
||||
inherit (lib.options) mkEnableOption mkOption;
|
||||
inherit (lib.types) int str listOf float bool either enum submodule attrsOf;
|
||||
inherit (lib.types) int str listOf float bool either enum submodule attrsOf anything package;
|
||||
inherit (lib.nvim.binds) mkMappingOption;
|
||||
inherit (lib.nvim.types) mkPluginSetupOption luaInline;
|
||||
setupOptions = {
|
||||
defaults = {
|
||||
vimgrep_arguments = mkOption {
|
||||
description = ''
|
||||
Defines the command that will be used for `live_grep` and `grep_string` pickers.
|
||||
Make sure that color is set to `never` because telescope does not yet interpret color codes.
|
||||
'';
|
||||
type = listOf str;
|
||||
default = [
|
||||
"${pkgs.ripgrep}/bin/rg"
|
||||
|
@ -26,53 +22,65 @@
|
|||
"--hidden"
|
||||
"--no-ignore"
|
||||
];
|
||||
|
||||
description = ''
|
||||
Defines the command that will be used for `live_grep` and `grep_string` pickers.
|
||||
Make sure that color is set to `never` because telescope does not yet interpret color codes.
|
||||
'';
|
||||
};
|
||||
|
||||
pickers.find_command = mkOption {
|
||||
description = "cmd to use for finding files";
|
||||
type = either (listOf str) luaInline;
|
||||
default = ["${pkgs.fd}/bin/fd"];
|
||||
description = ''
|
||||
Command to use for finding files. If using an executable from `PATH` then you must
|
||||
make sure that the package is available in [](#opt-vim.extraPackages).
|
||||
'';
|
||||
};
|
||||
|
||||
prompt_prefix = mkOption {
|
||||
description = "Shown in front of Telescope's prompt";
|
||||
type = str;
|
||||
default = " ";
|
||||
description = "Shown in front of Telescope's prompt";
|
||||
};
|
||||
|
||||
selection_caret = mkOption {
|
||||
type = str;
|
||||
default = " ";
|
||||
description = "Character(s) to show in front of the current selection";
|
||||
type = str;
|
||||
default = " ";
|
||||
};
|
||||
|
||||
entry_prefix = mkOption {
|
||||
description = "Prefix in front of each result entry. Current selection not included.";
|
||||
type = str;
|
||||
default = " ";
|
||||
description = "Prefix in front of each result entry. Current selection not included.";
|
||||
};
|
||||
|
||||
initial_mode = mkOption {
|
||||
description = "Determines in which mode telescope starts.";
|
||||
type = enum ["insert" "normal"];
|
||||
default = "insert";
|
||||
description = "Determines in which mode telescope starts.";
|
||||
};
|
||||
|
||||
selection_strategy = mkOption {
|
||||
description = "Determines how the cursor acts after each sort iteration.";
|
||||
type = enum ["reset" "follow" "row" "closest" "none"];
|
||||
default = "reset";
|
||||
description = "Determines how the cursor acts after each sort iteration.";
|
||||
};
|
||||
|
||||
sorting_strategy = mkOption {
|
||||
description = ''Determines the direction "better" results are sorted towards.'';
|
||||
type = enum ["descending" "ascending"];
|
||||
default = "ascending";
|
||||
description = ''Determines the direction "better" results are sorted towards.'';
|
||||
};
|
||||
|
||||
layout_strategy = mkOption {
|
||||
description = "Determines the default layout of Telescope pickers. See `:help telescope.layout`.";
|
||||
type = str;
|
||||
default = "horizontal";
|
||||
description = "Determines the default layout of Telescope pickers. See `:help telescope.layout`.";
|
||||
};
|
||||
|
||||
layout_config = mkOption {
|
||||
description = ''
|
||||
Determines the default configuration values for layout strategies.
|
||||
See telescope.layout for details of the configurations options for
|
||||
each strategy.
|
||||
'';
|
||||
default = {};
|
||||
type = submodule {
|
||||
options = {
|
||||
|
@ -117,33 +125,57 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
description = ''
|
||||
Determines the default configuration values for layout strategies.
|
||||
See `telescope.layout` for details of the configurations options for
|
||||
each strategy.
|
||||
'';
|
||||
};
|
||||
|
||||
file_ignore_patterns = mkOption {
|
||||
description = "A table of lua regex that define the files that should be ignored.";
|
||||
type = listOf str;
|
||||
default = ["node_modules" ".git/" "dist/" "build/" "target/" "result/"];
|
||||
description = "A table of lua regex that define the files that should be ignored.";
|
||||
};
|
||||
|
||||
color_devicons = mkOption {
|
||||
description = "Boolean if devicons should be enabled or not.";
|
||||
type = bool;
|
||||
default = true;
|
||||
description = "Boolean if devicons should be enabled or not.";
|
||||
};
|
||||
|
||||
path_display = mkOption {
|
||||
description = "Determines how file paths are displayed.";
|
||||
type = listOf (enum ["hidden" "tail" "absolute" "smart" "shorten" "truncate"]);
|
||||
default = ["absolute"];
|
||||
description = "Determines how file paths are displayed.";
|
||||
};
|
||||
|
||||
set_env = mkOption {
|
||||
description = "Set an environment for term_previewer";
|
||||
type = attrsOf str;
|
||||
default = {
|
||||
COLORTERM = "truecolor";
|
||||
};
|
||||
default = {COLORTERM = "truecolor";};
|
||||
description = "Set an environment for term_previewer";
|
||||
};
|
||||
|
||||
winblend = mkOption {
|
||||
description = "pseudo-transparency of keymap hints floating window";
|
||||
type = int;
|
||||
default = 0;
|
||||
description = "pseudo-transparency of keymap hints floating window";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
extensionOpts = {
|
||||
options = {
|
||||
name = mkOption {
|
||||
type = str;
|
||||
description = "Name of the extension, will be used to load it with a `require`";
|
||||
};
|
||||
|
||||
packages = mkOption {
|
||||
type = listOf (either str package);
|
||||
default = [];
|
||||
description = "Package or packages providing the Telescope extension to be loaded.";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -178,5 +210,10 @@ in {
|
|||
enable = mkEnableOption "telescope.nvim: multi-purpose search and picker utility";
|
||||
|
||||
setupOpts = mkPluginSetupOption "Telescope" setupOptions;
|
||||
extensions = mkOption {
|
||||
type = listOf (attrsOf (submodule extensionOpts));
|
||||
default = [];
|
||||
description = "TODO";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue