return { { enabled = true, 'ibhagwan/fzf-lua', dependencies = { 'echasnovski/mini.icons', }, lazy = false, -- because we register ui.select handlers config = function() local fzf = require('fzf-lua') fzf.register_ui_select() fzf.setup({ -- PROFILE { 'default' }, -- OPTIONS winopts = { backdrop = 0, split = 'belowright 20new', border = 'none', preview = { border = 'none', hidden = true, }, -- on_create = function() end, }, keymap = { fzf = { true, ['ctrl-n'] = 'down', ['ctrl-p'] = 'up', }, }, actions = { files = { true, ['ctrl-q'] = { fn = fzf.actions.file_sel_to_qf, prefix = 'select-all' }, }, }, fzf_colors = true, -- PICKER CONFIG files = { file_icons = true, }, marks = { marks = '[a-zA-Z]', }, }) end, keys = { { mode = 'n', ';', 'FzfLua', desc = 'fzf: select' }, { mode = 'n', ';/', 'FzfLua blines', desc = 'fzf: current_buffer_fuzzy_find' }, { mode = 'n', ';b', 'FzfLua buffers', desc = 'fzf: buffers' }, { mode = 'n', ';f', 'FzfLua files', desc = 'fzf: find_files' }, { mode = 'n', ';g', 'FzfLua live_grep', desc = 'fzf: live_grep' }, { mode = 'n', ';D', 'FzfLua diagnostics_workspace sort=true', desc = 'fzf: workspace diagnostics', }, { mode = 'n', ';d', 'FzfLua diagnostics_document sort=true', desc = 'fzf: document diagnostics', }, { mode = 'n', ';h', 'FzfLua helptags', desc = 'fzf: help' }, { mode = 'n', ';s', 'FzfLua lsp_document_symbols', desc = 'fzf: document symbols' }, { mode = 'n', ';w', 'FzfLua lsp_live_workspace_symbols', desc = 'fzf: workspace symbols', }, { mode = 'n', ';m', 'FzfLua marks', desc = 'fzf: marks' }, { mode = 'n', ';v', function() require('fzf-lua').files({ cwd = vim.fn.stdpath('config') }) end, desc = 'fzf: vim_config', }, { mode = 'n', ';z', function() -- register one-time autocmd to open changed directory with oil vim.api.nvim_create_autocmd('DirChanged', { pattern = '*', callback = vim.schedule_wrap(function(args) vim.cmd.Oil(args.file) end), once = true, }) require('fzf-lua').zoxide() end, desc = 'fzf: zoxide', }, { mode = 'n', ';Z', function() require('fzf-lua').live_grep({ cwd = vim.env.ZK_NOTEBOOK_DIR, actions = { ['ctrl-c'] = function(selected, opts) local utils = require('fzf-lua.utils') local title = opts.last_query local p = vim .system({ 'zk', 'new', '--dry-run', '--no-input', '--title', title }, { text = true }) :wait() if not p.code == 0 then return end utils.info(vim.inspect(p.stdout)) local note_path = vim.trim(p.stderr) local note_body = vim.split(p.stdout, '\n') require('mod.win').open(note_path, note_body, { buf = { filetype = 'markdown' }, }) end, }, }) end, desc = 'fzf: zettelkasten', }, { mode = 'n', ';T', function() require('fzf-lua').live_grep({ regex = '(TODO|XXX|NOTE|HACK):' }) end, desc = 'fzf: zettelkasten', }, { mode = 'n', ';;f', function() local dir if vim.opt.filetype:get() == 'oil' then dir = require('oil').get_current_dir() else dir = vim.fn.expand('%:p:h') end _G.feedkeys(':Fzf files cwd=' .. dir) end, desc = 'fzf: files (interactive)', }, { mode = 'n', ';;g', function() local dir if vim.opt.filetype:get() == 'oil' then dir = require('oil').get_current_dir() else dir = vim.fn.expand('%:p:h') end _G.feedkeys(':Fzf live_grep cwd=' .. dir) end, desc = 'fzf: grep (interactive)', }, }, }, }