Update neovim config to use lazyvim

This commit is contained in:
Gabriel Brown
2026-05-16 14:26:09 -04:00
parent 19b8ec2542
commit 372a0f60e5
36 changed files with 592 additions and 1522 deletions
-272
View File
@@ -1,272 +0,0 @@
return {
'yetone/avante.nvim',
-- if you want to build from source then do `make BUILD_FROM_SOURCE=true`
-- ⚠️ must add this setting! ! !
build = vim.fn.has('win32') ~= 0
and 'powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false'
or 'make',
event = 'VeryLazy',
version = false, -- Never set this value to '*'! Never!
---@module 'avante'
---@type avante.Config
opts = {
instructions_file = 'avante.md',
provider = 'claude',
auto_suggestions_provider = 'claude',
providers = {
claude = {
endpoint = 'https://api.anthropic.com',
model = 'claude-sonnet-4-6',
timeout = 30000,
extra_request_body = {
temperature = 0.75,
max_tokens = 20480,
},
},
openai = {
endpoint = 'https://api.openai.com/v1',
model = 'gpt-5.4',
extra_request_body = {
temperature = 1,
max_completion_tokens = 8192,
},
},
},
acp_providers = {
["claude-code"] = {
command = "bunx",
args = { "@agentclientprotocol/claude-agent-acp" },
env = {
NODE_NO_WARNINGS = "1",
ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY"),
},
},
},
rag_service = {
enabled = false,
host_path = '/home/gib/Documents/Code',
runner = 'docker',
llm = {
provider = 'openai',
endpoint = 'https://api.openai.com/v1',
api_key = 'OPENAI_API_KEY',
model = 'gpt-5-mini',
extra = {
temperature = 1,
max_tokens = 512,
},
},
embed = {
provider = 'openai',
endpoint = 'https://api.openai.com/v1',
api_key = 'OPENAI_API_KEY',
model = 'text-embedding-3-large',
extra = nil,
},
docker_extra_args = '',
},
web_search_engine = {
provider = 'searxng',
proxy = nil,
},
system_prompt = function()
local hub = require('mcphub').get_hub_instance()
return hub and hub:get_active_servers_prompt() or ''
end,
custom_tools = function()
return {
require('mcphub.extensions.avante').mcp_tool(),
}
end,
behaviour = {
auto_suggestions = false,
auto_set_highlight_group = true,
auto_set_keymaps = true,
auto_apply_diff_after_generation = false,
support_paste_from_clipboard = true,
minimize_diff = true,
enable_token_counting = true,
auto_approve_tool_permissions = true,
},
prompt_logger = {
enabled = true,
log_dir = vim.fn.stdpath("cache") .. "/avante_prompts", -- directory where logs are saved
fortune_cookie_on_success = false, -- shows a random fortune after each logged prompt (requires `fortune` installed)
next_prompt = {
normal = "<C-n>", -- load the next (newer) prompt log in normal mode
insert = "<C-n>",
},
prev_prompt = {
normal = "<C-p>", -- load the previous (older) prompt log in normal mode
insert = "<C-p>",
},
},
mappings = {
--- @class AvanteConflictMappings
diff = {
ours = 'co',
theirs = 'ct',
all_theirs = 'ca',
both = 'cb',
cursor = 'cc',
next = ']x',
prev = '[x',
},
suggestion = {
accept = '<M-l>',
next = '<M-]>',
prev = '<M-[>',
dismiss = '<C-]>',
},
jump = {
next = ']]',
prev = '[[',
},
submit = {
normal = '<CR>',
insert = '<C-s>',
},
cancel = {
normal = { '<C-c>', '<Esc>', 'q' },
insert = { '<C-c>' },
},
sidebar = {
apply_all = 'A',
apply_cursor = 'a',
retry_user_request = 'r',
edit_user_request = 'e',
switch_windows = '<Tab>',
reverse_switch_windows = '<S-Tab>',
remove_file = 'd',
add_file = '@',
close = { '<Esc>', 'q' },
close_from_input = nil,
},
},
selection = {
enabled = true,
hint_display = 'delayed',
},
hints = { enabled = true },
windows = {
---@type "right" | "left" | "top" | "bottom"
position = "right", -- the position of the sidebar
wrap = true, -- similar to vim.o.wrap
width = 30, -- default % based on available width
sidebar_header = {
enabled = true, -- true, false to enable/disable the header
align = "center", -- left, center, right for title
rounded = true,
},
spinner = {
editing = { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
generating = { "·", "", "", "", "", "" }, -- Spinner characters for the 'generating' state
thinking = { "🤯", "🙄" }, -- Spinner characters for the 'thinking' state
},
input = {
prefix = "> ",
height = 8, -- Height of the input window in vertical layout
},
edit = {
border = "rounded",
start_insert = true, -- Start insert mode when opening the edit window
},
ask = {
floating = false, -- Open the 'AvanteAsk' prompt in a floating window
start_insert = true, -- Start insert mode when opening the ask window
border = "rounded",
---@type "ours" | "theirs"
focus_on_apply = "ours", -- which diff to focus after applying
},
},
highlights = {
diff = {
current = 'DiffText',
incoming = 'DiffAdd',
},
},
--- @class AvanteConflictUserConfig
diff = {
autojump = true,
---@type string | fun(): any
list_opener = 'copen',
override_timeoutlen = 500,
},
suggestion = {
debounce = 600,
throttle = 600,
},
},
dependencies = {
{ 'nvim-lua/plenary.nvim' },
{ 'MunifTanjim/nui.nvim' },
{ 'hrsh7th/nvim-cmp' },
{ 'nvim-treesitter/nvim-treesitter' },
{ 'stevearc/dressing.nvim' },
{ 'nvim-tree/nvim-web-devicons' },
{ 'folke/snacks.nvim' },
{
'ravitemer/mcphub.nvim',
build = "bun install -g mcp-hub@latest",
config = function()
require'mcphub'.setup({
config = vim.fn.expand('/home/gib/.config/mcphub/servers.json'),
port = 37373,
shutdown_delay = 60 * 10 * 000,
use_bundled_binary = false,
mcp_request_timeout = 60000,
auto_approve = true,
auto_toggle_mcp_servers = true,
extensions = {
avante = {
make_slash_commands = true,
},
},
native_servers = {},
ui = {
window = {
width = 0.8,
height = 0.8,
align = 'center',
relative = 'editor',
zindex = 50,
border = 'rounded',
},
wo = {
winhl = 'Normal:MCPHubNormal,FloatBorder:MCPHubBorder',
},
},
log = {
level = vim.log.levels.WARN,
to_file = false,
file_path = nil,
prefix = 'MCPHub',
},
})
end
},
{
-- support for image pasting
'HakonHarnes/img-clip.nvim',
event = 'VeryLazy',
opts = {
-- recommended settings
default = {
embed_image_as_base64 = false,
prompt_for_file_name = false,
drag_and_drop = {
insert_mode = true,
},
},
},
},
{
'MeanderingProgrammer/render-markdown.nvim',
opts = {
file_types = { 'markdown', 'Avante' },
},
ft = { 'markdown', 'Avante' },
},
},
}
-21
View File
@@ -1,21 +0,0 @@
return {
'romgrk/barbar.nvim',
dependencies = {
'lewis6991/gitsigns.nvim',
'nvim-tree/nvim-web-devicons',
},
init = function() vim.g.barbar_auto_setup = false end,
opts = {
animation = true,
insert_at_start = true,
},
keys = {
{ "<C-h>", ":BufferPrevious<CR>", mode = "n", silent = true, desc = "Go to previous tab" },
{ "<C-l>", ":BufferNext<CR>", mode = "n", silent = true, desc = "Go to next tab" },
{ "<C-j>", ":BufferMovePrevious<CR>", mode = "n", silent = true, desc = "Move tab to previous position" },
{ "<C-k>", ":BufferMoveNext<CR>", mode = "n", silent = true, desc = "Move tab to next position" },
{ "<C-q>", ":BufferClose<CR>", mode = "n", silent = true, desc = "Close current tab" },
{ "<C-a>", ":BufferCloseAllButCurrent<CR>", mode = "n", silent = true, desc = "Close all tabs except current" },
},
version = '^1.0.0', -- optional: only update when a new 1.x version is released
}
-20
View File
@@ -1,20 +0,0 @@
return {
'laytan/cloak.nvim',
config = function()
require'cloak'.setup({
enabled = false,
cloak_character = "",
highlight_group = "Comment",
patterns = {
{
file_pattern = {
'.env*',
'wrangler.toml',
'.dev.vars',
},
cloak_pattern = "=.+"
},
},
})
end,
}
-22
View File
@@ -1,22 +0,0 @@
return {
'folke/tokyonight.nvim',
lazy = false,
priority = 1000,
opts = {
style = 'moon',
transparent = true,
on_colors = function(colors)
colors.comment = '#a0a7c5'
colors.fg_gutter = '#787f93'
colors.terminal_black = '#828bb8'
end,
on_highlights = function(hl, c)
hl['@markup.raw.markdown_inline'] = { bg = c.bg_highlight, fg = c.fg }
hl['RenderMarkdownCodeInline'] = { bg = c.bg_highlight, fg = c.fg }
end,
},
config = function(_,opts)
require'tokyonight'.setup(opts)
vim.cmd.colorscheme('tokyonight-moon')
end,
}
@@ -0,0 +1,31 @@
return {
{
"folke/tokyonight.nvim",
opts = {
style = "moon",
transparent = true,
on_colors = function(colors)
colors.comment = "#a0a7c5"
colors.fg_gutter = "#787f93"
colors.terminal_black = "#828bb8"
end,
on_highlights = function(highlights, colors)
-- Fix inline code visibility in markdown
highlights["@markup.raw.markdown_inline"] = {
bg = colors.terminal_black,
fg = colors.fg,
}
highlights["RenderMarkdownCodeInline"] = {
bg = colors.terminal_black,
fg = colors.fg,
}
end,
},
},
{
"LazyVim/LazyVim",
opts = {
colorscheme = "tokyonight",
},
},
}
+3
View File
@@ -0,0 +1,3 @@
-- Extras are imported in lua/config/lazy.lua to satisfy LazyVim's required load order:
-- lazyvim.plugins → lazyvim.plugins.extras.* → user plugins
return {}
-32
View File
@@ -1,32 +0,0 @@
return {
'3rd/image.nvim',
dependencies = {
'nvim-treesitter/nvim-treesitter',
},
config = function()
require'image'.setup({
backend = "kitty",
integrations = {
markdown = {
enabled = true,
clear_in_insert_mode = false,
download_remote_images = true,
only_render_image_at_cursor = false,
filetypes = { "markdown", "vimwiki" },
},
neorg = {
enabled = true,
clear_in_insert_mode = false,
download_remote_images = true,
only_render_image_at_cursor = false,
filetypes = { "norg" },
},
},
max_width = nil,
max_height = nil,
max_width_window_percentage = nil,
max_height_window_percentage = 50,
kitty_method = "normal",
})
end,
}
-37
View File
@@ -1,37 +0,0 @@
return {
'kawre/leetcode.nvim',
build = ':TSUpdate html',
dependencies = {
'nvim-lua/plenary.nvim',
'MunifTanjim/nui.nvim',
},
opts = {
arg = "lc",
lang = 'typescript',
injector = {
["python3"] = {
imports = function(default_imports)
vim.list_extend(default_imports, { "from .leetcode import *" })
return default_imports
end,
after = { "def test():", " print('test')" },
},
},
picker = { provider = 'telescope' },
image_support = true,
},
}
-- Language Options:
-- Bash: 'bash'
-- C: 'c'
-- C++: 'cpp'
-- C#: 'csharp'
-- Go: 'golang'
-- Java: 'java'
-- JavaScript: 'javascript'
-- Kotlin: 'kotlin'
-- PHP: 'php'
-- Python: 'python'
-- Rust: 'rust'
-- Swift: 'swift'
-- TypeScript: 'typescript'
+27 -386
View File
@@ -1,391 +1,32 @@
return {
'mason-org/mason-lspconfig.nvim',
dependencies = {
{ 'neovim/nvim-lspconfig' },
{
'mason-org/mason.nvim',
opts = {
ui = {
icons = {
package_installed = "",
package_pending = "",
package_uninstalled = "",
},
},
{
"neovim/nvim-lspconfig",
opts = {
servers = {
-- CSS / HTML / Tailwind
cssls = {},
html = {},
tailwindcss = {},
-- Shell / Config
bashls = {},
yamlls = {},
-- Docker
dockerls = {},
docker_compose_language_service = {},
-- Systems languages
gopls = {},
rust_analyzer = {},
-- Web frameworks
svelte = {},
graphql = {},
-- Database / ORM
prismals = {},
sqlls = {},
-- PHP
intelephense = {},
-- Python
pyright = {},
},
},
{
'hrsh7th/nvim-cmp',
event = { 'InsertEnter', 'CmdlineEnter' },
config = function()
local cmp = require 'cmp'
local lspkind = require 'lspkind'
local cmp_select = { behavior = cmp.SelectBehavior.Select }
local luasnip = require 'luasnip'
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
{ name = 'supermaven' },
--{ name = 'copilot' },
}, {
--{ name = 'buffer', keyword_length = 4 },
{ name = 'path' },
--{ name = 'dotenv' },
--{ name = 'emoji' },
}),
formatting = {
format = lspkind.cmp_format({
mode = 'symbol',
maxwidth = { menu = 50, abbr = 50 },
symbol_map = {
Copilot = '',
Supermaven = "",
},
ellipsis_char = '...',
show_labelDetails = true,
before = function(_, vim_item)
return vim_item
end,
}),
},
mapping = cmp.mapping.preset.insert({
['<C-p>'] = cmp.mapping.select_prev_item(cmp_select),
['<C-n>'] = cmp.mapping.select_next_item(cmp_select),
['<C-y>'] = cmp.mapping.confirm({ select = true }),
['<C-Space>'] = cmp.mapping.complete(),
['<C-b>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-e>'] = cmp.mapping.abort(),
}),
preselect = cmp.PreselectMode.Item,
completion = {
completeopt = 'menu,menuone,noinsert',
},
})
cmp.setup.filetype('gitcommit', {
sources = cmp.config.sources({
{ name = 'git' },
}, {
{ name = 'buffer' },
}),
})
cmp.setup.filetype({ 'json', 'jsonc' }, {
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'npm' },
}, {
{ name = 'buffer', keyword_length = 4 },
}),
})
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,
},
{ 'hrsh7th/cmp-nvim-lsp' },
{ 'nvim-lua/plenary.nvim' },
{ 'hrsh7th/cmp-path' },
{
'supermaven-inc/supermaven-nvim',
config = function()
require'supermaven-nvim'.setup({
disable_inline_completion = true,
disable_keymaps = true,
})
end,
},
--{
--'zbirenbaum/copilot-cmp',
--config = function()
--require 'copilot_cmp'.setup()
--end,
--},
{ 'hrsh7th/cmp-buffer' },
{ 'hrsh7th/cmp-emoji' },
{ 'SergioRibera/cmp-dotenv' },
{ 'saadparwaiz1/cmp_luasnip' },
{ 'onsails/lspkind.nvim' },
{ 'rafamadriz/friendly-snippets' },
{
'petertriho/cmp-git',
config = function()
require 'cmp_git'.setup({})
end,
},
{
'David-Kunz/cmp-npm',
config = function()
require 'cmp-npm'.setup({})
end,
},
{
'j-hui/fidget.nvim',
config = function()
require 'fidget'.setup({})
end,
},
{
'stevearc/conform.nvim',
config = function()
require 'conform'.setup({
formatters_by_ft = {
cs = { 'csharpier', 'lsp' },
javascript = { 'prettierd', 'prettier' },
javascriptreact = { 'prettierd', 'prettier' },
typescript = { 'prettierd', 'prettier' },
typescriptreact = { 'prettierd', 'prettier' },
json = { 'prettierd', 'prettier' },
html = { 'prettierd', 'prettier' },
css = { 'prettierd', 'prettier' },
lua = { 'stylua' },
},
})
vim.api.nvim_create_user_command(
'Format',
function(args)
local range
if args.count ~= -1 then
local start_line = vim.fn.line("'<")
local end_line = vim.fn.line("'>")
range = { start = { start_line, 0 }, ["end"] = { end_line, 0 } }
end
require 'conform'.format({
async = true,
lsp_fallback = true,
range = range,
})
end, { range = true, desc = "Format current buffer or range" })
end,
keys = {
{
'<leader>fk',
':Format<CR>',
mode = { 'n', 'v' },
silent = true,
desc = "Format with conform",
},
},
},
{
'L3MON4D3/LuaSnip',
version = 'v2.*',
build = 'make install_jsregexp',
},
--{
--'zbirenbaum/copilot.lua',
--cmd = 'Copilot',
--event = 'InsertEnter',
--config = function()
--require 'copilot'.setup({
---- Disable native ghost text so copilot-cmp can manage suggestions instead
--suggestion = { enabled = false },
--panel = { enabled = false },
--})
--end,
--},
--{ 'AndreM222/copilot-lualine' },
{
'windwp/nvim-autopairs',
event = 'InsertEnter',
config = true,
},
{
'windwp/nvim-ts-autotag',
config = function()
require 'nvim-ts-autotag'.setup({})
end,
},
{ 'hrsh7th/cmp-cmdline' },
},
config = function()
vim.diagnostic.config({
float = {
focusable = false,
style = 'minimal',
border = 'rounded',
source = true,
header = '',
prefix = '',
},
})
require 'mason'.setup({})
local cmp = require 'cmp'
local cmp_lsp = require 'cmp_nvim_lsp'
local lspconfig = require 'lspconfig'
local capabilities = vim.tbl_deep_extend(
'force',
{},
vim.lsp.protocol.make_client_capabilities(),
cmp_lsp.default_capabilities()
)
local cmp_autopairs = require 'nvim-autopairs.completion.cmp'
cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done())
--cmp.event:on('menu_opened', function()
--vim.b.copilot_suggestion_hidden = true
--end)
--cmp.event:on('menu_closed', function()
--vim.b.copilot_suggestion_hidden = false
--end)
require 'mason-lspconfig'.setup({
ensure_installed = {
'angularls',
'bashls',
'clangd',
'cssls',
'css_variables',
'cssmodules_ls',
'docker_compose_language_service',
'docker_language_server',
'dockerls',
'eslint',
'gopls',
'graphql',
'html',
'htmx',
'intelephense',
'jsonls',
'kotlin_lsp',
'ltex',
'ltex_plus',
'lua_ls',
'markdown_oxide',
'phpactor',
'postgres_lsp',
'prismals',
'pylyzer',
'pyright',
'remark_ls',
'rust_analyzer',
'sqlls',
'svelte',
'tailwindcss',
'tinymist',
'ts_ls',
--'vtsls',
'yamlls',
},
handlers = {
function(server_name)
lspconfig[server_name].setup({
capabilities = capabilities,
})
end,
zls = function()
lspconfig.zls.setup({
root_dir = lspconfig.util.root_pattern('.git', 'build.zig', 'zls.json'),
settings = {
zls = {
enable_inlay_hints = true,
enable_snippets = true,
warn_style = true,
},
},
})
vim.g.zig_fmt_parse_errors = 0
vim.g.zig_fmt_autosave = 0
end,
['vtsls'] = function()
lspconfig.vtsls.setup({
capabilities = capabilities,
root_dir = lspconfig.util.root_pattern('turbo.json', 'pnpm-workspace.yaml', '.git'),
settings = {
vtsls = {
autoUseWorkspaceTsdk = true,
experimental = {
completion = {
enableServerSideFuzzyMatch = true,
},
},
},
typescript = {
updateImportsOnFileMove = { enabled = 'always' },
suggest = { completeFunctionCalls = true },
format = {
indentSize = 2,
tabSize = 2,
convertTabsToSpaces = true,
},
preferences = {
importModuleSpecifier = 'non-relative',
includePackageJsonAutoImports = 'auto',
},
inlayHints = {
parameterNames = { enabled = 'literals' },
parameterTypes = { enabled = true },
variableTypes = { enabled = true },
propertyDeclarationTypes = { enabled = true },
functionLikeReturnTypes = { enabled = true },
enumMemberValues = { enabled = true },
},
},
javascript = {
updateImportsOnFileMove = { enabled = 'always' },
suggest = { completeFunctionCalls = true },
format = {
indentSize = 2,
tabSize = 2,
convertTabsToSpaces = true,
},
inlayHints = {
parameterNames = { enabled = 'literals' },
parameterTypes = { enabled = true },
variableTypes = { enabled = true },
propertyDeclarationTypes = { enabled = true },
functionLikeReturnTypes = { enabled = true },
enumMemberValues = { enabled = true },
},
},
},
})
end,
['lua_ls'] = function()
lspconfig.lua_ls.setup({
capabilities = capabilities,
settings = {
Lua = {
runtime = { version = 'LuaJIT' },
diagnostics = { globals = { 'vim' } },
workspace = {
library = vim.api.nvim_get_runtime_file('', true),
checkThirdParty = false,
maxPreload = 100000,
preloadFileSize = 10000,
},
telemetry = { enable = false },
format = {
enable = true,
defaultConfig = {
indent_style = 'space',
indent_size = '2',
},
},
},
},
})
end,
},
})
end,
}
-71
View File
@@ -1,71 +0,0 @@
return {
'nvim-lualine/lualine.nvim',
config = function()
require'lualine'.setup({
options = {
icons_enabled = true,
theme = 'tokyonight-moon',
component_separators = { left = '', right = ''},
section_separators = { left = '', right = ''},
disabled_filetypes = {
statusline = {},
winbar = {},
},
ignore_focus = {},
always_divide_middle = true,
always_show_tabline = true,
globalstatus = false,
refresh = {
statusline = 1000,
tabline = 1000,
winbar = 1000,
refresh_time = 16,
events = {
'WinEnter',
'BufEnter',
'BufWritePost',
'SessionLoadPost',
'FileChangedShellPost',
'VimResized',
'Filetype',
'CursorMoved',
'CursorMovedI',
'ModeChanged',
},
}
},
sections = {
lualine_a = {'mode'},
lualine_b = {
'branch',
'diff',
{
'diagnostics',
sources = { "nvim_diagnostic" },
symbols = { error = '', warn = '', info = '', hint = '' }
},
},
lualine_c = {'filename'},
lualine_x = {'copilot', 'encoding', 'fileformat', 'filetype'},
lualine_y = {'progress'},
lualine_z = {'location'}
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = {'filename'},
lualine_x = {'location'},
lualine_y = {},
lualine_z = {}
},
tabline = {},
winbar = {},
inactive_winbar = {},
extensions = {}
})
end,
dependencies = {
{ 'nvim-tree/nvim-web-devicons' },
{ 'folke/tokyonight.nvim' },
},
}
+79
View File
@@ -0,0 +1,79 @@
return {
-- Mask .env values in the buffer
{
"laytan/cloak.nvim",
event = "BufReadPre",
opts = {
enabled = true,
cloak_character = "*",
patterns = {
{
file_pattern = ".env*",
cloak_pattern = "=.+",
},
},
},
},
-- Terminal image rendering via Kitty backend
{
"3rd/image.nvim",
opts = {
backend = "kitty",
integrations = {
markdown = {
enabled = true,
clear_in_insert_mode = false,
download_remote_images = true,
only_render_image_at_cursor = false,
filetypes = { "markdown", "vimwiki" },
},
typst = { enabled = true, filetypes = { "typst" } },
},
max_height_window_percentage = 50,
window_overlap_clear_enabled = false,
window_overlap_clear_ft_ignore = { "cmp_menu", "cmp_docs", "" },
},
},
-- Paste images into markdown/typst from clipboard or drag-and-drop
{
"HakonHarnes/img-clip.nvim",
event = "BufEnter",
opts = {
default = {
embed_image_as_base64 = false,
prompt_for_file_name = false,
drag_and_drop = {
insert_mode = true,
},
use_absolute_path = false,
},
},
},
-- Render markdown formatting in-buffer
{
"MeanderingProgrammer/render-markdown.nvim",
opts = {},
},
-- Live preview for Typst documents
{
"chomosuke/typst-preview.nvim",
lazy = false,
version = "1.*",
build = function()
require("typst-preview").update()
end,
},
-- LeetCode integration
{
"kawre/leetcode.nvim",
cmd = "Leet",
opts = {
lang = "typescript",
},
},
}
+1
View File
@@ -0,0 +1 @@
return {}
-327
View File
@@ -1,327 +0,0 @@
return {
'nvim-neo-tree/neo-tree.nvim',
config = function()
vim.diagnostic.config({
signs = {
text = {
[vim.diagnostic.severity.ERROR] = '',
[vim.diagnostic.severity.WARN] = '',
[vim.diagnostic.severity.INFO] = '',
[vim.diagnostic.severity.HINT] = '󰌵',
},
}
})
require'neo-tree'.setup({
close_if_last_window = true,
enable_git_status = true,
enable_diagnostics = true,
open_files_do_not_replace_types = { 'terminal', 'trouble', 'qf' },
open_files_using_relative_paths = false,
sort_case_insensitive = true,
sort_function = nil,
default_component_configs = {
container = {
enable_character_fade = true,
},
indent = {
indent_size = 2,
padding = 1,
with_markers = true,
indent_marker = '',
last_indent_marker = '',
highlight = 'NeoTreeIndentMarker',
with_expanders = nil,
expander_collapsed = '',
expander_expanded = '',
expander_highlight = 'NeoTreeExpander',
},
icon = {
folder_closed = '',
folder_open = '',
folder_empty = '󰜌',
provider = function(icon, node, state)
if node.type == 'file' or node.type == 'terminal' then
local success, web_devicons = pcall(require, 'nvim-web-devicons')
local name = node.type == 'terminal' and 'terminal' or node.name
if success then
local devicon, hl = web_devicons.get_icon(name)
icon.text = devicon or icon.text
icon.highlight = hl or icon.highlight
end
end
end,
default = '*',
highlight = 'NeoTreeFileIcon',
},
modified = {
symbol = '[+]',
highlight = 'NeoTreeModified',
},
name = {
trailing_slash = false,
use_git_status_colors = true,
highlight = 'NeoTreeFileName',
},
git_status = {
symbols = {
added = '',
modified = '',
deleted = '',
renamed = '󰁕',
untracked = '',
ignored = '',
unstaged = '󰄱',
staged = '',
conflict = '',
},
},
file_size = {
enabled = true,
width = 12,
required_width = 64,
},
type = {
enabled = true,
width = 10,
required_width = 122,
},
last_modified = {
enabled = true,
width = 20,
required_width = 88,
},
created = {
enabled = true,
width = 20,
required_width = 110,
},
symlink_target = {
enabled = false,
},
},
window = {
position = 'left',
width = 30,
mapping_options = {
noremap = true,
nowait = true,
},
mappings = {
['<space>'] = {
'toggle_node',
nowait = false,
},
['<2-LeftMouse>'] = 'open',
['<cr>'] = 'open',
['<esc>'] = 'cancel',
['P'] = { 'toggle_preview', config = { use_float = true, use_image_nvim = true } },
['l'] = 'focus_preview',
['S'] = 'open_split',
['s'] = 'open_vsplit',
['t'] = 'open_tabnew',
['w'] = 'open_with_window_picker',
['C'] = 'close_node',
['z'] = 'close_all_nodes',
['a'] = {
'add',
config = {
show_path = 'relative',
},
},
['A'] = 'add_directory',
['d'] = 'delete',
['r'] = 'rename',
['b'] = 'rename_basename',
['y'] = 'copy_to_clipboard',
['x'] = 'cut_to_clipboard',
['p'] = 'paste_from_clipboard',
['c'] = { 'copy', config = { show_path = 'relative' } },
['m'] = { 'move', config = { show_path = 'relative' } },
['q'] = 'close_window',
['R'] = 'refresh',
['?'] = 'show_help',
['<'] = 'prev_source',
['>'] = 'next_source',
['i'] = 'show_file_details',
},
},
filesystem = {
filtered_items = {
visible = false,
hide_dotfiles = true,
hide_gitignored = true,
hide_hidden = true,
hide_by_name = {
'node_modules',
'.next',
'.vscode',
'.idea',
},
hide_by_pattern = {
'*.meta',
'*/src/*/tsconfig.json',
},
always_show = {
'.gitignored',
},
always_show_by_pattern = { -- uses glob style patterns
'.env*',
},
never_show = {
'.DS_Store',
'thumbs.db'
},
never_show_by_pattern = {},
},
follow_current_file = {
enabled = false,
leave_dirs_open = false,
},
group_empty_dirs = false,
hijack_netrw_behavior = 'open_default',
use_libuv_file_watcher = false,
commands = {
avante_add_files = function(state)
local node = state.tree:get_node()
local filepath = node:get_id()
local relative_path = require('avante.utils').relative_path(filepath)
local sidebar = require('avante').get()
local open = sidebar:is_open()
if not open then
require('avante.api').ask()
sidebar = require('avante').get()
end
sidebar.file_selector:add_selected_file(relative_path)
if not open then
sidebar.file_selector:remove_selected_file('neo-tree filesystem [1]')
end
end,
},
window = {
mappings = {
['<bs>'] = 'navigate_up',
['.'] = 'set_root',
['H'] = 'toggle_hidden',
['/'] = 'fuzzy_finder',
['D'] = 'fuzzy_finder_directory',
['#'] = 'fuzzy_sorter',
-- ['D'] = 'fuzzy_sorter_directory',
['f'] = 'filter_on_submit',
['<c-x>'] = 'clear_filter',
['[g'] = 'prev_git_modified',
[']g'] = 'next_git_modified',
['o'] = {
'show_help',
nowait = false,
config = { title = 'Order by', prefix_key = 'o' },
},
['oa'] = 'avante_add_files',
['oc'] = { 'order_by_created', nowait = false },
['od'] = { 'order_by_diagnostics', nowait = false },
['og'] = { 'order_by_git_status', nowait = false },
['om'] = { 'order_by_modified', nowait = false },
['on'] = { 'order_by_name', nowait = false },
['os'] = { 'order_by_size', nowait = false },
['ot'] = { 'order_by_type', nowait = false },
},
fuzzy_finder_mappings = {
['<down>'] = 'move_cursor_down',
['<C-n>'] = 'move_cursor_down',
['<up>'] = 'move_cursor_up',
['<C-p>'] = 'move_cursor_up',
['<esc>'] = 'close',
},
},
},
buffers = {
follow_current_file = {
enabled = true,
leave_dirs_open = false,
},
group_empty_dirs = true,
show_unloaded = true,
window = {
mappings = {
['d'] = 'buffer_delete',
['bd'] = 'buffer_delete',
['<bs>'] = 'navigate_up',
['.'] = 'set_root',
['o'] = {
'show_help',
nowait = false,
config = { title = 'Order by', prefix_key = 'o' },
},
['oc'] = { 'order_by_created', nowait = false },
['od'] = { 'order_by_diagnostics', nowait = false },
['om'] = { 'order_by_modified', nowait = false },
['on'] = { 'order_by_name', nowait = false },
['os'] = { 'order_by_size', nowait = false },
['ot'] = { 'order_by_type', nowait = false },
},
},
},
git_status = {
window = {
position = 'float',
mappings = {
['A'] = 'git_add_all',
['gu'] = 'git_unstage_file',
['gU'] = 'git_undo_last_commit',
['ga'] = 'git_add_file',
['gr'] = 'git_revert_file',
['gc'] = 'git_commit',
['gp'] = 'git_push',
['gg'] = 'git_commit_and_push',
['o'] = {
'show_help',
nowait = false,
config = { title = 'Order by', prefix_key = 'o' },
},
['oc'] = { 'order_by_created', nowait = false },
['od'] = { 'order_by_diagnostics', nowait = false },
['om'] = { 'order_by_modified', nowait = false },
['on'] = { 'order_by_name', nowait = false },
['os'] = { 'order_by_size', nowait = false },
['ot'] = { 'order_by_type', nowait = false },
},
},
},
})
end,
keys = {
{
'<leader>t',
':Neotree toggle<CR>',
mode = { 'n', 'v', 'x'},
silent = true,
desc = 'Toggle NeoTree',
},
{
'<leader>T',
':Neotree focus<CR>',
mode = { 'n', 'v', 'x' },
silent = true, desc = 'Focus NeoTree',
},
},
branch = 'v3.x',
dependencies = {
{ 'nvim-lua/plenary.nvim', },
{ 'MunifTanjim/nui.nvim', },
{ 'nvim-tree/nvim-web-devicons', },
{
'antosha417/nvim-lsp-file-operations',
config = function()
require'lsp-file-operations'.setup({})
end,
},
{ '3rd/image.nvim', },
{
's1n7ax/nvim-window-picker',
version = '2.*',
config = function()
require'window-picker'.setup({})
end,
},
},
lazy = false,
}
@@ -1,12 +0,0 @@
return {
'preservim/nerdcommenter',
keys = {
{
'<leader>c',
'<Plug>NERDCommenterToggle',
mode = { 'n', 'v', 'x' },
silent = true,
desc = 'Toggle commenting line',
}
}
}
+37 -12
View File
@@ -1,15 +1,40 @@
return {
'folke/snacks.nvim',
dependencies = {
{ 'echasnovski/mini.icons', },
{
"folke/snacks.nvim",
keys = {
{ "<leader>t", function() Snacks.explorer({ cwd = LazyVim.root() }) end, desc = "Explorer (Root Dir)" },
{ "<leader>T", function() Snacks.explorer() end, desc = "Explorer (cwd)" },
},
opts = {
picker = {
sources = {
explorer = {
hidden = false, -- dotfiles hidden by default; H to toggle
ignored = false, -- gitignored files hidden by default; I to toggle
follow_file = true, -- auto-reveal current buffer in tree
git_status = true,
git_untracked = true,
watch = true, -- live file watcher
exclude = { "node_modules", ".next", ".vscode", ".idea", ".DS_Store", "thumbs.db" },
include = { ".env*" }, -- always show .env files regardless of hidden/ignored
layout = {
layout = {
width = 30,
min_width = 30,
},
},
win = {
list = {
keys = {
["S"] = "split", -- horizontal split (like NeoTree S)
["s"] = "vsplit", -- vertical split (like NeoTree s)
["t"] = "tab", -- new tab (like NeoTree t)
},
},
},
},
},
},
},
},
config = function()
require'snacks'.setup({
animate = { enabled = true },
bigfile = { enabled = true },
image = { enabled = true },
indent = { enabled = true },
scroll = { enabled = true },
})
end
}
-33
View File
@@ -1,33 +0,0 @@
return {
'nvim-telescope/telescope.nvim',
tag = '0.1.8',
dependencies = {
{ 'nvim-lua/plenary.nvim', },
},
config = function()
require'telescope'.setup({
defaults = {
file_ignore_patterns = {
'node_modules',
'.git',
'.next',
'.cache',
'.DS_Store',
'.venv',
'.conda',
},
},
})
local builtin = require'telescope.builtin'
vim.keymap.set('n', '<leader>ff', builtin.find_files, { desc = 'Find files' })
vim.keymap.set('n', '<leader>fg', builtin.git_files, { desc = 'Find git files' })
vim.keymap.set(
'n',
'<leader>fs',
function()
builtin.grep_string({ search = vim.fn.input('Grep > ')})
end,
{ desc = 'Find string' }
)
end,
}
+28 -89
View File
@@ -1,92 +1,31 @@
return {
'nvim-treesitter/nvim-treesitter',
branch = 'master',
lazy = false,
build = ':TSUpdate',
dependencies = {
{ 'nvim-treesitter/playground', },
{
'nvim-treesitter/nvim-treesitter-context',
config = function()
require'treesitter-context'.setup({
enable = true,
multiwindow = false,
max_lines = 10,
min_window_height = 0,
line_numbers = true,
multiline_threshold = 20,
trim_scope = 'outer',
mode = 'topline',
separator = nil,
zindex = 20,
on_attach = nil,
})
end,
},
{
"nvim-treesitter/nvim-treesitter",
opts = function(_, opts)
vim.list_extend(opts.ensure_installed, {
"cmake",
"cpp",
"dockerfile",
"git_config",
"git_rebase",
"gitattributes",
"gitcommit",
"gitignore",
"java",
"jsdoc",
"jsonc",
"kotlin",
"latex",
"make",
"php",
"scala",
"sql",
"svelte",
"swift",
"toml",
"xml",
"zig",
})
end,
},
config = function()
require'nvim-treesitter.install'.update({ with_sync = true })
require'nvim-treesitter.configs'.setup({
ensure_installed = {
'bash',
'c',
'cmake',
'cpp',
'css',
'diff',
'dockerfile',
'git_config',
'git_rebase',
'gitattributes',
'gitcommit',
'gitignore',
'html',
'java',
'javascript',
'jsdoc',
'json',
'jsonc',
'kotlin',
'latex',
'lua',
'luadoc',
'luap',
'make',
'markdown',
'markdown_inline',
'php',
'printf',
'python',
'query',
'regex',
'rust',
'scala',
'sql',
'svelte',
'swift',
'toml',
'tsx',
'typescript',
'vim',
'vimdoc',
'xml',
'yaml',
'zig'
},
sync_install = false,
auto_install = true,
indent = { enable = true },
highlight = {
enable = true,
disable = function(lang, buf)
local max_filesize = 500 * 1024 -- 100 KB
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,
},
})
end,
}
-19
View File
@@ -1,19 +0,0 @@
return {
'folke/trouble.nvim',
config = function()
require'trouble'.setup({
vim.api.nvim_create_user_command('Trouble', function()
require'trouble'.open()
end, { desc = "Open Trouble" }),
})
end,
keys = {
{
'<leader>x',
':Trouble diagnostics toggle<CR>',
mode = 'n',
silent = true,
desc = 'Toggle Trouble',
},
},
}
-8
View File
@@ -1,8 +0,0 @@
return {
{
'chomosuke/typst-preview.nvim',
lazy = false, -- or ft = 'typst'
version = '1.*',
opts = {}, -- lazy.nvim will implicitly calls `setup {}`
},
}
+11
View File
@@ -0,0 +1,11 @@
return {
-- Remove S-h/S-l buffer navigation — conflicts with desktop environment window manager
-- Buffer navigation is on C-h/l (set in keymaps.lua)
{
"akinsho/bufferline.nvim",
keys = {
{ "<S-h>", false },
{ "<S-l>", false },
},
},
}
-12
View File
@@ -1,12 +0,0 @@
return {
'mbbill/undotree',
keys = {
{
'<leader>u',
':UndotreeToggle<CR>',
mode = { 'n' },
silent = true,
desc = 'Toggle undo tree',
},
},
}