465 lines
14 KiB
Lua
465 lines
14 KiB
Lua
-- You can add your own plugins here or in other files in this directory!
|
|
-- I promise not to create any merge conflicts in this directory :)
|
|
--
|
|
-- See the kickstart.nvim README for more information
|
|
return {
|
|
{
|
|
'folke/snacks.nvim',
|
|
priority = 1000,
|
|
lazy = false,
|
|
---@type snacks.Config
|
|
opts = {
|
|
bigfile = { enabled = true },
|
|
dashboard = {
|
|
enabled = true,
|
|
sections = {
|
|
{
|
|
section = 'terminal',
|
|
cmd = 'chafa ~/.config/neofetch/ascii/patrick.png --format symbols --symbols vhalf --size 45x40',
|
|
height = 25,
|
|
padding = 1,
|
|
},
|
|
{
|
|
pane = 2,
|
|
{ icon = ' ', title = 'Keymaps', section = 'keys', indent = 2, padding = 1 },
|
|
{ icon = ' ', title = 'Recent Files', section = 'recent_files', indent = 2, padding = 1 },
|
|
{ icon = ' ', title = 'Projects', section = 'projects', indent = 2, padding = 1 },
|
|
},
|
|
},
|
|
},
|
|
notifier = {
|
|
enabled = true,
|
|
timeout = 3000,
|
|
},
|
|
quickfile = { enabled = true },
|
|
statuscolumn = { enabled = true },
|
|
words = { enabled = true },
|
|
styles = {
|
|
notification = {
|
|
wo = { wrap = true }, -- Wrap notifications
|
|
},
|
|
},
|
|
},
|
|
keys = {
|
|
{
|
|
'<leader>un',
|
|
function()
|
|
Snacks.notifier.hide()
|
|
end,
|
|
desc = 'Dismiss All Notifications',
|
|
},
|
|
{
|
|
'<leader>bd',
|
|
function()
|
|
Snacks.bufdelete()
|
|
end,
|
|
desc = 'Delete Buffer',
|
|
},
|
|
{
|
|
'<leader>gg',
|
|
function()
|
|
Snacks.lazygit()
|
|
end,
|
|
desc = 'Lazygit',
|
|
},
|
|
{
|
|
'<leader>gb',
|
|
function()
|
|
Snacks.git.blame_line()
|
|
end,
|
|
desc = 'Git Blame Line',
|
|
},
|
|
{
|
|
'<leader>gB',
|
|
function()
|
|
Snacks.gitbrowse()
|
|
end,
|
|
desc = 'Git Browse',
|
|
},
|
|
{
|
|
'<leader>gf',
|
|
function()
|
|
Snacks.lazygit.log_file()
|
|
end,
|
|
desc = 'Lazygit Current File History',
|
|
},
|
|
{
|
|
'<leader>gl',
|
|
function()
|
|
Snacks.lazygit.log()
|
|
end,
|
|
desc = 'Lazygit Log (cwd)',
|
|
},
|
|
{
|
|
'<leader>cR',
|
|
function()
|
|
Snacks.rename.rename_file()
|
|
end,
|
|
desc = 'Rename File',
|
|
},
|
|
{
|
|
'<c-/>',
|
|
function()
|
|
Snacks.terminal()
|
|
end,
|
|
desc = 'Toggle Terminal',
|
|
},
|
|
{
|
|
'<c-_>',
|
|
function()
|
|
Snacks.terminal()
|
|
end,
|
|
desc = 'which_key_ignore',
|
|
},
|
|
{
|
|
']]',
|
|
function()
|
|
Snacks.words.jump(vim.v.count1)
|
|
end,
|
|
desc = 'Next Reference',
|
|
mode = { 'n', 't' },
|
|
},
|
|
{
|
|
'[[',
|
|
function()
|
|
Snacks.words.jump(-vim.v.count1)
|
|
end,
|
|
desc = 'Prev Reference',
|
|
mode = { 'n', 't' },
|
|
},
|
|
},
|
|
init = function()
|
|
vim.api.nvim_create_autocmd('User', {
|
|
pattern = 'VeryLazy',
|
|
callback = function()
|
|
-- Setup some globals for debugging (lazy-loaded)
|
|
_G.dd = function(...)
|
|
Snacks.debug.inspect(...)
|
|
end
|
|
_G.bt = function()
|
|
Snacks.debug.backtrace()
|
|
end
|
|
vim.print = _G.dd -- Override print to use snacks for `:=` command
|
|
|
|
-- Create some toggle mappings
|
|
Snacks.toggle.option('spell', { name = 'Spelling' }):map '<leader>us'
|
|
Snacks.toggle.option('wrap', { name = 'Wrap' }):map '<leader>uw'
|
|
Snacks.toggle.option('relativenumber', { name = 'Relative Number' }):map '<leader>uL'
|
|
Snacks.toggle.diagnostics():map '<leader>ud'
|
|
Snacks.toggle.line_number():map '<leader>ul'
|
|
Snacks.toggle.option('conceallevel', { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 }):map '<leader>uc'
|
|
Snacks.toggle.treesitter():map '<leader>uT'
|
|
Snacks.toggle.option('background', { off = 'light', on = 'dark', name = 'Dark Background' }):map '<leader>ub'
|
|
Snacks.toggle.inlay_hints():map '<leader>uh'
|
|
end,
|
|
})
|
|
end,
|
|
},
|
|
{
|
|
'MeanderingProgrammer/render-markdown.nvim',
|
|
dependencies = { 'nvim-treesitter/nvim-treesitter', 'echasnovski/mini.nvim' }, -- if you use the mini.nvim suite
|
|
-- dependencies = { 'nvim-treesitter/nvim-treesitter', 'echasnovski/mini.icons' }, -- if you use standalone mini plugins
|
|
-- dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' }, -- if you prefer nvim-web-devicons
|
|
---@module 'render-markdown'
|
|
---@type render.md.UserConfig
|
|
opts = {},
|
|
},
|
|
{
|
|
'jose-elias-alvarez/null-ls.nvim',
|
|
config = function()
|
|
local null_ls = require 'null-ls'
|
|
|
|
local root_has_file = function(files)
|
|
return function(utils)
|
|
return utils.root_has_file(files)
|
|
end
|
|
end
|
|
|
|
local eslint_root_files = { '.eslintrc', '.eslintrc.js', '.eslintrc.json' }
|
|
local prettier_root_files = { '.prettierrc', '.prettierrc.js', '.prettierrc.json' }
|
|
local stylua_root_files = { 'stylua.toml', '.stylua.toml' }
|
|
local elm_root_files = { 'elm.json' }
|
|
|
|
local opts = {
|
|
eslint_formatting = {
|
|
condition = function(utils)
|
|
local has_eslint = root_has_file(eslint_root_files)(utils)
|
|
local has_prettier = root_has_file(prettier_root_files)(utils)
|
|
return has_eslint and not has_prettier
|
|
end,
|
|
},
|
|
eslint_diagnostics = {
|
|
condition = root_has_file(eslint_root_files),
|
|
},
|
|
prettier_formatting = {
|
|
condition = root_has_file(prettier_root_files),
|
|
},
|
|
stylua_formatting = {
|
|
condition = root_has_file(stylua_root_files),
|
|
},
|
|
elm_format_formatting = {
|
|
condition = root_has_file(elm_root_files),
|
|
},
|
|
}
|
|
|
|
local function on_attach(client, _)
|
|
if client.server_capabilities.document_formatting then
|
|
vim.cmd 'command! -buffer Formatting lua vim.lsp.buf.formatting()'
|
|
vim.cmd 'command! -buffer FormattingSync lua vim.lsp.buf.formatting_sync()'
|
|
end
|
|
end
|
|
|
|
null_ls.setup {
|
|
sources = {
|
|
null_ls.builtins.diagnostics.eslint_d.with(opts.eslint_diagnostics),
|
|
null_ls.builtins.formatting.eslint_d.with(opts.eslint_formatting),
|
|
null_ls.builtins.formatting.prettier.with(opts.prettier_formatting),
|
|
null_ls.builtins.formatting.stylua.with(opts.stylua_formatting),
|
|
null_ls.builtins.formatting.elm_format.with(opts.elm_format_formatting),
|
|
null_ls.builtins.code_actions.eslint_d.with(opts.eslint_diagnostics),
|
|
},
|
|
on_attach = on_attach,
|
|
}
|
|
end,
|
|
},
|
|
{
|
|
'williamboman/mason.nvim',
|
|
build = ':MasonUpdate',
|
|
config = function()
|
|
require('mason').setup()
|
|
end,
|
|
},
|
|
{
|
|
'williamboman/mason-lspconfig.nvim',
|
|
config = function()
|
|
require('mason-lspconfig').setup {
|
|
ensure_installed = { 'lua_ls' }, -- Replace with your LSP servers
|
|
}
|
|
end,
|
|
},
|
|
{
|
|
'jay-babu/mason-null-ls.nvim',
|
|
config = function()
|
|
require('mason-null-ls').setup {
|
|
ensure_installed = { 'eslint', 'eslint_d', 'prettier' }, -- Replace with formatters/linters you want
|
|
automatic_installation = true,
|
|
}
|
|
end,
|
|
},
|
|
{
|
|
'VonHeikemen/lsp-zero.nvim',
|
|
branch = 'v4.x',
|
|
},
|
|
{ 'neovim/nvim-lspconfig' },
|
|
{ 'hrsh7th/cmp-nvim-lsp' },
|
|
{ 'hrsh7th/nvim-cmp' },
|
|
{ 'MunifTanjim/prettier.nvim' },
|
|
{ 'f-person/git-blame.nvim' },
|
|
{
|
|
'nvim-neo-tree/neo-tree.nvim',
|
|
branch = 'v3.x',
|
|
dependencies = {
|
|
'nvim-lua/plenary.nvim',
|
|
'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended
|
|
'MunifTanjim/nui.nvim',
|
|
-- "3rd/image.nvim", -- Optional image support in preview window: See `# Preview Mode` for more information
|
|
},
|
|
},
|
|
{
|
|
'SmiteshP/nvim-navic',
|
|
dependencies = {
|
|
'neovim/nvim-lspconfig',
|
|
},
|
|
},
|
|
{
|
|
'folke/persistence.nvim',
|
|
event = 'BufReadPre', -- this will only start session saving when an actual file was opened
|
|
opts = {
|
|
-- add any custom options here
|
|
},
|
|
config = function()
|
|
require('persistence').setup()
|
|
end,
|
|
},
|
|
{
|
|
'echasnovski/mini.nvim',
|
|
version = '*',
|
|
config = function()
|
|
require('mini.icons').setup()
|
|
end,
|
|
},
|
|
{
|
|
'Bekaboo/dropbar.nvim',
|
|
-- optional, but required for fuzzy finder support
|
|
dependencies = {
|
|
'nvim-telescope/telescope-fzf-native.nvim',
|
|
build = 'make',
|
|
},
|
|
config = function()
|
|
local dropbar_api = require 'dropbar.api'
|
|
vim.keymap.set('n', '<Leader>;', dropbar_api.pick, { desc = 'Pick symbols in winbar' })
|
|
vim.keymap.set('n', '[;', dropbar_api.goto_context_start, { desc = 'Go to start of current context' })
|
|
vim.keymap.set('n', '];', dropbar_api.select_next_context, { desc = 'Select next context' })
|
|
end,
|
|
},
|
|
{
|
|
'karb94/neoscroll.nvim',
|
|
config = function()
|
|
require('neoscroll').setup {
|
|
duration_multiplier = 0.4,
|
|
}
|
|
end,
|
|
},
|
|
{
|
|
'xiyaowong/transparent.nvim',
|
|
config = function()
|
|
require('transparent').setup {
|
|
-- table: default groups
|
|
groups = {
|
|
'Normal',
|
|
'NormalNC',
|
|
'Comment',
|
|
'Constant',
|
|
'Special',
|
|
'Identifier',
|
|
'Statement',
|
|
'PreProc',
|
|
'Type',
|
|
'Underlined',
|
|
'Todo',
|
|
'String',
|
|
'Function',
|
|
'Conditional',
|
|
'Repeat',
|
|
'Operator',
|
|
'Structure',
|
|
'LineNr',
|
|
'NonText',
|
|
'SignColumn',
|
|
'CursorLine',
|
|
'CursorLineNr',
|
|
'StatusLine',
|
|
'StatusLineNC',
|
|
'EndOfBuffer',
|
|
},
|
|
-- table: additional groups that should be cleared
|
|
extra_groups = {
|
|
'NormalFloat',
|
|
'NvimTreeNormal',
|
|
},
|
|
-- table: groups you don't want to clear
|
|
exclude_groups = {},
|
|
-- function: code to be executed after highlight groups are cleared
|
|
-- Also the user event "TransparentClear" will be triggered
|
|
on_clear = function() end,
|
|
}
|
|
end,
|
|
},
|
|
{
|
|
'sphamba/smear-cursor.nvim',
|
|
|
|
opts = {
|
|
-- Smear cursor when switching buffers or windows.
|
|
smear_between_buffers = true,
|
|
|
|
-- Smear cursor when moving within line or to neighbor lines.
|
|
smear_between_neighbor_lines = true,
|
|
|
|
-- Draw the smear in buffer space instead of screen space when scrolling
|
|
scroll_buffer_space = true,
|
|
|
|
-- Set to `true` if your font supports legacy computing symbols (block unicode symbols).
|
|
-- Smears will blend better on all backgrounds.
|
|
legacy_computing_symbols_support = false,
|
|
|
|
stiffness = 0.8, -- 0.6 [0, 1]
|
|
|
|
trailing_stiffness = 0.5, -- 0.3 [0, 1]
|
|
distance_stop_animating = 0.5, -- 0.1 > 0
|
|
hide_target_hack = false, -- true boolean
|
|
},
|
|
},
|
|
{ 'ThePrimeagen/vim-be-good' },
|
|
{
|
|
'yetone/avante.nvim',
|
|
event = 'VeryLazy',
|
|
version = '*', -- Set this to "*" to always pull the latest release version, or set it to false to update to the latest code changes.
|
|
opts = {
|
|
-- add any opts here
|
|
-- for example
|
|
provider = 'openai',
|
|
openai = {
|
|
endpoint = 'https://api.openai.com/v1',
|
|
model = 'gpt-4o', -- your desired model (or use gpt-4o, etc.)
|
|
timeout = 30000, -- timeout in milliseconds
|
|
temperature = 0, -- adjust if needed
|
|
max_tokens = 4096,
|
|
-- reasoning_effort = "high" -- only supported for reasoning models (o1, etc.)
|
|
},
|
|
behaviour = {
|
|
auto_suggestions = true, -- Experimental stage
|
|
auto_set_highlight_group = true,
|
|
auto_set_keymaps = true,
|
|
auto_apply_diff_after_generation = false,
|
|
support_paste_from_clipboard = true,
|
|
minimize_diff = true, -- Whether to remove unchanged lines when applying a code block
|
|
enable_token_counting = true, -- Whether to enable token counting. Default to true.
|
|
enable_cursor_planning_mode = false, -- Whether to enable Cursor Planning Mode. Default to false.
|
|
},
|
|
},
|
|
-- if you want to build from source then do `make BUILD_FROM_SOURCE=true`
|
|
build = 'make',
|
|
-- build = "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false" -- for windows
|
|
dependencies = {
|
|
'nvim-treesitter/nvim-treesitter',
|
|
'stevearc/dressing.nvim',
|
|
'nvim-lua/plenary.nvim',
|
|
'MunifTanjim/nui.nvim',
|
|
--- The below dependencies are optional,
|
|
'echasnovski/mini.pick', -- for file_selector provider mini.pick
|
|
'nvim-telescope/telescope.nvim', -- for file_selector provider telescope
|
|
'hrsh7th/nvim-cmp', -- autocompletion for avante commands and mentions
|
|
'ibhagwan/fzf-lua', -- for file_selector provider fzf
|
|
'nvim-tree/nvim-web-devicons', -- or echasnovski/mini.icons
|
|
'zbirenbaum/copilot.lua', -- for providers='copilot'
|
|
{
|
|
-- 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,
|
|
},
|
|
-- required for Windows users
|
|
use_absolute_path = false,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
-- Make sure to set this up properly if you have lazy=true
|
|
'MeanderingProgrammer/render-markdown.nvim',
|
|
opts = {
|
|
file_types = { 'markdown', 'Avante' },
|
|
},
|
|
ft = { 'markdown', 'Avante' },
|
|
},
|
|
},
|
|
},
|
|
{
|
|
'supermaven-inc/supermaven-nvim',
|
|
config = function()
|
|
require('supermaven-nvim').setup {
|
|
keymaps = {
|
|
accept_suggestion = '<D-l>',
|
|
clear_suggestion = '<D-]>',
|
|
accept_word = '<D-j>',
|
|
},
|
|
}
|
|
end,
|
|
},
|
|
}
|