A Telescope picker to quickly access configurations of plugins managed by lazy.nvim.
Example: Searching for Telescope
configurations:
ā” Simply search the plugin name and open its configuration at the corresponding line.
No matter if the config is in a unique file, grouped in the same file with other plugins configs, grouped in a big table or splitted across multiple plugin dependencies.
ā” No more head overload trying to remember in which file you changed that plugin option or searching through files to check for overlapping configs.
ā” Add custom entries to any file for your special needs.
For example a custom entry to quickly access a configuration file from a config distribution like LazyVim, NvChad, etc.
ā” Quickly execute builtin actions on the selected entry:
<C-g>x
).<C-g>r
).live_grep
picker at the plugin's local directory path (<C-g>l
).The plugin checks the current LazySpec
passed into lazy.nvim
, imports all
the configuration fragments of each plugin, extracts the plugin data, and
generates the full plugin configuration list.
return {
"nvim-telescope/telescope.nvim",
dependencies = {
{ "polirritmico/telescope-lazy-plugins.nvim" },
},
-- etc.
}
require("telescope").load_extension("lazy_plugins")
Run
:checkhealth telescope
after the installation is recommended (the extension needs to be loaded first).
Check the configuration examples section.
:Telescope lazy_plugins
require("telescope").extensions.lazy_plugins.lazy_plugins()
Add the options in the telescope.nvim
opts extensions
table inside
lazy_plugins
(configuration examples).
Option | Type | Description |
---|---|---|
lazy_config |
string |
Path to the lua file containing the lazy options passed to the setup() call. With this value setted, the lazy entry is added, e.g. searching for lazy to open nvim/lua/config/lazy.lua . |
name_only |
boolean |
Match only the repository name. Set to false to match the full account/repo_name . |
show_disabled |
boolean |
Also show disabled plugins from the Lazy spec. |
ignore_imports |
table |
Array-like table with modules to ignore. Useful for config distributions like LazyVim to avoid importing the inner configurations, e.g., lazyvim.plugins . |
picker_opts |
table |
Layout options passed into Telescope. Check :h telescope.layout . |
mappings |
table |
Keymaps attached to the picker. See :h telescope.mappings . Also, 'Custom Actions' could be added. |
live_grep |
table |
Options to pass into the Telescope builtin live_grep picker. See :h telescope.builtin.live_grep . |
custom_entries |
table |
A collection of custom entries to add into the picker. See the 'Custom Entries' section. |
lp_actions
refers to the table provided by telescope-lazy-plugins.actions
,
accessible via:
require("telescope").extensions.lazy_plugins.actions
Insert | Normal | lp_actions | Description |
---|---|---|---|
<CR> |
<CR> |
open |
Open the selected plugin config file at the first line of the plugin spec. |
<C-g>x |
gx |
open_repo_url |
Open the plugin repository url in your default web browser. |
<C-g>r |
gr |
open_repo_dir |
Open the plugin repository Lazy local clone folder. |
<C-g>l |
gl |
open_repo_live_grep |
Open Telescope live_grep at the repository local clone folder. |
custom_action |
A wrapper to use custom actions. See the 'Custom Actions' section. |
{
name_only = true, -- match only the `repo_name`, false to match the full `account/repo_name`
show_disabled = true, -- also show disabled plugins from the Lazy spec.
lazy_config = vim.fn.stdpath("config") .. "/lua/config/lazy.lua", -- path to the file containing the lazy opts and setup() call.
custom_entries = {}, ---@type table<LazyPluginsCustomEntry>
live_grep = {}, -- Opts to pass into `live_grep`. Check `:h telescope.builtin.live_grep`.
ignore_imports = {}, -- Add imports you want to ignore, e.g., "lazyvim.plugins".
mappings = {
["i"] = {
["<C-g>x"] = lp_actions.open_repo_url,
["<C-g>r"] = lp_actions.open_repo_dir,
["<C-g>l"] = lp_actions.open_repo_live_grep,
},
["n"] = {
["gx"] = lp_actions.open_repo_url,
["gr"] = lp_actions.open_repo_dir,
["gl"] = lp_actions.open_repo_live_grep,
},
},
picker_opts = {
sorting_strategy = "ascending",
layout_strategy = "flex",
layout_config = {
flex = { flip_columns = 150 },
horizontal = { preview_width = { 0.55, max = 100, min = 30 } },
vertical = { preview_cutoff = 20, preview_height = 0.5 },
},
},
}
{
"nvim-telescope/telescope.nvim",
cmd = "Telescope",
dependencies = {
{ "nvim-lua/plenary.nvim" },
{
"polirritmico/telescope-lazy-plugins.nvim",
keys = {
{ "<leader>cp", "<Cmd>Telescope lazy_plugins<CR>", desc = "Telescope: Plugins configurations" },
},
},
},
opts = {
extensions = {
lazy_plugins = {
lazy_config = vim.fn.stdpath("config") .. "/lua/lazy/init.lua", -- path to the file containing the lazy spec and setup() call.
},
},
-- etc.
},
}
Lazy-loading Telescope extensions could be a little tricky. This approach
creates a user auto command that checks when the telescope.nvim
plugin is
loaded and then executes the load_extension
function (Could be used with any
Telescope extension).
If your plugins are inside a large table passed directly to the
require('lazy').setup({...}, opts)
call, make sure to set the lazy_config
option to specify the file where the spec table is defined. For example, for
configurations in a single init.lua
file:
The plugin also offer the possibility to add and define your custom actions to
the picker through custom_action
and helper functions.
Custom entries could be added into the custom_entries
field in the options.
Should follow this specs:
---@class LazyPluginsCustomEntry
---@field name string Entry name
---@field filepath string Full path to the lua target file
---@field line? integer Optional: Line number to set the view on the target file. Defaults to 1.
---@field repo_url? string Optional: URL to open with the `open_repo_url` action
---@field repo_dir? string Optional: Directory path to open with the `open_repo_dir` action
--- Custom entry example:
{
name = "custom-entry",
filepath = vim.fn.stdpath("config") .. "/lua/extra-options/somefile.lua",
-- Optional:
line = 42,
repo_url = "https://www.lua.org/manual/5.2/",
repo_dir = vim.fn.stdpath("config") .. "/lua/extra-options/",
}
This are the highlights defined by Telescope Lazy Plugins:
Highlight group | Defaults to | Description |
---|---|---|
TelescopeLazyPlugins | Normal | Plugin name |
TelescopeLazyPluginsFile | Comment | Module file with the config spec |
TelescopeLazyPluginsEnabled | Function | Enabled plugin icon |
TelescopeLazyPluginsDisabled | Delimiter | Disabled plugin icon |
This plugin is made mainly for my personal use, but suggestions, issues, or pull requests are very welcome.
Enjoy