dotfiles/nvim/.config/nvim/lua/plugins/pickers.lua
Marty Oehme 72f3e4877c
nvim: Default to wrapping in fzf-lua preview
By default we wrap the contents.

This will slightly worsen some coding previews, but greatly improve the
default preview for text files.
We will see if it makes sense to keep over time but this makes more
sense to me right now -- especially with zk.nvim using fzf-lua as
preview provider.
2025-09-03 12:59:05 +02:00

348 lines
6.8 KiB
Lua

return { -- file/item pickers and managers
{
"vifm/vifm.vim",
config = function()
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
vim.g.vifm_replace_netrw = 1
vim.g.vifm_exec_args = '-c "set vifminfo=" -c "set statusline=" -c "only"'
end,
cmd = "Vifm",
keys = { { "<leader>E", "<cmd>Vifm<cr>", desc = "buffer file browser" } },
event = { "BufEnter" },
}, -- integrate file manager
{
"nvim-neo-tree/neo-tree.nvim",
dependencies = {
"MunifTanjim/nui.nvim",
"nvim-lua/plenary.nvim",
{ "nvim-tree/nvim-web-devicons", optional = true },
},
event = "StartWithDir",
cmd = "Neotree",
opts = function(_, opts)
opts.sources = { "filesystem", "git_status", "buffers" }
opts.source_selector = {
winbar = true,
sources = {
{ source = "filesystem" },
{ source = "git_status" },
},
}
opts.close_if_last_window = true
opts.enable_cursor_hijack = true
end,
keys = {
{ "<leader>se", "<cmd>Neotree toggle left<cr>", desc = "filetree", silent = true },
},
},
{ -- substituting git tree listing with jj listing if in jj repo
dependencies = { "Cretezy/neo-tree-jj.nvim" },
"nvim-neo-tree/neo-tree.nvim",
optional = true,
opts = function(_, opts)
opts.sources = opts.sources or {}
opts.source_selector = opts.source_selector or {}
-- Add jj source as available
table.insert(opts.sources, "jj")
-- If there is a git tab in neo-tree replace it when in jj repo
if require("neo-tree.sources.jj.utils").get_repository_root() then
-- Remove git tab
if opts.source_selector.sources then
for i, source in ipairs(opts.source_selector.sources) do
if source.source == "git_status" then
table.remove(opts.source_selector.sources, i)
break
end
end
else
opts.source_selector.sources = {}
end
-- Add jj tab
table.insert(opts.source_selector.sources, {
display_name = "󰊢 JJ",
source = "jj",
})
end
end,
},
{ "MagicDuck/grug-far.nvim", opts = {}, cmd = "GrugFar" },
{
"ibhagwan/fzf-lua",
version = false,
dependencies = { "nvim-tree/nvim-web-devicons" },
init = function()
if require("core.util").is_available("which-key") then
require("which-key").add({ "<leader>v", group = "vim" })
require("which-key").add({ "<leader>f", group = "find" })
end
end,
opts = {
keymap = {
builtin = {
true,
["<c-d>"] = "preview-page-down",
["<c-u>"] = "preview-page-up",
},
fzf = {
true,
["ctrl-q"] = "select-all+accept",
},
},
previewers = {
builtin = {
extensions = {
["png"] = { "chafa", "--format=symbols", "{file}" },
["jpg"] = { "chafa", "--format=symbols", "{file}" },
["gif"] = { "chafa", "--format=symbols", "{file}" },
["svg"] = { "chafa", "--format=symbols", "{file}" },
},
},
},
winopts = {
preview = {
wrap = true
}
},
defaults = {
jump1 = false,
},
},
config = function(_, opts)
opts.actions = opts.actions or { true }
opts.actions["ctrl-q"] = require("fzf-lua").actions.file_sel_to_qf
require("fzf-lua").setup(opts)
end,
cmd = "FzfLua",
keys = {
{
"<leader>vh",
function()
require("fzf-lua").helptags()
end,
desc = "help tags",
},
{
"<leader>vH",
function()
require("fzf-lua").manpages()
end,
desc = "man pages",
},
{
"<leader>vt",
function()
require("fzf-lua").filetypes()
end,
desc = "filetype",
},
{
"<leader>vk",
function()
require("fzf-lua").keymaps()
end,
desc = "keymaps",
},
{
"<leader>vy",
function()
require("fzf-lua").search_history()
end,
desc = "search history",
},
{
"<leader>vc",
function()
require("fzf-lua").command_history()
end,
desc = "command history",
},
{
"<leader>vC",
function()
require("fzf-lua").colorschemes()
end,
desc = "colorschemes",
},
{ -- exclude hidden files with <alt-h> in the search
"<leader>ff",
function()
require("fzf-lua").files()
end,
desc = "files",
},
{
"<leader>fb",
function()
require("fzf-lua").buffers()
end,
desc = "buffers",
},
{
"<leader>fo",
function()
require("fzf-lua").oldfiles()
end,
desc = "old files",
},
{
"<leader>fp",
function()
require("fzf-lua").complete_path()
end,
desc = "path complete",
},
{
"<c-x>",
function()
require("fzf-lua").complete_path()
end,
mode = "i",
desc = "path complete",
},
{
"<leader>fP",
function()
require("fzf-lua").complete_file()
end,
desc = "filepath complete",
},
{
"<leader>fw",
function()
require("fzf-lua").live_grep_native()
end,
desc = "grep",
},
{
"<leader>fW",
function()
require("fzf-lua").live_grep_resume()
end,
desc = "grep resume",
},
{
"<leader>fw",
function()
require("fzf-lua").grep_cword()
end,
mode = "v",
desc = "grep word",
},
{
"<leader>fW",
function()
require("fzf-lua").grep_cWORD()
end,
mode = "v",
desc = "grep WORD",
},
{
"<leader>fg",
function()
require("fzf-lua").git_status()
end,
desc = "git status",
},
{
"<leader>fc",
function()
require("fzf-lua").git_bcommits()
end,
desc = "git buffer commits",
},
{
"<leader>fl",
function()
require("fzf-lua").git_commits()
end,
desc = "git log",
},
{
"<leader>fr",
function()
require("fzf-lua").registers()
end,
desc = "registers",
},
{
"<leader>fr",
function()
require("fzf-lua").jumps()
end,
desc = "jumps",
},
{
"<leader>fq",
function()
require("fzf-lua").quickfix()
end,
desc = "quickfix",
},
{
"<leader>fi",
function()
require("fzf-lua").loclist()
end,
desc = "loclist",
},
{
"z=",
function()
require("fzf-lua").spell_suggest()
end,
desc = "spell suggest",
},
{
"<leader>fR",
function()
require("fzf-lua").resume()
end,
desc = "resume last query",
},
{
"<leader>fs",
function()
require("fzf-lua").lsp_finder()
end,
desc = "lsp symbol",
},
{
"<leader>fd",
function()
require("fzf-lua").diagnostics_workspace()
end,
desc = "diagnostics workspace",
},
{
"<leader>fD",
function()
require("fzf-lua").diagnostics_document()
end,
desc = "diagnostics document",
},
},
},
-- fuzzy matching picker
{
"jiaoshijie/undotree",
dependencies = {
"nvim-lua/plenary.nvim",
},
config = true,
keys = {
{
"<leader>su",
function()
require("undotree").toggle()
end,
desc = "toggle undotree",
silent = true,
},
},
},
}