new lazy rice

This commit is contained in:
iofq 2024-08-19 01:38:09 -05:00
parent 1eb2b1bc3c
commit ece2c1c694
33 changed files with 1132 additions and 780 deletions

View file

92
nvim/lua/config/init.lua Normal file
View file

@ -0,0 +1,92 @@
vim.opt.backspace = 'indent,eol,start'
vim.opt.clipboard = 'unnamedplus'
vim.opt.completeopt = 'menuone'
vim.opt.expandtab = true -- insert tabs as spaces
vim.opt.inccommand = 'split' -- incremental live completion
vim.opt.laststatus = 1
vim.opt.list = true
vim.opt.nrformats:append('alpha') -- let Ctrl-a do letters as well
vim.opt.path:append('**') -- enable fuzzy :find ing
vim.opt.relativenumber = true
vim.opt.shadafile = 'NONE' -- disable shada
vim.opt.shiftwidth = 0 -- >> shifts by tabstop
vim.opt.showmatch = true -- highlight matching brackets
vim.opt.showmode = true
vim.opt.signcolumn = 'no'
vim.opt.spell = false
vim.opt.softtabstop = -1 -- backspace removes tabstop
vim.opt.swapfile = false
vim.opt.tabstop = 2 -- 2 space tabs are based
vim.opt.updatetime = 250 -- decrease update time
vim.opt.virtualedit = 'onemore'
vim.opt.wrap = true
vim.g.fzf_layout = { window = { width = 0.9, height = 0.6 } }
-- Switch tab length on the fly
vim.keymap.set('n', '\\t', function()
vim.o.tabstop = vim.o.tabstop == 2 and 4 or 2
end, { silent = true, desc = 'toggle tabstop' })
-- autocmd
----------------------------------------
local undopath = '~/.local/share/nvim/undo'
vim.api.nvim_create_autocmd('VimEnter', {
command = 'silent !mkdir -p ' .. undopath,
group = vim.api.nvim_create_augroup('Init', {}),
})
-- open :g in buffers
vim.api.nvim_create_autocmd('BufWinEnter', {
pattern = '*',
callback = function(event)
if vim.bo[event.buf].filetype == 'help' then
vim.cmd.only()
vim.keymap.set('n', 'q', vim.cmd.bdelete, { noremap = true, silent = true })
vim.bo.buflisted = true
end
end,
})
-- Configure Neovim diagnostic messages
local function prefix_diagnostic(prefix, diagnostic)
return string.format(prefix .. ' %s', diagnostic.message)
end
vim.diagnostic.config {
virtual_text = {
prefix = '',
format = function(diagnostic)
local severity = diagnostic.severity
if severity == vim.diagnostic.severity.ERROR then
return prefix_diagnostic('󰅚', diagnostic)
end
if severity == vim.diagnostic.severity.WARN then
return prefix_diagnostic('', diagnostic)
end
if severity == vim.diagnostic.severity.INFO then
return prefix_diagnostic('', diagnostic)
end
if severity == vim.diagnostic.severity.HINT then
return prefix_diagnostic('󰌶', diagnostic)
end
return prefix_diagnostic('', diagnostic)
end,
},
update_in_insert = false,
underline = true,
severity_sort = true,
float = {
focusable = false,
style = 'minimal',
border = 'rounded',
source = 'if_many',
header = '',
prefix = '',
},
}
-- random keymaps
vim.keymap.set('n', 'gq', vim.cmd.bdelete, { silent = true })
vim.keymap.set('n', 'gr', 'gT', { noremap = true, silent = true })
vim.keymap.set('n', 'n', 'nzz', { noremap = true, silent = true })
vim.keymap.set('n', 'N', 'Nzz', { noremap = true, silent = true })
vim.keymap.set({ 'v', 'i' }, 'wq', '<esc>l', { noremap = true, silent = true })
vim.keymap.set('n', '<leader>x', '"rd', { remap = true, silent = true })

View file

@ -0,0 +1,98 @@
return {
{
'hrsh7th/nvim-cmp',
event = 'VeryLazy',
dependencies = {
'hrsh7th/cmp-buffer',
'hrsh7th/cmp-cmdline',
'hrsh7th/cmp-path',
'hrsh7th/cmp-nvim-lsp',
'ray-x/cmp-treesitter',
'L3MON4D3/LuaSnip',
'saadparwaiz1/cmp_luasnip',
},
config = function()
local cmp = require('cmp')
cmp.setup {
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
experimental = {
native_menu = false,
ghost_text = true,
},
mapping = cmp.mapping.preset.insert {
['<C-j>'] = cmp.mapping.scroll_docs(-4),
['<C-k>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<esc>'] = cmp.mapping.abort(),
['<CR>'] = cmp.mapping.confirm { select = true }, -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
},
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
}, {
{ name = 'buffer' },
}),
}
cmp.setup.cmdline({ '/', '?' }, {
mapping = cmp.mapping.preset.cmdline(),
sources = {
{ name = 'buffer' },
},
})
cmp.setup.cmdline(':', {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({
{ name = 'path' },
}, {
{ name = 'cmdline' },
}),
matching = { disallow_symbol_nonprefix_matching = false },
})
end,
},
{
'L3MON4D3/LuaSnip',
event = 'VeryLazy',
dependencies = { 'rafamadriz/friendly-snippets' },
config = function()
local ls = require('luasnip')
ls.config.set_config {
history = true,
updateevents = 'TextChanged, TextChangedI',
}
require('luasnip.loaders.from_vscode').lazy_load()
vim.keymap.set({ 'i', 's' }, '<C-K>', function()
if ls.expand_or_jumpable() then
ls.expand_or_jump()
end
end, { silent = true })
vim.keymap.set({ 'i', 's' }, '<C-J>', function()
if ls.jumpable(-1) then
ls.jump(-1)
end
end, { silent = true })
vim.keymap.set({ 'i', 's' }, '<C-L>', function()
if ls.choice_active() then
ls.change_choice(1)
end
end, { silent = true })
--------------------
-- Snippets --
--------------------
local fmta = require('luasnip.extras.fmt').fmta
ls.add_snippets('go', {
ls.snippet('ie', fmta('if err != nil {\n\treturn <err>\n}', { err = ls.insert_node(1, 'err') })),
})
end,
},
}

View file

@ -0,0 +1,61 @@
return {
{
'rcarriga/nvim-dap-ui',
event = 'VeryLazy',
dependencies = {
'nvim-neotest/nvim-nio',
},
},
{
'mfussenegger/nvim-dap',
event = 'VeryLazy',
dependencies = {
'leoluz/nvim-dap-go',
'rcarriga/nvim-dap-ui',
},
config = function()
local d = require('dap')
local w = require('dap.ui.widgets')
local ui = require('dapui')
require('dap-go').setup()
ui.setup()
local scopes = nil
vim.keymap.set('n', '<leader>za', function()
ui.toggle()
end, { desc = 'toggle dapui' })
vim.keymap.set('n', '<leader>zz', function()
scopes = w.sidebar(w.scopes, {}, 'split')
d.continue()
end, { desc = 'start debugger' })
vim.keymap.set('n', '<leader>zn', function()
d.step_over()
end, { desc = 'step over' })
vim.keymap.set('n', '<leader>zi', function()
d.step_into()
end, { desc = 'step into' })
vim.keymap.set('n', '<leader>zo', function()
d.step_out()
end, { desc = 'step out' })
vim.keymap.set('n', '<leader>zx', function()
d.toggle_breakpoint()
end, { desc = 'toggle_breakpoint' })
vim.keymap.set('n', '<leader>zr', function()
d.run_last()
end, { desc = 'run prev' })
vim.keymap.set({ 'n', 'v' }, '<leader>zh', function()
ui.eval()
end, { desc = 'hover' })
vim.keymap.set({ 'n', 'v' }, '<leader>zp', function()
require('dap.ui.widgets').preview()
end, { desc = 'preview' })
vim.keymap.set('n', '<leader>zf', function()
local widgets = require('dap.ui.widgets')
widgets.centered_float(widgets.frames)
end, { desc = 'view frames' })
vim.keymap.set('n', '<leader>zs', function()
scopes.toggle()
end, { desc = 'toggle scope view' })
end,
},
}

197
nvim/lua/plugins/lsp.lua Normal file
View file

@ -0,0 +1,197 @@
return {
{
'folke/trouble.nvim',
event = 'VeryLazy',
dependencies = {
'artemave/workspace-diagnostics.nvim',
},
config = function()
require('trouble').setup()
vim.keymap.set(
'n',
'<leader>de',
'<cmd>Trouble diagnostics toggle focus=true<CR>',
{ noremap = true, desc = 'Trouble diagnostics' }
)
vim.keymap.set(
'n',
'<leader>dE',
'<cmd>Trouble diagnostics toggle focus=true filter.buf=0<CR>',
{ noremap = true, desc = 'Trouble diagnostics (currrent buffer)' }
)
vim.keymap.set('n', '<leader>dw', function()
for _, client in ipairs(vim.lsp.get_clients { bufnr = 0 }) do
require('workspace-diagnostics').populate_workspace_diagnostics(client, 0)
end
end, { noremap = true, desc = 'Populate Trouble workspace diagnostics' })
end,
},
{
'neovim/nvim-lspconfig',
event = 'VeryLazy',
dependencies = {
'hrsh7th/cmp-nvim-lsp',
},
config = function()
local lspconfig = require('lspconfig')
lspconfig.util.default_config.capabilities = vim.tbl_deep_extend(
'force',
lspconfig.util.default_config.capabilities,
require('cmp_nvim_lsp').default_capabilities()
)
lspconfig.gopls.setup {
settings = {
gopls = {
gofumpt = true,
codelenses = {
gc_details = true,
test = true,
},
analyses = {
unusedvariable = true,
shadow = true,
},
hints = {
assignVariableTypes = true,
constantValues = true,
functionTypeParameters = true,
rangeVariableTypes = true,
},
usePlaceholders = true,
staticcheck = true,
},
},
on_attach = function()
vim.api.nvim_command('au BufWritePre <buffer> lua vim.lsp.buf.format { async = false }')
end,
}
lspconfig.jedi_language_server.setup {}
lspconfig.nil_ls.setup {}
lspconfig.phpactor.setup {}
lspconfig.lua_ls.setup {
on_init = function(client)
local path = client.workspace_folders[1].name
if vim.loop.fs_stat(path .. '/.luarc.json') or vim.loop.fs_stat(path .. '/.luarc.jsonc') then
return
end
client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, {
runtime = {
version = 'LuaJIT',
},
workspace = {
checkThirdParty = false,
library = {
vim.env.VIMRUNTIME,
},
},
})
end,
settings = {
Lua = {},
},
}
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Prev diagnostic' })
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Next diagnostic' })
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
callback = function(ev)
local bufnr = ev.buf
local client = vim.lsp.get_client_by_id(ev.data.client_id)
require('workspace-diagnostics').populate_workspace_diagnostics(client, bufnr)
vim.keymap.set(
'n',
'K',
vim.lsp.buf.hover,
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP hover' }
)
vim.keymap.set(
'n',
'<leader>rn',
vim.lsp.buf.rename,
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP Rename' }
)
vim.keymap.set(
{ 'n', 'v' },
'<leader>da',
vim.lsp.buf.code_action,
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP code action' }
)
vim.keymap.set(
'n',
'<leader>dd',
'<cmd>Telescope lsp_definitions<cr>',
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP definitions' }
)
vim.keymap.set(
'n',
'<leader>di',
'<cmd>Telescope lsp_implementations<cr>',
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP implementations' }
)
vim.keymap.set(
'n',
'<leader>dr',
'<cmd>Telescope lsp_references<cr>',
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP references' }
)
vim.keymap.set(
'n',
'<leader>dt',
'<cmd>Telescope lsp_type_definitions<cr>',
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP type defs' }
)
vim.keymap.set(
'n',
'<leader>ds',
'<cmd>Telescope lsp_document_symbols<cr>',
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP symbols' }
)
vim.keymap.set(
'n',
'<leader>dl',
vim.lsp.codelens.run,
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP codelens' }
)
vim.keymap.set('n', '<leader>dh', function()
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
end, { buffer = ev.buf, noremap = true, silent = true, desc = 'LSP hints toggle' })
vim.keymap.set('n', '<space>df', function()
vim.lsp.buf.format { async = true }
end, { buffer = ev.buf, noremap = true, silent = true, desc = 'LSP format' })
-- Auto-refresh code lenses
if not client then
return
end
local group = vim.api.nvim_create_augroup(string.format('lsp-%s-%s', bufnr, client.id), {})
if client.server_capabilities.codeLensProvider then
vim.api.nvim_create_autocmd({ 'InsertLeave', 'BufWritePost', 'TextChanged' }, {
group = group,
callback = function()
vim.lsp.codelens.refresh { bufnr = bufnr }
end,
buffer = bufnr,
})
vim.lsp.codelens.refresh { bufnr = bufnr }
end
end,
})
vim.api.nvim_exec_autocmds('FileType', {})
end,
},
{
'nvimtools/none-ls.nvim',
event = 'VeryLazy',
config = function()
local null = require('null-ls')
null.setup {
sources = {
null.builtins.diagnostics.puppet_lint,
null.builtins.diagnostics.yamllint,
},
}
end,
},
}

155
nvim/lua/plugins/mini.lua Normal file
View file

@ -0,0 +1,155 @@
return {
{
'echasnovski/mini.nvim',
event = 'VeryLazy',
config = function()
require('mini.ai').setup()
require('mini.comment').setup()
require('mini.pairs').setup()
require('mini.statusline').setup {
content = {
active = function()
local mode, mode_hl = MiniStatusline.section_mode {}
local git = function()
local summary = vim.b.gitsigns_head
if summary == nil then
return ''
end
summary = '~' .. summary
return summary == '' and '' or summary
end
local diff = function()
local summary = vim.b.gitsigns_status
if summary == nil then
return ''
end
return summary
end
local diagnostics = MiniStatusline.section_diagnostics { trunc_width = 75 }
local filename = MiniStatusline.section_filename { trunc_width = 140 }
local search = MiniStatusline.section_searchcount { trunc_width = 75 }
return MiniStatusline.combine_groups {
{ hl = mode_hl, strings = { mode } },
'%<', -- Mark general truncate point
{ hl = 'MiniStatuslineFilename', strings = { filename } },
'%=', -- End left alignment
{ hl = 'MiniStatusDevinfo', strings = { git(), diff(), diagnostics } },
{ hl = mode_hl, strings = { search } },
}
end,
inactive = function()
local filename = MiniStatusline.section_filename { trunc_width = 140 }
return MiniStatusline.combine_groups {
{ hl = 'MiniStatuslineFilename', strings = { filename } },
}
end,
},
}
vim.opt.showmode = false
local miniclue = require('mini.clue')
miniclue.setup {
triggers = {
{ mode = 'n', keys = '<Leader>' },
{ mode = 'n', keys = 'g' },
{ mode = 'n', keys = "'" },
{ mode = 'n', keys = '`' },
{ mode = 'n', keys = '"' },
{ mode = 'n', keys = '<C-w>' },
{ mode = 'n', keys = 'z' },
},
clues = {
miniclue.gen_clues.g(),
miniclue.gen_clues.marks(),
miniclue.gen_clues.registers(),
miniclue.gen_clues.windows(),
miniclue.gen_clues.z(),
},
}
-- Add surrounding with sa
-- Delete surrounding with sd.
-- Replace surrounding with sr.
-- Find surrounding with sf or sF (move cursor right or left).
-- Highlight surrounding with sh<char>.
-- 'f' - function call (string of alphanumeric symbols or '_' or '.' followed by balanced '()'). In "input" finds function call, in "output" prompts user to enter function name.
-- 't' - tag. In "input" finds tag with same identifier, in "output" prompts user to enter tag name.
-- All symbols in brackets '()', '[]', '{}', '<>".
-- '?' - interactive. Prompts user to enter left and right parts.
require('mini.surround').setup()
require('mini.trailspace').setup()
vim.api.nvim_create_user_command('Trim', function()
require('mini.trailspace').trim()
end, {})
-- prefix \
-- `b` - |'background'|.
-- `c` - |'cursorline'|.
-- `C` - |'cursorcolumn'|.
-- `d` - diagnostic (via |vim.diagnostic.enable()| and |vim.diagnostic.disable()|).
-- `h` - |'hlsearch'| (or |v:hlsearch| to be precise).
-- `i` - |'ignorecase'|.
-- `l` - |'list'|.
-- `n` - |'number'|.
-- `r` - |'relativenumber'|.
-- `s` - |'spell'|.
-- `w` - |'wrap'|.
require('mini.basics').setup {
mappings = {
windows = true,
},
}
local map = require('mini.map')
map.setup {
symbols = {
scroll_line = '',
scroll_view = '',
},
integrations = {
map.gen_integration.builtin_search(),
map.gen_integration.diagnostic(),
map.gen_integration.gitsigns(),
},
window = {
show_integration_count = false,
winblend = 0,
width = 5,
},
}
vim.keymap.set('n', '<leader>nm', map.toggle, { noremap = true, desc = 'minimap open' })
-- gS
require('mini.splitjoin').setup {
detect = { separator = '[,;\n]' },
}
-- Replace text with register 'gr',
-- Sort text 'gs',
require('mini.operators').setup()
require('mini.jump2d').setup { mappings = { start_jumping = '<leader>S' } }
local indent = require('mini.indentscope')
indent.setup {
draw = { delay = 0 },
}
indent.gen_animation.none()
require('mini.notify').setup {
window = {
winblend = 0,
config = {
anchor = 'SE',
border = 'double',
row = vim.o.lines,
},
},
}
end,
},
}

220
nvim/lua/plugins/misc.lua Normal file
View file

@ -0,0 +1,220 @@
return {
{
'danymat/neogen',
keys = {
{ '<leader>nd', '<cmd>Neogen<CR>', { noremap = true, silent = true, desc = 'Neogen - gen comments' } },
},
},
{
'akinsho/toggleterm.nvim',
event = 'VeryLazy',
opts = {
open_mapping = [[<C-\>]],
direction = 'float',
close_on_exit = true,
autochdir = true,
},
},
{
'jinh0/eyeliner.nvim',
event = 'VeryLazy',
config = function()
vim.api.nvim_set_hl(0, 'EyelinerPrimary', { underline = true })
vim.api.nvim_set_hl(0, 'EyelinerSecondary', { underline = true })
end,
},
{ 'OXY2DEV/markview.nvim', event = 'VeryLazy' },
{ 'tiagovla/scope.nvim', event = 'VeryLazy' },
{
'chrisgrieser/nvim-early-retirement',
event = 'VeryLazy',
opts = { minimumBufferNum = 6 },
},
{
'AckslD/nvim-neoclip.lua',
event = 'VeryLazy',
dependencies = {
'nvim-telescope/telescope.nvim',
},
opts = {
default_register = '+',
},
config = function(_, opts)
require('neoclip').setup(opts)
vim.keymap.set(
'n',
'<leader>fp',
'<cmd>Telescope neoclip<CR>',
{ noremap = true, silent = true, desc = 'Pick clipboard history' }
)
end,
},
{
'leath-dub/snipe.nvim',
event = 'VeryLazy',
opts = {
ui = {
position = 'center',
},
sort = 'last',
},
config = function(_, opts)
local snipe = require('snipe')
snipe.setup(opts)
vim.keymap.set(
'n',
'<leader>fb',
snipe.open_buffer_menu,
{ noremap = true, silent = true, desc = 'Pick buffers (snipe.nvim)' }
)
end,
},
{
'sindrets/diffview.nvim',
event = 'VeryLazy',
opts = {
enhanced_diff_hl = true,
default_args = {
DiffviewOpen = { '--imply-local' },
},
},
config = function()
vim.keymap.set('n', '<leader>nb', vim.cmd.DiffviewOpen, { noremap = true, desc = 'diffview open' })
end,
},
{
'NeogitOrg/neogit',
opts = {
disable_builtin_notifications = true,
integrations = {
diffview = true,
telescope = true,
fzf_lua = true,
},
},
keys = {
{
'<leader>ng',
function()
require('neogit').open()
end,
{ noremap = true, silent = true, desc = 'Neogit' },
},
},
},
{
'stevearc/oil.nvim',
opts = {
watch_for_changes = true,
columns = {
'permissions',
'size',
},
view_options = {
show_hidden = true,
},
keymaps = {
['wq'] = 'actions.close',
},
},
keys = {
{
'<leader>nc',
function()
require('oil').toggle_float()
end,
{ noremap = true, silent = true },
},
},
},
{
'mbbill/undotree',
event = 'VeryLazy',
keys = {
{ '<leader>nu', '<cmd>UndotreeToggle<cr>' },
},
config = function()
vim.g.undotree_ShortIndicators = 1
vim.g.undotree_SetFocusWhenToggle = 1
end,
},
{
'EdenEast/nightfox.nvim',
lazy = false,
priority = 10000,
opts = {
options = {
transparent = true,
terminal_colors = false,
},
},
config = function(_, opts)
require('nightfox').setup(opts)
vim.cmd('colorscheme terafox')
vim.api.nvim_set_hl(0, 'MiniNotifyNormal', { bg = 'none' })
vim.api.nvim_set_hl(0, 'MiniNotifyTitle', { bg = 'none' })
vim.api.nvim_set_hl(0, 'MiniNotifyBorder', { bg = 'none' })
vim.api.nvim_set_hl(0, 'MiniMapNormal', { bg = 'none' })
vim.api.nvim_set_hl(0, 'MiniClueNormal', { bg = 'none' })
vim.api.nvim_set_hl(0, 'StatusLine', { bg = 'none' })
vim.api.nvim_set_hl(0, 'StatusLineNC', { bg = 'none' })
vim.api.nvim_set_hl(0, 'GitSignsAdd', { fg = 'green', bold = true })
vim.api.nvim_set_hl(0, 'GitSignsDelete', { fg = 'red', bold = true })
vim.api.nvim_set_hl(0, 'GitSignsChange', { fg = 'green', bold = true })
end,
},
{
'lewis6991/gitsigns.nvim',
event = 'VeryLazy',
opts = {
signcolumn = false,
numhl = true,
on_attach = function()
local gs = package.loaded.gitsigns
vim.keymap.set('n', '<leader>gg', gs.preview_hunk, { desc = 'git preview hunk' })
vim.keymap.set('n', '<leader>gr', gs.reset_hunk, { desc = 'git reset hunk' })
vim.keymap.set('n', '<leader>gb', function()
gs.blame_line { full = true }
end, { desc = 'git blame_line' })
vim.keymap.set('v', '<leader>gr', function()
gs.reset_hunk { vim.fn.line('.'), vim.fn.line('v') }
end, { desc = 'git reset hunk' })
-- Navigation
vim.keymap.set('n', ']g', function()
if vim.wo.diff then
return ']c'
end
vim.schedule(function()
gs.next_hunk()
end)
return '<Ignore>'
end, { expr = true })
vim.keymap.set('n', '[g', function()
if vim.wo.diff then
return '[c'
end
vim.schedule(function()
gs.prev_hunk()
end)
return '<Ignore>'
end, { expr = true })
end,
},
},
{
'hedyhli/outline.nvim',
cmd = { 'Outline', 'OutlineOpen' },
keys = {
{ '<leader>no', '<cmd>Outline<CR>', desc = 'Toggle outline' },
},
opts = {
outline_window = {
position = 'left',
width = 30,
auto_close = true,
},
},
},
}

View file

@ -0,0 +1,95 @@
return {
{
'nvim-telescope/telescope-fzf-native.nvim',
event = 'VeryLazy',
build = 'make',
},
{
'nvim-telescope/telescope.nvim',
event = 'VeryLazy',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-telescope/telescope-fzf-native.nvim',
'nvim-tree/nvim-web-devicons',
'nvim-treesitter/nvim-treesitter',
'tiagovla/scope.nvim',
},
config = function()
local telescope = require('telescope')
local actions = require('telescope.actions')
telescope.setup {
defaults = {
layout_strategy = 'vertical',
layout_config = { width = 0.90 },
prompt_title = false,
results_title = false,
preview_title = false,
vimgrep_arguments = {
'rg',
'-L',
'--color=never',
'--no-heading',
'--hidden',
'--with-filename',
'--line-number',
'--column',
'--smart-case',
},
preview = { treesitter = true },
path_display = { 'truncate' },
mappings = {
i = {
['wq'] = actions.close,
['<Esc>'] = actions.close,
['<C-k>'] = actions.move_selection_previous,
['<C-j>'] = actions.move_selection_next,
},
},
},
}
telescope.load_extension('fzf')
telescope.load_extension('scope')
local b = require('telescope.builtin')
-- Fall back to find_files if not in a git repo
local project_files = function()
local opts = {} -- define here if you want to define something
local ok = pcall(b.git_files, opts)
if not ok then
b.find_files(opts)
end
end
vim.keymap.set('n', '<leader>ff', project_files, { noremap = true, silent = true, desc = 'Fuzzy find git files' })
vim.keymap.set('n', '<leader>fg', b.find_files, { noremap = true, silent = true, desc = 'Fuzzy find files' })
vim.keymap.set(
'n',
'<leader>fc',
b.command_history,
{ noremap = true, silent = true, desc = 'Fuzzy find command_history' }
)
vim.keymap.set('n', '<leader>fa', b.live_grep, { noremap = true, silent = true, desc = 'Fuzzy find grep' })
vim.keymap.set(
'n',
'<leader>f8',
b.grep_string,
{ noremap = true, silent = true, desc = 'Fuzzy find grep current word' }
)
vim.keymap.set('n', '<leader>fq', b.quickfix, { noremap = true, silent = true, desc = 'Fuzzy find quickfix' })
vim.keymap.set('n', '<leader>f?', b.builtin, { noremap = true, silent = true, desc = 'See all pickers' })
vim.keymap.set('n', '<leader>f<BS>', b.resume, { noremap = true, silent = true, desc = 'Fuzzy find resume' })
vim.keymap.set(
'n',
'<leader>fs',
b.lsp_document_symbols,
{ noremap = true, silent = true, desc = 'Fuzzy find treesitter objects' }
)
vim.keymap.set(
'n',
'<leader><leader>',
'<cmd>Telescope scope buffers<cr>',
{ noremap = true, silent = true, desc = 'Pick buffers (scope.nvim)' }
)
end,
},
}

View file

@ -0,0 +1,77 @@
return {
{
'nvim-treesitter/nvim-treesitter',
event = 'VeryLazy',
dependencies = {
'nvim-treesitter/nvim-treesitter-context',
'nvim-treesitter/nvim-treesitter-textobjects',
},
config = function()
require('nvim-treesitter.configs').setup {
ensure_installed = {},
highlight = {
enable = true,
disable = function(_, buf)
local max_filesize = 100 * 1024 -- 100 KiB
local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf))
if ok and stats and stats.size > max_filesize then
return true
end
end,
additional_vim_regex_highlighting = false,
},
indent = {
enable = true,
},
autopairs = {
enable = true,
},
textobjects = {
select = {
enable = true,
lookahead = true,
keymaps = {
['af'] = '@function.outer',
['if'] = '@function.inner',
['aa'] = '@statement.outer',
['ia'] = '@parameter.inner',
},
},
move = {
enable = true,
goto_next_start = {
[']a'] = '@parameter.inner',
[']f'] = '@function.outer',
},
goto_previous_start = {
['[a'] = '@parameter.inner',
['[f'] = '@function.outer',
},
},
swap = {
enable = true,
swap_next = {
['s]'] = '@parameter.inner',
},
swap_previous = {
['s['] = '@parameter.inner',
},
},
},
incremental_selection = {
enable = true,
keymaps = {
init_selection = '<CR>',
node_incremental = '<TAB>',
node_decremental = '<S-TAB>',
},
},
}
require('treesitter-context').setup {
max_lines = 2,
min_window_height = 50,
}
end,
},
}