Compare commits

..

26 Commits

Author SHA1 Message Date
822b092d15
Try to override statusline modules 2024-08-14 18:35:58 +02:00
6fa41890ab
Correct LSP setup + DAP + ... 2024-08-09 22:31:53 +02:00
0066e28c8f
Add nvim-dap, custom commands pickers 2024-07-25 16:41:48 +02:00
3f08c78c13
Add gitlab.nvim plugins, update mappings 2024-05-23 13:54:34 +02:00
d6f6f9e11d Use wildignore, remap a lot for qflist and loclist functions 2024-04-10 03:05:11 +02:00
19c17b583b Merge branch 'v2.0' into p53 2024-04-03 16:12:53 +02:00
8638342fa9 Add more git shortcut 2024-04-03 15:40:42 +02:00
a62a601e1f Add noice.lua 2024-03-27 14:39:55 +01:00
siduck
44a24e2fe5 update nvterm repo author 2024-03-19 06:27:33 +05:30
Pablo Rodriguez
1a98a451ea
fix: Better approach to check if the system is Windows before setting PATH (#2690)
* Better approach to check if the system is Windows

Now the check for Windows doesn't depend on luv's os_uname() function, which may have a different result if neovim was built on different compilers (MSVC, MinGW, etc).

* remove un-needed parenthesis

---------

Co-authored-by: Sidhanth Rathod <siduck@tutanota.com>
2024-03-10 20:03:32 +05:30
siduck
ccf6bc397f rm reference for example_config in bootstrap 2024-03-10 08:55:15 +05:30
siduck
13cce81d99 disable semantic tokens in on_init & expose on_init 2024-03-05 07:53:19 +05:30
siduck
8fe6a6560e rm treesitter tag & fix #2697 2024-02-29 08:47:12 +05:30
fe912ab5fb
Add nvim-treesitter-textobjects 2024-02-26 18:27:42 +01:00
Eduardo Bray
0dcd8a91b6
Remove Telescope unsupported layout_config key results_width (#2694) 2024-02-26 13:26:38 +05:30
siduck
e9f6957b99 add some vim* tsparsers in treesitter config 2024-02-26 05:35:58 +05:30
siduck
8aec881517 reload editorconfig on User FilePost event only if enabled #2672 2024-02-17 06:31:11 +05:30
siduck
f17e83010f fix editorConfig indent opts not applying on certain fts #2633 2024-01-28 21:40:04 +05:30
siduck
282a23f446 lock nvim-treesitter to stable version
there has been a breaking change with nvimtreesitter https://github.com/nvim-treesitter/nvim-treesitter/pull/5895 which needs renaming many of the hlgroups,its already done in the v3.0 branch of base46, cant directly merge to v2.0 so for a while you all will have to use the 0.9.2 version
2024-01-19 22:25:26 +05:30
siduck
c80f3f0501 Avoid disabling lsp formatting capabilities
this was used so we could use null-ls as default formatter but as its dead i have replaced it with conform in the example_config. check a321ba986d
2024-01-06 21:00:58 +05:30
Zohir Benghalem
c2ec317b1b
remove unnecessary lines (#2586) 2024-01-02 21:15:03 +05:30
Grigorii Khvatskii
2fedda14ed
Add support for non-interactive bootstrapping (#2528)
https://github.com/NvChad/NvChad/pull/2528#issuecomment-1834599074

---------

Co-authored-by: Sidhanth Rathod <siduck@tutanota.com>
2024-01-02 17:12:34 +05:30
siduck
e121bde8d8 check for empty/nil mason ensure_installed table #2580 2023-12-27 19:49:31 +05:30
siduck
9bb7dcbaf4 remove telescope fzf extension #2571 2023-12-24 16:31:08 +05:30
Vitor Boschi da Silva
c8777040fb
[feat] Make gitsigns init function async (#2538)
* [feat] Make gitsigns init function async

This function is running git and also initializing a shell, which can be
a relatively slow operation. By leveraging the jobs api, we run the
command in background, reducing the time it takes for the buffer to be
available to the user. It also uses the list format for the job, which
allow us to bypass the shell entirely.

* performance: use uv.cwd() instead of fn.expand 

benchmarked luv's cwd and it seems to be 20x faster than the expand function

---------

Co-authored-by: Sidhanth Rathod <siduck@tutanota.com>
2023-12-08 20:51:09 +05:30
86ccf3bb2d
New plugins 2023-11-30 14:28:09 +01:00
22 changed files with 1358 additions and 122 deletions

View File

@ -18,4 +18,6 @@ end
dofile(vim.g.base46_cache .. "defaults") dofile(vim.g.base46_cache .. "defaults")
vim.opt.rtp:prepend(lazypath) vim.opt.rtp:prepend(lazypath)
vim.api.nvim_command "packadd cfilter"
vim.api.nvim_command "packadd justify"
require "plugins" require "plugins"

View File

@ -40,13 +40,6 @@ M.gen_chadrc_template = function()
local path = fn.stdpath "config" .. "/lua/custom" local path = fn.stdpath "config" .. "/lua/custom"
if fn.isdirectory(path) ~= 1 then if fn.isdirectory(path) ~= 1 then
local input = fn.input "Do you want to install example custom config? (y/N): "
if input:lower() == "y" then
M.echo "Cloning example custom config repo..."
shell_call { "git", "clone", "--depth", "1", "https://github.com/NvChad/example_config", path }
fn.delete(path .. "/.git", "rf")
else
-- use very minimal chadrc -- use very minimal chadrc
fn.mkdir(path, "p") fn.mkdir(path, "p")
@ -56,7 +49,6 @@ M.gen_chadrc_template = function()
file:close() file:close()
end end
end end
end
end end
return M return M

View File

@ -35,10 +35,6 @@ M.ui = {
-- default/round/block/arrow separators work only for default statusline theme -- default/round/block/arrow separators work only for default statusline theme
-- round and block will work for minimal theme only -- round and block will work for minimal theme only
separator_style = "default", separator_style = "default",
overriden_modules = nil,
fileInfo = function()
return require("nvchad_ui.statusline.default.fileInfo").run()
end
}, },
-- lazyload it when there are 1+ buffers -- lazyload it when there are 1+ buffers

View File

@ -44,6 +44,8 @@ opt.timeoutlen = 400
opt.undofile = true opt.undofile = true
opt.scrolloff = 15 opt.scrolloff = 15
opt.wildignore:append "tags,Session.vim"
-- interval for writing swap file to disk, also used by gitsigns -- interval for writing swap file to disk, also used by gitsigns
opt.updatetime = 250 opt.updatetime = 250
@ -59,7 +61,7 @@ for _, provider in ipairs { "node", "perl", "python3", "ruby" } do
end end
-- add binaries installed by mason.nvim to path -- add binaries installed by mason.nvim to path
local is_windows = vim.loop.os_uname().sysname == "Windows_NT" local is_windows = vim.fn.has "win32" ~= 0
vim.env.PATH = vim.fn.stdpath "data" .. "/mason/bin" .. (is_windows and ";" or ":") .. vim.env.PATH vim.env.PATH = vim.fn.stdpath "data" .. "/mason/bin" .. (is_windows and ";" or ":") .. vim.env.PATH
-------------------------------------- autocmds ------------------------------------------ -------------------------------------- autocmds ------------------------------------------
@ -110,6 +112,32 @@ autocmd("BufWritePost", {
end, end,
}) })
-- user event that loads after UIEnter + only if file buf is there
vim.api.nvim_create_autocmd({ "UIEnter", "BufReadPost", "BufNewFile" }, {
group = vim.api.nvim_create_augroup("NvFilePost", { clear = true }),
callback = function(args)
local file = vim.api.nvim_buf_get_name(args.buf)
local buftype = vim.api.nvim_buf_get_option(args.buf, "buftype")
if not vim.g.ui_entered and args.event == "UIEnter" then
vim.g.ui_entered = true
end
if file ~= "" and buftype ~= "nofile" and vim.g.ui_entered then
vim.api.nvim_exec_autocmds("User", { pattern = "FilePost", modeline = false })
vim.api.nvim_del_augroup_by_name "NvFilePost"
vim.schedule(function()
vim.api.nvim_exec_autocmds("FileType", {})
if vim.g.editorconfig then
require("editorconfig").config(args.buf)
end
end, 0)
end
end,
})
-------------------------------------- commands ------------------------------------------ -------------------------------------- commands ------------------------------------------
local new_cmd = vim.api.nvim_create_user_command local new_cmd = vim.api.nvim_create_user_command

View File

@ -18,6 +18,7 @@ M.general = {
n = { n = {
["<leader>n"] = { ":noh <CR>", "Clear highlights" }, ["<leader>n"] = { ":noh <CR>", "Clear highlights" },
["<leader>rr"] = { ":source $MYVIMRC<CR>", "Reload config file" }, ["<leader>rr"] = { ":source $MYVIMRC<CR>", "Reload config file" },
["<Esc>"] = { "<cmd> noh <CR>", "Clear highlights" },
-- switch between windows -- switch between windows
["<C-h>"] = { "<C-w>h", "Window left" }, ["<C-h>"] = { "<C-w>h", "Window left" },
["<C-l>"] = { "<C-w>l", "Window right" }, ["<C-l>"] = { "<C-w>l", "Window right" },
@ -55,12 +56,44 @@ M.general = {
-- ["<Up>"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } }, -- ["<Up>"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } },
-- ["<Down>"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } }, -- ["<Down>"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } },
["<leader>y"] = {"<cmd> :w! /tmp/vimtmp<CR>", "Save into a global tmp file"}, -- ["<leader>y"] = {"<cmd> :w! /tmp/vimtmp<CR>", "Save into a global tmp file"},
["<leader>p"] = {"<cmd> :r! cat /tmp/vimtmp<CR>", "Restore from the global tmp file"}, -- ["<leader>p"] = {"<cmd> :r! cat /tmp/vimtmp<CR>", "Restore from the global tmp file"},
-- (Double) Trouble
["<leader>tx"] = { ":Trouble diagnostics toggle<CR>", "[T]rouble diagnostics" },
["<leader>tX"] = { ":Trouble diagnostics toggle filter.buf=0<CR>", "[T]rouble buffer diagnostics" },
["<leader>ts"] = { ":Trouble symbols toggle focus=false<CR>", "[T]rouble [S]ymbols" },
["<leader>tl"] = { ":Trouble lsp toggle focus=false win.position=right<CR>", "[T]rouble [L]sp def / ref / ..." },
["<leader>tL"] = { ":Trouble loclist toggle<CR>", "[T]rouble [L]oclist" },
["<leader>tQ"] = { ":Trouble qflist toggle<CR>", "[T]rouble [Q]uickfix" },
["<leader>dgg"] = { ":lua require('dap').continue() <CR>", "Continue debu[g]ging" },
["<leader>dg<CR>"] = { ":lua require('dapui').toggle() <CR>", "Toggle DAP ui" },
["<leader>dgw"] = { ":lua require('dapui').eval() <CR>", "Open floating windows about current [w]ord" },
["<leader>dgb"] = { ":lua require('dap').toggle_breakpoint() <CR>", "Toggle [b]reakpoint" },
["<leader>dgf"] = { ":lua require('dap-python').test_method() <CR>", "Debug [f]unction" },
["<leader>dgo"] = { ":lua require('dap').step_over() <CR>", "DAP step [o]ver method" },
["<leader>dgt"] = { ":lua require('dap').step_into() <CR>", "DAP step in[t]o method" },
["<leader>dgp"] = { ":lua require('dap').step_back() <CR>", "DAP step back ([p]revious)" },
["<leader>dgs"] = {
function()
local widgets = require "dap.ui.widgets"
local sidebar = widgets.sidebar(widgets.scopes)
sidebar.open { widgth = "50%" }
end,
"DAP Show debugged [s]copes",
},
-- new buffer -- new buffer
-- ["<leader>b"] = { "<cmd> enew <CR>", "New buffer" }, -- ["<leader>b"] = { "<cmd> enew <CR>", "New buffer" },
-- ["<leader>ch"] = { "<cmd> NvCheatsheet <CR>", "Mapping cheatsheet" }, -- ["<leader>ch"] = { "<cmd> NvCheatsheet <CR>", "Mapping cheatsheet" },
["<leader>fm"] = {
function()
vim.lsp.buf.format { async = true }
end,
"LSP formatting",
},
}, },
t = { t = {
@ -70,8 +103,11 @@ M.general = {
v = { v = {
-- ["<Up>"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } }, -- ["<Up>"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } },
-- ["<Down>"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } }, -- ["<Down>"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } },
-- ["<"] = { "<gv", "Indent line" }, ["<"] = { "<gv", "Indent line" },
-- [">"] = { ">gv", "Indent line" }, [">"] = { ">gv", "Indent line" },
["<leader>dgd"] = { ":lua require('dap-python').debug_selection()", "DAP debug selection" },
["<leader>dgw"] = { ":lua require('dap-python').eval()", "DAP eval selection" },
}, },
x = { x = {
@ -96,11 +132,18 @@ M.customstuffs = {
["<C-t>"] = { "<cmd> TagbarToggle<CR>", "Show tagbar" }, ["<C-t>"] = { "<cmd> TagbarToggle<CR>", "Show tagbar" },
["<leader>ra"] = { "<cmd> call VrcQuery()<CR>", "Call REST endpoint" }, ["<leader>ra"] = { "<cmd> call VrcQuery()<CR>", "Call REST endpoint" },
["<leader>dl"] = { "0d$", "Delete line from start" }, ["<leader>dl"] = { "0d$", "Delete line from start" },
["<leader>gp"] = { "<cmd> Git pull<CR>", "Git pull" }, ["<leader>gpu"] = { "<cmd> Git pull<CR>", "Git pull" },
["<leader>gpf"] = { ":Git push ", "Git push with option" },
["<leader>gmm"] = { "<cmd> Git merge master<CR>", "Git merge master" },
["<leader>gmi"] = { ":Git merge ", "Git merge ..." },
["<leader>ga"] = { ":Git commit -a --amend --no-edit --no-verify", "Git commit -a --amend --no-edit --no-verify" },
["<leader>gnb"] = { ":Git checkout -b ", "Checkout to a new branch" }, ["<leader>gnb"] = { ":Git checkout -b ", "Checkout to a new branch" },
["<leader>gri"] = { ":Git rebase -i HEAD~", "Git rebase interactive from HEAD" }, ["<leader>gri"] = { ":Git rebase -i HEAD~", "Git rebase interactive from HEAD" },
["<leader>mkd"] = { "<cmd>lua vim.api.nvim_create_user_command('PeekOpen', require('peek').open, {})<CR>", "Open markdown preview" }, ["<leader>grm"] = { ":Git rebase -i master", "Git rebase interactive from master" },
["<leader>mkc"] = { "<cmd>lua vim.api.nvim_create_user_command('PeekClose', require('peek').close, {})<CR>", "Open markdown preview" }, ["<leader>grr"] = { ":Git rebase -i ", "Git rebase interactive from <select>" },
-- ["<leader>mkd"] = { "<cmd>lua vim.api.nvim_create_user_command('PeekOpen', require('peek').open, {})<CR>", "Open markdown preview" },
-- ["<leader>mkc"] = { "<cmd>lua vim.api.nvim_create_user_command('PeekClose', require('peek').close, {})<CR>", "Open markdown preview" },
["n"] = { "nzz", "Next + auto center" }, ["n"] = { "nzz", "Next + auto center" },
["N"] = { "Nzz", "Previous + auto center" }, ["N"] = { "Nzz", "Previous + auto center" },
@ -114,7 +157,51 @@ M.customstuffs = {
-- Mappings: TODO -- Mappings: TODO
-- "trim(system('git branch --show-current 2>/dev/null'))" -- "trim(system('git branch --show-current 2>/dev/null'))"
["<leader>tt"] = { ":call append(line('.') - 1, repeat(' ', indent('.')) . '# TODO-' . trim(system('git branch --show-current 2>/dev/null')) . ': ' . input('Comment >'))<CR>", "Add TODO comment + add to quickfix list" }, -- ["<leader>ct"] = { ":call append(line('.') - 1, repeat(' ', indent('.')) . '# TODO-' . trim(system('git branch --show-current 2>/dev/null')) . ': ' . input('Comment >'))<CR>", "Add TODO comment + add to qflist" },
["<leader>ct"] = {
":call append(line('.') - 1, repeat(' ', indent('.')) . '# TODO: ' . input('Comment >'))<CR>",
"Add TODO comment + add to qflist",
},
["<leader>ww"] = { ":lua require('nvim-window').pick()<CR>", "Pick window to goto" },
["<leader>wm"] = { ":WinShift<CR>", "Enter move window mode" },
["<leader>ws"] = { ":WinShift swap<CR>", "Swap window, with selection" },
["<leader>gg"] = { ":LazyGit<CR>", "Open lazygit" },
["gf"] = { ":call search('[A-Z]', 'W')<CR>", "Go to next uppercase" },
["fg"] = { ":call search('[A-Z]', 'bW')<CR>", "Go to last uppercase" },
["glb"] = { ":lua require('gitlab').choose_merge_request()<CR>", "Gitlab: Choose merge request" },
["glr"] = { ":lua require('gitlab').review()<CR>", "Gitlab: review" },
["gls"] = { ":lua require('gitlab').summary()<CR>", "Gitlab: summary" },
["glo"] = { ":lua require('gitlab').open_in_browser()<CR>", "Gitlab: open in browser" },
["glu"] = { ":lua require('gitlab').copy_mr_url()<CR>", "Gitlab: open in browser" },
["glO"] = { ":lua require('gitlab').create_mr()<CR>", "Gitlab: create MR" },
["glaa"] = { ":lua require('gitlab').add_assignee()<CR>", "Gitlab: add_assignee" },
-- vim.keymap.set("n", "glb", gitlab.choose_merge_request)
-- vim.keymap.set("n", "glr", gitlab.review)
-- vim.keymap.set("n", "gls", gitlab.summary)
-- vim.keymap.set("n", "glA", gitlab.approve)
-- vim.keymap.set("n", "glR", gitlab.revoke)
-- vim.keymap.set("n", "glc", gitlab.create_comment)
-- vim.keymap.set("v", "glc", gitlab.create_multiline_comment)
-- vim.keymap.set("v", "glC", gitlab.create_comment_suggestion)
-- vim.keymap.set("n", "glO", gitlab.create_mr)
-- vim.keymap.set("n", "glm", gitlab.move_to_discussion_tree_from_diagnostic)
-- vim.keymap.set("n", "gln", gitlab.create_note)
-- vim.keymap.set("n", "gld", gitlab.toggle_discussions)
-- vim.keymap.set("n", "glaa", gitlab.add_assignee)
-- vim.keymap.set("n", "glad", gitlab.delete_assignee)
-- vim.keymap.set("n", "glla", gitlab.add_label)
-- vim.keymap.set("n", "glld", gitlab.delete_label)
-- vim.keymap.set("n", "glra", gitlab.add_reviewer)
-- vim.keymap.set("n", "glrd", gitlab.delete_reviewer)
-- vim.keymap.set("n", "glp", gitlab.pipeline)
-- vim.keymap.set("n", "glM", gitlab.merge)
-- vim.keymap.set("n", "glu", gitlab.copy_mr_url)
-- vim.keymap.set("n", "glP", gitlab.publish_all_drafts)
}, },
v = { v = {
["n"] = { "nzz", "Next + auto center" }, ["n"] = { "nzz", "Next + auto center" },
@ -148,12 +235,12 @@ M.tabufline = {
}, },
-- close buffer + hide terminal buffer -- close buffer + hide terminal buffer
["<leader>x"] = { -- ["<leader>x"] = {
function() -- function()
require("nvchad.tabufline").close_buffer() -- require("nvchad.tabufline").close_buffer()
end, -- end,
"Close buffer", -- "Close buffer",
}, -- },
}, },
} }
@ -325,25 +412,110 @@ M.telescope = {
n = { n = {
-- Resume -- Resume
["<a-f>"] = { "<cmd> Telescope resume <CR>", "Resume" }, ["<a-f>"] = { "<cmd> Telescope resume <CR>", "Resume" },
["<a-k>"] = { "<cmd> Telescope keymaps <CR>", "Show (and search) all [k]eymaps" },
-- find -- find
["<C-g>"] = { "<cmd> Telescope find_files <CR>", "Find files" }, ["<C-g>"] = { "<cmd> Telescope find_files <CR>", "Find files" },
["<C-x>"] = { "<cmd> Telescope find_files follow=true no_ignore=true hidden=true <CR>", "Find all" }, ["<C-x>"] = { "<cmd> Telescope find_files follow=true no_ignore=true hidden=true <CR>", "Find all" },
["<C-f>"] = { "<cmd> Telescope live_grep <CR>", "Live grep" }, ["<C-f>"] = { "<cmd> Telescope live_grep <CR>", "Live grep" },
["<C-b>"] = { "<cmd> Telescope buffers <CR>", "Find buffers" }, ["<C-b>"] = { "<cmd> Telescope buffers <CR>", "Find buffers" },
["<leader>fg"] = { "<cmd> lua require('telescope.builtin').live_grep({default_text=vim.fn.getreg('/')}) <CR>", "Live grep with actual search value as prefix" }, ["<leader>ff"] = {
["<leader>ac"] = { ":execute 'vimgrep' input('Pattern >', getreg('/')) '**/*' <CR>", "add search term files in quickfix list" }, "<cmd> lua require('telescope.builtin').live_grep({default_text='<<<<<<< HEAD'}) <CR>",
["<leader>qc"] = { "<cmd> Telescope quickfix <CR>", "Show quickfix list" }, "Search for git conflicts",
["<leader>qr"] = { ":execute 'cdo' '%s/' . input('Search term >', getreg('/')) . '/' . input('Replace by >', getreg('')) . '/g | update' <CR>", "Replace pattern in all quickfix list" }, },
["<leader>ll"] = { "<cmd> Telescope loclist <CR>", "Show loclist list" }, ["<leader>fg<CR>"] = { "<cmd> lua require('telescope.builtin').live_grep({}) <CR>", "Live grep" },
["<leader>fg/"] = {
"<cmd> lua require('telescope.builtin').live_grep({default_text=vim.fn.getreg('/')}) <CR>",
"Live grep with search term",
},
["<leader>fgw"] = {
"<cmd> lua require('telescope.builtin').live_grep({default_text=vim.fn.expand('<cword>')}) <CR>",
"Live grep with current word",
},
["<leader>gf<CR>"] = { "<cmd> lua require('telescope.builtin').find_files({}) <CR>", "Find files" },
["<leader>gf/"] = {
"<cmd> lua require('telescope.builtin').find_files({default_text=vim.fn.getreg('/')}) <CR>",
"Find files with search term",
},
["<leader>gfw"] = {
"<cmd> lua require('telescope.builtin').find_files({default_text=vim.fn.expand('<cword>')}) <CR>",
"Find files with current word",
},
["<leader>br<CR>"] = {
":execute '%s/' . input('Search term >') . '/' . input('Replace by >', '') . '/g | update' <CR>",
"Replace pattern in current buffer",
},
["<leader>br/"] = {
":execute '%s/' . input('Search term >', getreg('/')) . '/' . input('Replace by >', '') . '/g | update' <CR>",
"Replace search term pattern in current buffer",
},
["<leader>brw"] = {
":execute '%s/' . input('Search term >', expand('<cword>')) . '/' . input('Replace by >', '') . '/g | update' <CR>",
"Replace current word pattern in current buffer",
},
-- Quickfix list
["<leader>ql"] = { "<cmd> Telescope quickfix <CR>", "Show qflist" },
["<leader>qn"] = { ":cnext<CR>", "Jump to next in qflist" },
["]q"] = { ":cnext<CR>", "Jump to next in qflist" },
["<leader>qp"] = { ":cprevious<CR>", "Jump to previous in qflist" },
["[q"] = { ":cprevious<CR>", "Jump to previous in qflist" },
["<leader>qc"] = { ":call setqflist([]) | cclose<CR>", "Clear qflist" },
-- Quickfix replace all
["<leader>qr<CR>"] = {
":execute 'cfdo' '%s/' . input('Search term >') . '/' . input('Replace by >') . '/gI | update' <CR>",
"Replace pattern in all qflist",
},
["<leader>qr/"] = {
":execute 'cfdo' '%s/' . input('Search term >', getreg('/')) . '/' . input('Replace by >') . '/gI | update' <CR>",
"Replace search term in all qflist",
},
["<leader>qrw"] = {
":execute 'cfdo' '%s/' . input('Search term >', expand('<cword>')) . '/' . input('Replace by >') . '/gI | update' <CR>",
"Replace current word in all qflist",
},
-- Quickfix "search"
["<leader>qs<CR>"] = {
":execute 'vimgrep' '/' . input('Pattern >') . '\\C/' '**/*' <CR>",
"Add <> files in qflist",
},
["<leader>qs/"] = {
":execute 'vimgrep' '/' . input('Pattern >', getreg('/')) . '\\C/' '**/*' <CR>",
"Add search term files in qflist",
},
["<leader>qsw"] = {
":execute 'vimgrep' '/' . input('Pattern >', expand('<cword>')) . '\\C/' '**/*' <CR>",
"Add current word files in qflist",
},
-- Loclist list
["<leader>ll"] = { "<cmd> Telescope loclist <CR>", "Show loclist" },
["<leader>ln"] = { ":lnext<CR>", "Jump to next in loclist" }, ["<leader>ln"] = { ":lnext<CR>", "Jump to next in loclist" },
["]l"] = { ":lnext<CR>", "Jump to next in loclist" },
["<leader>lp"] = { ":lprevious<CR>", "Jump to previous in loclist" }, ["<leader>lp"] = { ":lprevious<CR>", "Jump to previous in loclist" },
["[l"] = { ":lprevious<CR>", "Jump to previous in loclist" },
["<leader>lc"] = { ":call setloclist([]) | lclose<CR>", "Clear loclist" },
["<leader>fh"] = { "<cmd> Telescope help_tags <CR>", "Help page" }, ["<leader>fh"] = { "<cmd> Telescope help_tags <CR>", "Help page" },
["<leader>fo"] = { "<cmd> Telescope oldfiles <CR>", "Find oldfiles" }, ["<leader>fo"] = { "<cmd> Telescope oldfiles <CR>", "Find oldfiles" },
["<leader>fz"] = { "<cmd> Telescope current_buffer_fuzzy_find <CR>", "Find in current buffer" }, ["<leader>fx<CR>"] = { "<cmd> Telescope current_buffer_fuzzy_find <CR>", "Find in current buffer" },
["<leader>fx/"] = {
"<cmd> lua require('telescope.builtin').current_buffer_fuzzy_find({default_text=vim.fn.getreg('/')}) <CR>",
"Fuzzy find in current buffer with actual search",
},
["<leader>fxw"] = {
"<cmd> lua require('telescope.builtin').current_buffer_fuzzy_find({default_text=vim.fn.expand('<cword>')}) <CR>",
"Fuzzy find in current buffer with current word",
},
["<leader>wl"] = { "<cmd> Telescope workspaces <CR>", "Find workspaces" },
["<leader>gm"] = { "<cmd> lua require('custom.telescope').cpickers()<CR>", "Commonly used commands" },
-- git -- git
--- Commits --- Commits
["<leader>gc"] = { "<cmd> lua require('custom.telescope').my_git_commits()<CR>", "Custom Git commits" }, ["<leader>gc"] = { "<cmd> lua require('custom.telescope').my_git_commits()<CR>", "Custom Git commits" },
@ -359,13 +531,24 @@ M.telescope = {
["<leader>pt"] = { "<cmd> Telescope terms <CR>", "Pick hidden term" }, ["<leader>pt"] = { "<cmd> Telescope terms <CR>", "Pick hidden term" },
-- theme switcher -- theme switcher
["<leader>th"] = { "<cmd> Telescope themes <CR>", "Nvchad themes" }, -- ["<leader>th"] = { "<cmd> Telescope themes <CR>", "Nvchad themes" },
["<leader>ma"] = { "<cmd> Telescope marks <CR>", "telescope bookmarks" }, ["<leader>ma"] = { "<cmd> Telescope marks <CR>", "telescope bookmarks" },
-- History -- History
["<leader>ch"] = { "<cmd> Telescope command_history <CR>", "telescope commands history" }, ["<leader>ch"] = { "<cmd> Telescope command_history <CR>", "telescope commands history" },
["<leader>/"] = { "<cmd> Telescope search_history <CR>", "telescope search history" }, ["<leader>/"] = { "<cmd> Telescope search_history <CR>", "telescope search history" },
-- Diaglist: LSP diagnostics in quick/loc list
["<leader>dw"] = {
"<cmd>lua require('diaglist').open_all_diagnostics()<CR>",
"Open all open buffers diagnostics in qflist",
},
["<leader>d0"] = {
"<cmd>lua require('diaglist').open_buffer_diagnostics()<CR>",
"Open current buffer diagnostics in loclist",
},
["<leader>;"] = { "<cmd> Telescope <CR>", "Open Telescope" },
}, },
} }
@ -533,7 +716,7 @@ M.gitsigns = {
"Blame line", "Blame line",
}, },
["<leader>td"] = { ["<leader>bd"] = {
function() function()
require("gitsigns").toggle_deleted() require("gitsigns").toggle_deleted()
end, end,
@ -542,4 +725,16 @@ M.gitsigns = {
}, },
} }
local all_modes = {
-- Override all delete/yank/paste to use the registers M by default
["y"] = { '"my', "Yank", { remap = false } },
["p"] = { '"mp', "Paste", { remap = false } },
["d"] = { '"md', "Delete", { remap = false } },
["<leader>y"] = { '"+y', "Yank into system register", { remap = false } },
["<leader>p"] = { '"+p', "Paste from system register", { remap = false } },
}
M.general[{ "n", "v" }] = all_modes
return M return M

View File

@ -13,6 +13,9 @@ M.load_config = function()
config.mappings.disabled = nil config.mappings.disabled = nil
end end
-- print(vim.inspect(config))
-- print(config)
-- print(vim.inspect(config.ui.statusline))
return config return config
end end

View File

@ -5,11 +5,47 @@ local M = {}
local highlights = require "custom.highlights" local highlights = require "custom.highlights"
M.ui = { M.ui = {
theme = "gatekeeper", theme = "onedark",
theme_toggle = { "gatekeeper", "monekai" }, theme_toggle = { "onedark", "onedark" },
hl_override = highlights.override, hl_override = highlights.override,
hl_add = highlights.add, hl_add = highlights.add,
statusline = {
order = {
"macro",
"mode",
"relativepath",
"file",
"git",
"%=",
"lsp_msg",
"%=",
"diagnostics",
"lsp",
"cwd",
"cursor",
},
modules = {
macro = function()
local noice = require "noice"
if noice.api.statusline.mode.has() then
return "%#St_CommandMode#" .. noice.api.statusline.mode.get()
end
return ""
end,
relativepath = function()
local stbufnr = vim.api.nvim_win_get_buf(vim.g.statusline_winid or 0)
local path = vim.api.nvim_buf_get_name(stbufnr)
if path == "" then
return ""
end
return "%#St_relativepath# " .. vim.fn.expand "%:.:h" .. " /"
end,
},
},
} }
M.plugins = "custom.plugins" M.plugins = "custom.plugins"

5
lua/custom/commands.lua Normal file
View File

@ -0,0 +1,5 @@
local C = {
{ "Replace {{X}} with {{ X }} in jinja template", "%s/{{\\(.[^ ]*\\)}}/{{ \\1 }}/g" },
}
return C

View File

@ -4,7 +4,8 @@ local capabilities = require("plugins.configs.lspconfig").capabilities
local lspconfig = require "lspconfig" local lspconfig = require "lspconfig"
-- if you just want default config for the servers then put them in a table -- if you just want default config for the servers then put them in a table
local servers = { "html", "cssls", "tsserver", "clangd" } -- local servers = { "html", "cssls", "tsserver", "clangd", "salt_ls", "pyright", "jedi_language_server" }
local servers = { "html", "cssls", "tsserver", "clangd", "salt_ls" }
for _, lsp in ipairs(servers) do for _, lsp in ipairs(servers) do
lspconfig[lsp].setup { lspconfig[lsp].setup {
@ -12,6 +13,3 @@ for _, lsp in ipairs(servers) do
capabilities = capabilities, capabilities = capabilities,
} }
end end
--
-- lspconfig.pyright.setup { blabla}

View File

@ -1,5 +1,8 @@
local present, null_ls = pcall(require, "null-ls") local present, null_ls = pcall(require, "null-ls")
if true then
return
end
if not present then if not present then
return return
end end
@ -10,7 +13,7 @@ local sources = {
-- webdev stuff -- webdev stuff
b.formatting.deno_fmt, -- choosed deno for ts/js files cuz its very fast! b.formatting.deno_fmt, -- choosed deno for ts/js files cuz its very fast!
b.formatting.prettier.with { filetypes = { "html", "markdown", "css" } }, -- so prettier works only on these filetypes b.formatting.prettier.with { filetypes = { "html", "markdown", "css", "js" }, extra_args = { "--tab-width 4" } }, -- so prettier works only on these filetypes
-- Lua -- Lua
b.formatting.stylua, b.formatting.stylua,

View File

@ -19,6 +19,15 @@ M.treesitter = {
-- "python" -- "python"
-- }, -- },
}, },
incremental_selection = {
enable = true,
keymaps = {
init_selection = "<C-space>",
node_incremental = "<C-space>",
scope_incremental = false,
node_decremental = "<bs>",
},
},
} }
M.mason = { M.mason = {

View File

@ -2,6 +2,12 @@
local previewers = require('telescope.previewers') local previewers = require('telescope.previewers')
local builtin = require('telescope.builtin') local builtin = require('telescope.builtin')
local pickers = require("telescope.pickers")
local finders = require("telescope.finders")
local actions = require("telescope.actions")
local action_state = require("telescope.actions.state")
local conf = require("telescope.config").values
local E = {} local E = {}
local delta = previewers.new_termopen_previewer { local delta = previewers.new_termopen_previewer {
@ -58,4 +64,44 @@ E.project_files = function()
end end
end end
local custom_commands = require("custom.commands")
E.cpickers = function(opts)
opts = opts or {}
pickers.new(opts, {
prompt_title = "Commands",
finder = finders.new_table {
results = custom_commands,
entry_maker = function(entry)
return {
value = entry,
display = entry[1],
ordinal = entry[2],
}
end
},
previewer = previewers.new_buffer_previewer {
title = "Custom commands preview",
define_preview = function (self, entry, _)
vim.api.nvim_buf_set_lines(self.state.bufnr, 0, -1, false, {
entry['ordinal'],
})
end
},
attach_mappings = function(prompt_bufnr, _)
actions.select_default:replace(function()
actions.close(prompt_bufnr)
local selection = action_state.get_selected_entry()
vim.cmd(selection.ordinal)
end)
return true
end,
sorter = conf.generic_sorter(opts),
}):find()
end
return E return E

View File

@ -0,0 +1,138 @@
local M = {
port = nil, -- The port of the Go server, which runs in the background, if omitted or `nil` the port will be chosen automatically
log_path = vim.fn.stdpath("cache") .. "/gitlab.nvim.log", -- Log path for the Go server
config_path = nil, -- Custom path for `.gitlab.nvim` file, please read the "Connecting to Gitlab" section
debug = {
go_request = false,
go_response = false,
},
attachment_dir = nil, -- The local directory for files (see the "summary" section)
reviewer_settings = {
diffview = {
imply_local = false, -- If true, will attempt to use --imply_local option when calling |:DiffviewOpen|
},
},
connection_settings = {
insecure = false, -- Like curl's --insecure option, ignore bad x509 certificates on connection
},
help = "g?", -- Opens a help popup for local keymaps when a relevant view is focused (popup, discussion panel, etc)
popup = { -- The popup for comment creation, editing, and replying
keymaps = {
next_field = "<Tab>", -- Cycle to the next field. Accepts count.
prev_field = "<S-Tab>", -- Cycle to the previous field. Accepts count.
},
perform_action = "<leader>s", -- Once in normal mode, does action (like saving comment or editing description, etc)
perform_linewise_action = "<leader>l", -- Once in normal mode, does the linewise action (see logs for this job, etc)
width = "50%",
height = "80%",
border = "rounded", -- One of "
opacity = 1.0, -- From 0.0 (fully transparent) to 1.0 (fully opaque)
comment = nil, -- Individual popup overrides, e.g. { width = "60%", height = "80%", border = "single", opacity = 0.85 },
edit = nil,
note = nil,
pipeline = nil,
reply = nil,
squash_message = nil,
temp_registers = {}, -- List of registers for backing up popup content (see `:h gitlab.nvim.temp-registers`)
},
discussion_tree = { -- The discussion tree that holds all comments
auto_open = true, -- Automatically open when the reviewer is opened
switch_view = "S", -- Toggles between the notes and discussions views
default_view = "discussions", -- Show "discussions" or "notes" by default
blacklist = {}, -- List of usernames to remove from tree (bots, CI, etc)
jump_to_file = "o", -- Jump to comment location in file
jump_to_reviewer = "m", -- Jump to the location in the reviewer window
edit_comment = "e", -- Edit comment
delete_comment = "dd", -- Delete comment
reply = "r", -- Reply to comment
toggle_node = "t", -- Opens or closes the discussion
add_emoji = "Ea", -- Add an emoji to the note/comment
-- add_emoji = "Ed", -- Remove an emoji from a note/comment
toggle_all_discussions = "T", -- Open or close separately both resolved and unresolved discussions
toggle_resolved_discussions = "R", -- Open or close all resolved discussions
toggle_unresolved_discussions = "U", -- Open or close all unresolved discussions
keep_current_open = false, -- If true, current discussion stays open even if it should otherwise be closed when toggling
publish_draft = "P", -- Publishes the currently focused note/comment
toggle_resolved = "p", -- Toggles the resolved status of the whole discussion
position = "left", -- "top", "right", "bottom" or "left"
open_in_browser = "b", -- Jump to the URL of the current note/discussion
copy_node_url = "u", -- Copy the URL of the current node to clipboard
size = "30%", -- Size of split
relative = "editor", -- Position of tree split relative to "editor" or "window"
resolved = '', -- Symbol to show next to resolved discussions
unresolved = '', -- Symbol to show next to unresolved discussions
tree_type = "by_file_name", -- Type of discussion tree - "simple" means just list of discussions, "by_file_name" means file tree with discussions under file
toggle_tree_type = "i", -- Toggle type of discussion tree - "simple", or "by_file_name"
draft_mode = false, -- Whether comments are posted as drafts as part of a review
toggle_draft_mode = "D", -- Toggle between draft mode (comments posted as drafts) and live mode (comments are posted immediately)
winbar = nil, -- Custom function to return winbar title, should return a string. Provided with WinbarTable (defined in annotations.lua)
-- If using lualine, please add "gitlab" to disabled file types, otherwise you will not see the winbar.
},
choose_merge_request = {
open_reviewer = true, -- Open the reviewer window automatically after switching merge requests
},
info = { -- Show additional fields in the summary view
enabled = true,
horizontal = false, -- Display metadata to the left of the summary rather than underneath
fields = { -- The fields listed here will be displayed, in whatever order you choose
"author",
"created_at",
"updated_at",
"merge_status",
"draft",
"conflicts",
"assignees",
"reviewers",
"pipeline",
"branch",
"target_branch",
"delete_branch",
"squash",
"labels",
},
},
discussion_signs = {
enabled = true, -- Show diagnostics for gitlab comments in the reviewer
skip_resolved_discussion = false, -- Show diagnostics for resolved discussions
severity = vim.diagnostic.severity.INFO, -- ERROR, WARN, INFO, or HINT
virtual_text = false, -- Whether to show the comment text inline as floating virtual text
priority = 100, -- Higher will override LSP warnings, etc
icons = {
comment = "→|",
range = " |",
},
},
pipeline = {
created = "",
pending = "",
preparing = "",
scheduled = "",
running = "",
canceled = "",
skipped = "",
success = "",
failed = "",
},
create_mr = {
target = "master", -- Default branch to target when creating an MR
template_file = nil, -- Default MR template in .gitlab/merge_request_templates
delete_branch = false, -- Whether the source branch will be marked for deletion
squash = false, -- Whether the commits will be marked for squashing
title_input = { -- Default settings for MR title input window
width = 40,
border = "rounded",
},
},
colors = {
discussion_tree = {
username = "Keyword",
date = "Comment",
chevron = "DiffviewNonText",
directory = "Directory",
directory_icon = "DiffviewFolderSign",
file_name = "Normal",
}
}
}
return M

View File

@ -0,0 +1,35 @@
local Hydra = require("hydra")
Hydra({
name = "Change / Resize Window",
mode = { "n" },
body = "<leader>t",
config = {
-- color = "pink",
},
heads = {
-- move between windows
{ "<C-h>", "<C-w>h", { desc="Noot nooty" } },
{ "<C-j>", "<C-w>j" },
{ "<C-k>", "<C-w>k" },
{ "<C-l>", "<C-w>l" },
-- resizing window
{ "H", "<C-w>3<" },
{ "L", "<C-w>3>" },
{ "K", "<C-w>2+" },
{ "J", "<C-w>2-" },
-- equalize window sizes
{ "e", "<C-w>=" },
-- close active window
{ "Q", ":q<cr>" },
{ "<C-q>", ":q<cr>" },
-- exit this Hydra
{ "q", nil, { exit = true, nowait = true } },
{ ";", nil, { exit = true, nowait = true } },
{ "<Esc>", nil, { exit = true, nowait = true } },
},
})

View File

@ -5,17 +5,16 @@ local M = {}
local utils = require "core.utils" local utils = require "core.utils"
-- export on_attach & capabilities for custom lspconfigs -- export on_attach & capabilities for custom lspconfigs
M.on_attach = function(client, bufnr) M.on_attach = function(client, bufnr)
client.server_capabilities.documentFormattingProvider = false
client.server_capabilities.documentRangeFormattingProvider = false
utils.load_mappings("lspconfig", { buffer = bufnr }) utils.load_mappings("lspconfig", { buffer = bufnr })
if client.server_capabilities.signatureHelpProvider then if client.server_capabilities.signatureHelpProvider then
require("nvchad.signature").setup(client) require("nvchad.signature").setup(client)
end end
end
-- disable semantic tokens
M.on_init = function(client, _)
if not utils.load_config().ui.lsp_semantic_tokens and client.supports_method "textDocument/semanticTokens" then if not utils.load_config().ui.lsp_semantic_tokens and client.supports_method "textDocument/semanticTokens" then
client.server_capabilities.semanticTokensProvider = nil client.server_capabilities.semanticTokensProvider = nil
end end
@ -41,9 +40,19 @@ M.capabilities.textDocument.completion.completionItem = {
}, },
} }
M.capabilities.textDocument.publishDiagnostics.tagSupport.valueSet = { 2 }
-- LSP settings (for overriding per client)
M.handlers = {
["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { border = "rounded" }),
["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = "rounded" }),
}
require("lspconfig").lua_ls.setup { require("lspconfig").lua_ls.setup {
on_init = M.on_init,
on_attach = M.on_attach, on_attach = M.on_attach,
capabilities = M.capabilities, capabilities = M.capabilities,
handlers = M.handlers,
settings = { settings = {
Lua = { Lua = {
@ -64,4 +73,82 @@ require("lspconfig").lua_ls.setup {
}, },
} }
-- local capabilities = vim.lsp.protocol.make_client_capabilities()
-- capabilities.textDocument.publishDiagnostics.tagSupport.valueSet = { 2 }
require("lspconfig").pyright.setup {
on_init = M.on_init,
on_attach = M.on_attach,
capabilities = M.capabilities,
handlers = M.handlers,
settings = {
pyright = {
-- Options available here: https://github.com/microsoft/pyright/blob/main/docs/settings.md
disableOrganizeImports = true, -- Using Ruff
-- disableLanguageServices = true, -- Using Ruff
},
python = {
analysis = {
-- ignore = { "*" }, -- Using Ruff
-- typeCheckingMode = "off", -- Using mypy
diagnosticSeverityOverrides = {
reportMissingImports = false,
reportAttributeAccessIssue = false,
},
},
},
},
}
-- -- This can be used for removing message based on regex etc. For now, all those message are disabled by the tagSupport.valueSet
-- local function filter(arr, func)
-- -- Filter in place
-- -- https://stackoverflow.com/questions/49709998/how-to-filter-a-lua-array-inplace
-- local new_index = 1
-- local size_orig = #arr
-- for old_index, v in ipairs(arr) do
-- if func(v, old_index) then
-- arr[new_index] = v
-- new_index = new_index + 1
-- end
-- end
-- for i = new_index, size_orig do
-- arr[i] = nil
-- end
-- end
--
-- local function filter_diagnostics(diagnostic)
-- -- Only filter out Pyright stuff for now
-- if diagnostic.source ~= "Pyright" then
-- return true
-- end
--
-- -- Allow kwargs to be unused, sometimes you want many functions to take the
-- -- same arguments but you don't use all the arguments in all the functions,
-- -- so kwargs is used to suck up all the extras
-- if diagnostic.message == '"kwargs" is not accessed' then
-- return false
-- end
--
-- -- Allow variables starting with an underscore
-- if string.match(diagnostic.message, '"_.+" is not accessed') then
-- return false
-- end
--
-- -- For now, remove all not accessed message. I will still have assigned but not accessed message!
-- if string.match(diagnostic.message, '".+" is not accessed') then
-- return false
-- end
--
-- return true
-- end
--
-- local function custom_on_publish_diagnostics(a, params, client_id, c)
-- filter(params.diagnostics, filter_diagnostics)
-- vim.lsp.diagnostic.on_publish_diagnostics(a, params, client_id, c)
-- end
--
-- vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(custom_on_publish_diagnostics, {})
return M return M

View File

@ -1,7 +1,7 @@
local options = { local options = {
ensure_installed = { "lua-language-server" }, -- not an option from mason.nvim ensure_installed = { "lua-language-server" }, -- not an option from mason.nvim
PATH = "skip", PATH = "prepand",
ui = { ui = {
icons = { icons = {

View File

@ -0,0 +1,46 @@
local M = {
lsp = {
-- override markdown rendering so that **cmp** and other plugins use **Treesitter**
override = {
["vim.lsp.util.convert_input_to_markdown_lines"] = true,
["vim.lsp.util.stylize_markdown"] = true,
},
},
-- you can enable a preset for easier configuration
presets = {
bottom_search = true, -- use a classic bottom cmdline for search
command_palette = true, -- position the cmdline and popupmenu together
long_message_to_split = true, -- long messages will be sent to a split
inc_rename = false, -- enables an input dialog for inc-rename.nvim
lsp_doc_border = false, -- add a border to hover docs and signature help
},
views = {
cmdline_popup = {
-- border = {
-- style = "none",
-- padding = { 2, 3 },
-- },
-- position = {
-- row = "85%",
-- col = "50%",
-- },
size = {
width = 120,
height = "auto",
},
},
popupmenu = {
-- relative = "editor",
-- position = {
-- row = 25,
-- col = "50%",
-- },
size = {
width = 120,
-- height = 10,
}
}
},
}
return M

View File

@ -1,46 +1,48 @@
-- See: https://github.com/neovim/nvim-lspconfig/tree/54eb2a070a4f389b1be0f98070f81d23e2b1a715#suggested-configuration -- See: https://github.com/neovim/nvim-lspconfig/tree/54eb2a070a4f389b1be0f98070f81d23e2b1a715#suggested-configuration
local opts = { noremap=true, silent=true } local opts = { noremap = true, silent = true }
vim.keymap.set('n', '<space>k', vim.diagnostic.open_float, opts) vim.keymap.set("n", "<space>k", vim.diagnostic.open_float, opts)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts) vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts)
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts) -- vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts)
-- Use an on_attach function to only map the following keys -- Use an on_attach function to only map the following keys
-- after the language server attaches to the current buffer -- after the language server attaches to the current buffer
local on_attach = function(client, bufnr) local on_attach = function(client, bufnr)
-- Enable completion triggered by <c-x><c-o> -- Enable completion triggered by <c-x><c-o>
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc")
-- Mappings. -- Mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions -- See `:help vim.lsp.*` for documentation on any of the below functions
local bufopts = { noremap=true, silent=true, buffer=bufnr } local bufopts = { noremap = true, silent = true, buffer = bufnr }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) -- vim.keymap.set("n", "gD", vim.lsp.buf.declaration, bufopts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) -- vim.keymap.set("n", "gd", vim.lsp.buf.definition, bufopts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) -- vim.keymap.set("n", "K", vim.lsp.buf.hover, bufopts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) -- vim.keymap.set("n", "gi", vim.lsp.buf.implementation, bufopts)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts) -- vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts) -- vim.keymap.set("n", "<space>wa", vim.lsp.buf.add_workspace_folder, bufopts)
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts) -- vim.keymap.set("n", "<space>wr", vim.lsp.buf.remove_workspace_folder, bufopts)
vim.keymap.set('n', '<space>wl', function() -- vim.keymap.set("n", "<space>wl", function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders())) -- print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, bufopts) -- end, bufopts)
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts) -- vim.keymap.set("n", "<space>D", vim.lsp.buf.type_definition, bufopts)
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts) -- vim.keymap.set("n", "<space>rn", vim.lsp.buf.rename, bufopts)
vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts) vim.keymap.set("n", "<space>ca", vim.lsp.buf.code_action, bufopts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) -- vim.keymap.set("n", "gr", vim.lsp.buf.references, bufopts)
vim.keymap.set('n', '<space>f', function() vim.lsp.buf.format { async = true } end, bufopts) -- vim.keymap.set("n", "<space>f", function()
-- vim.lsp.buf.format { async = true }
-- end, bufopts)
end end
-- Configure `ruff-lsp`. -- Configure `ruff-lsp`.
-- See: https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ruff_lsp -- See: https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ruff_lsp
-- For the default config, along with instructions on how to customize the settings -- For the default config, along with instructions on how to customize the settings
require('lspconfig').ruff_lsp.setup { require("lspconfig").ruff_lsp.setup {
on_attach = on_attach, on_attach = on_attach,
init_options = { init_options = {
settings = { settings = {
-- Any extra CLI arguments for `ruff` go here. -- Any extra CLI arguments for `ruff` go here.
args = {}, args = { "--ignore", "E741" },
} },
} },
} }

View File

@ -1,7 +1,20 @@
local custom_actions = {} local custom_actions = {}
local actions = require("telescope.actions") local actions = require("telescope.actions")
local lga_actions = require("telescope-live-grep-args.actions")
local action_state = require("telescope.actions.state") local action_state = require("telescope.actions.state")
local from_entry = require("telescope.from_entry") local from_entry = require("telescope.from_entry")
local scan = require("plenary.scandir")
local pickers = require("telescope.pickers")
local finders = require("telescope.finders")
local make_entry = require("telescope.make_entry")
local action_set = require 'telescope.actions.set'
local conf = require('telescope.config').values
local builtin = require("telescope.builtin")
-- Usefull:
-- [[
-- https://github.com/JoosepAlviste/dotfiles/blob/master/config/nvim/lua/j/telescope_custom_pickers.lua
-- ]]
local entry_to_qf = function(entry) local entry_to_qf = function(entry)
@ -91,6 +104,122 @@ function custom_actions.multi_selection_vtab(prompt_bufnr)
return custom_actions._multiopen(prompt_bufnr, "tabe", "tabe", "a", "loclist") return custom_actions._multiopen(prompt_bufnr, "tabe", "tabe", "a", "loclist")
end end
function custom_actions.set_extension(prompt_bufnr)
local current_input = action_state.get_current_line()
vim.ui.input({ prompt = 'Search in extension: *.' }, function(input)
if input == nil then
return
end
-- Close and reopen a prompt with the same input
actions.close(prompt_bufnr)
builtin.live_grep({ default_text = current_input, type_filter = input })
end)
end
function custom_actions.to_live_grep_args(prompt_bufnr)
local current_input = action_state.get_current_line()
-- Close and reopen a prompt with live_grep_args
actions.close(prompt_bufnr)
require("telescope").extensions.live_grep_args.live_grep_args({ default_text = current_input })
end
function custom_actions.set_folders(prompt_bufnr)
local current_input = action_state.get_current_line()
local data = {}
scan.scan_dir(vim.loop.cwd(), {
hidden = true,
only_dirs = true,
respect_gitignore = true,
on_insert = function(entry)
table.insert(data, entry .. "/")
end,
})
table.insert(data, 1, "./")
actions.close(prompt_bufnr)
-- Create a new picker with Telescope to select folders we want to filter in
pickers.new({
prompt_title = 'Select folders for current ("' .. current_input .. '") search',
finder = finders.new_table { results = data, entry_maker = make_entry.gen_from_file {} },
previewer = conf.file_previewer {},
sorter = conf.file_sorter {},
attach_mappings = function(prompt_bufnr2)
action_set.select:replace(function()
local current_picker = action_state.get_current_picker(prompt_bufnr2)
local dirs = {}
local selections = current_picker:get_multi_selection()
if vim.tbl_isempty(selections) then
table.insert(dirs, action_state.get_selected_entry().value)
else
for _, selection in ipairs(selections) do
table.insert(dirs, selection.value)
end
end
actions.close(prompt_bufnr2)
builtin.live_grep({ default_text = current_input, search_dirs = dirs })
end)
return true
end,
}):find()
end
function custom_actions.set_files(prompt_bufnr)
local current_input = action_state.get_current_line()
local find_command = {"rg", "--files", "--color=never", "--no-heading"}
actions.close(prompt_bufnr)
if current_input ~= "" then
find_command = {"rg", "--color=never", "--no-heading", "-l", current_input}
end
local opts = {
entry_maker = make_entry.gen_from_file(),
find_command = find_command,
}
print(vim.inspect(find_command))
-- Create a new picker with Telescope to select files we want to filter in
pickers
.new(opts, {
prompt_title = 'Select files for current ("' .. current_input .. '") search',
__locations_input = true,
finder = finders.new_oneshot_job(find_command, opts),
previewer = conf.grep_previewer(opts),
sorter = conf.file_sorter(opts),
attach_mappings = function(prompt_bufnr2)
actions.select_default:replace(function()
local current_picker = action_state.get_current_picker(prompt_bufnr2)
local files = {}
local selections = current_picker:get_multi_selection()
if vim.tbl_isempty(selections) then
local entry = action_state.get_selected_entry()
table.insert(files, entry.value)
else
for _, selection in ipairs(selections) do
table.insert(files, selection.value)
end
end
-- Close the preview picker and select a new one, restricted to the files selected
actions.close(prompt_bufnr2)
builtin.live_grep({ default_text = current_input, search_dirs = files })
end)
return true
end,
})
:find()
end
local options = { local options = {
defaults = { defaults = {
vimgrep_arguments = { vimgrep_arguments = {
@ -157,24 +286,68 @@ local options = {
find_files = { find_files = {
mappings = { mappings = {
i = { i = {
-- Fuzzy refine ("Freeze the current list and start a fuzzy search in the frozen list")
["<C-i>"] = actions.to_fuzzy_refine,
-- Send to qflist or loclist
["<C-l>"] = actions.smart_send_to_loclist,
["<C-Space>"] = actions.smart_send_to_qflist,
-- Multi selection open
["<CR>"] = custom_actions.multi_selection_open, ["<CR>"] = custom_actions.multi_selection_open,
["<C-V>"] = custom_actions.multi_selection_vsplit, ["<C-v>"] = custom_actions.multi_selection_vsplit,
["<C-X>"] = custom_actions.multi_selection_split, ["<C-X>"] = custom_actions.multi_selection_split,
["<C-T>"] = custom_actions.multi_selection_tab, ["<C-T>"] = custom_actions.multi_selection_tab,
["<C-SPACE>"] = actions.send_selected_to_qflist, },
n = i,
}
},
live_grep = {
mappings = {
i = {
-- Fuzzy refine ("Freeze the current list and start a fuzzy search in the frozen list")
["<C-i>"] = actions.to_fuzzy_refine,
-- Send to qflist or loclist
["<C-l>"] = actions.smart_send_to_loclist,
["<C-Space>"] = actions.smart_send_to_qflist,
-- To quote prompt -> Pass to live_grep_args
["<C-k>"] = custom_actions.to_live_grep_args,
-- Search for files/folder/extensions
["<C-f>"] = custom_actions.set_files,
["<C-g>"] = custom_actions.set_folders,
["<C-e>"] = custom_actions.set_extension,
}, },
n = i, n = i,
} }
} }
}, },
extensions_list = { "themes", "terms", "fzf" }, extensions_list = { "themes", "terms", "fzf", "macrothis", "live_grep_args" },
extensions = { extensions = {
fzf = { fzf = {
fuzzy = true, fuzzy = true,
override_generic_sorter = true, override_generic_sorter = true,
override_file_sorter = true, override_file_sorter = true,
case_mode = "smart_case", case_mode = "smart_case",
},
live_grep_args = {
auto_quoting = true,
mappings = {
i = {
-- Fuzzy refine ("Freeze the current list and start a fuzzy search in the frozen list")
["<C-i>"] = actions.to_fuzzy_refine,
-- Send to qflist or loclist
["<C-l>"] = actions.smart_send_to_loclist,
["<C-Space>"] = actions.smart_send_to_qflist,
-- Quote prompt, for passing parameters to vimgrep
["<C-k>"] = lga_actions.quote_prompt(),
},
}
} }
} }
} }

View File

@ -1,5 +1,5 @@
local options = { local options = {
ensure_installed = { "lua" }, ensure_installed = { "lua", "vim", "vimdoc" },
highlight = { highlight = {
enable = true, enable = true,

View File

@ -0,0 +1,133 @@
local M = {}
M.textobjects = {
select = {
enable = true,
-- Automatically jump forward to textobj, similar to targets.vim
lookahead = true,
keymaps = {
-- You can use the capture groups defined in textobjects.scm
["a="] = { query = "@assignment.outer", desc = "Select outer part of an assignment" },
["i="] = { query = "@assignment.inner", desc = "Select inner part of an assignment" },
["l="] = { query = "@assignment.lhs", desc = "Select left hand side of an assignment" },
["r="] = { query = "@assignment.rhs", desc = "Select right hand side of an assignment" },
["aa"] = { query = "@parameter.outer", desc = "Select outer part of a parameter/argument" },
["ia"] = { query = "@parameter.inner", desc = "Select inner part of a parameter/argument" },
["ai"] = { query = "@conditional.outer", desc = "Select outer part of a conditional" },
["ii"] = { query = "@conditional.inner", desc = "Select inner part of a conditional" },
["al"] = { query = "@loop.outer", desc = "Select outer part of a loop" },
["il"] = { query = "@loop.inner", desc = "Select inner part of a loop" },
["af"] = { query = "@call.outer", desc = "Select outer part of a function call" },
["if"] = { query = "@call.inner", desc = "Select inner part of a function call" },
["am"] = { query = "@function.outer", desc = "Select outer part of a function def" },
["im"] = { query = "@function.inner", desc = "Select inner part of a function def" },
["ak"] = { query = "@class.outer", desc = "Select outer part of a class" },
["ik"] = { query = "@class.inner", desc = "Select inner part of a class" },
["ac"] = { query = "@comment.outer", desc = "Select outer part of a comment" },
["ic"] = { query = "@comment.inner", desc = "Select inner part of a comment" },
},
},
move = {
enable = true,
-- Whether to set jumps in the jumplist
set_jumps = true,
goto_next_start = {
["]a"] = { query = "@parameter.outer", desc = "Goto next start outer parameter" },
["]i"] = { query = "@conditional.outer", desc = "Goto next start outer conditional" },
["]l"] = { query = "@loop.outer", desc = "Goto next start outer loop" },
["]f"] = { query = "@call.outer", desc = "Goto next start outer call" },
["]m"] = { query = "@function.outer", desc = "Goto next start outer function" },
["]k"] = { query = "@class.outer", desc = "Goto next start outer class" },
["]c"] = { query = "@comment.outer", desc = "Goto next start outer comment" },
},
goto_next_end = {
["]A"] = { query = "@parameter.outer", desc = "Goto next end outer parameter" },
["]I"] = { query = "@conditional.outer", desc = "Goto next end outer conditional" },
["]L"] = { query = "@loop.outer", desc = "Goto next end outer loop" },
["]F"] = { query = "@call.outer", desc = "Goto next end outer call" },
["]M"] = { query = "@function.outer", desc = "Goto next end outer function" },
["]K"] = { query = "@class.outer", desc = "Goto next end outer class" },
["]C"] = { query = "@comment.outer", desc = "Goto next end outer comment" },
},
goto_previous_start = {
["[a"] = { query = "@parameter.outer", desc = "Goto previous start outer parameter" },
["[i"] = { query = "@conditional.outer", desc = "Goto previous start outer conditional" },
["[l"] = { query = "@loop.outer", desc = "Goto previous start outer loop" },
["[f"] = { query = "@call.outer", desc = "Goto previous start outer call" },
["[m"] = { query = "@function.outer", desc = "Goto previous start outer function" },
["[k"] = { query = "@class.outer", desc = "Goto previous start outer class" },
["[c"] = { query = "@comment.outer", desc = "Goto previous start outer comment" },
},
goto_previous_end = {
["[A"] = { query = "@parameter.outer", desc = "Goto previous end outer parameter" },
["[I"] = { query = "@conditional.outer", desc = "Goto previous end outer conditional" },
["[L"] = { query = "@loop.outer", desc = "Goto previous end outer loop" },
["[F"] = { query = "@call.outer", desc = "Goto previous end outer call" },
["[M"] = { query = "@function.outer", desc = "Goto previous end outer function" },
["[K"] = { query = "@class.outer", desc = "Goto previous end outer class" },
["[C"] = { query = "@comment.outer", desc = "Goto previous end outer comment" },
},
},
swap = {
enable = true,
swap_next = {
["<leader>na"] = { query = "@parameter.inner", desc = "Swap with next inner parameter" },
["<leader>ni"] = { query = "@conditional.outer", desc = "Swap with next outer conditional" },
["<leader>nl"] = { query = "@loop.outer", desc = "Swap with next outer loop" },
["<leader>nf"] = { query = "@call.outer", desc = "Swap with next outer call" },
["<leader>nm"] = { query = "@function.outer", desc = "Swap with next outer function" },
["<leader>nk"] = { query = "@class.outer", desc = "Swap with next outer class" },
["<leader>nc"] = { query = "@comment.outer", desc = "Swap with next outer comment" },
["<leader>nA"] = { query = "@parameter.outer", desc = "Swap with next outer parameter" },
["<leader>nI"] = { query = "@conditional.inner", desc = "Swap with next inner conditional" },
["<leader>nL"] = { query = "@loop.inner", desc = "Swap with next inner loop" },
["<leader>nF"] = { query = "@call.inner", desc = "Swap with next inner call" },
["<leader>nM"] = { query = "@function.inner", desc = "Swap with next inner function" },
["<leader>nK"] = { query = "@class.inner", desc = "Swap with next inner class" },
["<leader>nC"] = { query = "@comment.inner", desc = "Swap with next inner comment" },
},
swap_previous = {
["<leader>pa"] = { query = "@parameter.inner", desc = "Swap with previous inner parameter" },
["<leader>pi"] = { query = "@conditional.outer", desc = "Swap with previous outer conditional" },
["<leader>pl"] = { query = "@loop.outer", desc = "Swap with previous outer loop" },
["<leader>pf"] = { query = "@call.outer", desc = "Swap with previous outer call" },
["<leader>pm"] = { query = "@function.outer", desc = "Swap with previous outer function" },
["<leader>pk"] = { query = "@class.outer", desc = "Swap with previous outer class" },
["<leader>pc"] = { query = "@comment.outer", desc = "Swap with previous outer comment" },
["<leader>pA"] = { query = "@parameter.outer", desc = "Swap with previous outer parameter" },
["<leader>pI"] = { query = "@conditional.inner", desc = "Swap with previous inner conditional" },
["<leader>pL"] = { query = "@loop.inner", desc = "Swap with previous inner loop" },
["<leader>pF"] = { query = "@call.inner", desc = "Swap with previous inner call" },
["<leader>pM"] = { query = "@function.inner", desc = "Swap with previous inner function" },
["<leader>pK"] = { query = "@class.inner", desc = "Swap with previous inner class" },
["<leader>pC"] = { query = "@comment.inner", desc = "Swap with previous inner comment" },
},
}
}
-- local ts_repeat_move = require "nvim-treesitter.textobjects.repeatable_move"
-- Repeat movement with ; and ,
-- vim.keymap.set({"n", "x", "o"}, ",", ts_repeat_move.repeat_last_move_next)
-- vim.keymap.set({"n", "x", "o"}, ",", ts_repeat_move.repeat_last_move_previous)
-- Optionnally, make builtin f, F, t, T also repeatable with ; and ,
-- vim.keymap.set({"n", "x", "o"}, "f", ts_repeat_move.builtin_f)
-- vim.keymap.set({"n", "x", "o"}, "F", ts_repeat_move.builtin_F)
-- vim.keymap.set({"n", "x", "o"}, "t", ts_repeat_move.builtin_t)
-- vim.keymap.set({"n", "x", "o"}, "T", ts_repeat_move.builtin_T)
return M

View File

@ -13,22 +13,135 @@ local default_plugins = {
end, end,
ft = { "markdown" }, ft = { "markdown" },
}, },
{"tpope/vim-fugitive", lazy=false}, { "tpope/vim-fugitive", lazy = false },
{"rbong/vim-flog", lazy=false}, { "rbong/vim-flog", lazy = false },
{"tpope/vim-surround", lazy=false}, { "tpope/vim-surround", lazy = false },
{"tpope/vim-obsession", lazy=false}, { "tpope/vim-obsession", lazy = false },
{"preservim/tagbar", lazy=false}, { "preservim/tagbar", lazy = false },
{"ludovicchabant/vim-gutentags", lazy=false}, { "ludovicchabant/vim-gutentags", lazy = false },
{"emaniacs/vim-rest-console", lazy=false}, { "emaniacs/vim-rest-console", lazy = false },
{ "mfussenegger/nvim-dap", lazy = false },
{
"rcarriga/nvim-dap-ui",
dependencies = {
"mfussenegger/nvim-dap",
"nvim-neotest/nvim-nio",
},
lazy = false,
},
{
"mfussenegger/nvim-dap-python",
dependencies = {
"mfussenegger/nvim-dap",
"rcarriga/nvim-dap-ui",
},
lazy = false,
init = function()
require("dap-python").setup "python"
-- Setup nvim-dap-ui also
require("dapui").setup()
end,
config = function(_, _)
local dap = require "dap"
vim.api.nvim_set_hl(0, "dark-orange", { bg = "#402c16" })
vim.fn.sign_define("DapBreakpoint", { text = "🛑", texthl = "", linehl = "", numhl = "" })
vim.fn.sign_define("DapStopped", { text = "", texthl = "", linehl = "dark-orange", numhl = "" })
dap.defaults.fallback.terminal_win_cmd = "tabnew"
dap.defaults.fallback.focus_terminal = true
end,
},
{
"Weissle/persistent-breakpoints.nvim",
lazy = false,
config = function(_, _)
require("persistent-breakpoints").setup {
load_breakpoints_event = { "BufReadPost" },
}
end,
},
{ "nvim-telescope/telescope-live-grep-args.nvim", lazy = false },
{ "nvim-telescope/telescope-dap.nvim", lazy = false },
{
"harrisoncramer/gitlab.nvim",
dependencies = {
"MunifTanjim/nui.nvim",
"nvim-lua/plenary.nvim",
"sindrets/diffview.nvim",
"stevearc/dressing.nvim", -- Recommended but not required. Better UI for pickers.
"nvim-tree/nvim-web-devicons", -- Recommended but not required. Icons in discussion tree.
},
enabled = true,
lazy = false,
build = function()
require("gitlab.server").build(true)
end, -- Builds the Go binary
opts = function()
return require "plugins.configs.gitlab"
end,
config = function(_, opts)
require("gitlab").setup(opts)
end,
},
{ {
"sindrets/diffview.nvim", "sindrets/diffview.nvim",
lazy=false, lazy = false,
opts = function() opts = function()
return require "plugins.configs.diffview" return require "plugins.configs.diffview"
end, end,
}, },
{"nvim-telescope/telescope-fzf-native.nvim", build="make"}, { "nvim-telescope/telescope-fzf-native.nvim", build = "make" },
{
"stevearc/quicker.nvim",
opts = {},
init = function()
require("quicker").setup()
end,
},
{
"chentoast/marks.nvim",
lazy = false,
init = function()
require("marks").setup {
default_mappings = true,
signs = true,
mappings = {},
}
end,
},
{
"stevearc/conform.nvim",
opts = {},
init = function()
require("conform").setup {
formatters_by_ft = {
lua = { "stylua" },
-- You can use a function here to determine the formatters dynamically
python = function(bufnr)
if require("conform").get_formatter_info("ruff_format", bufnr).available then
return { "isort", "black" }
-- return { "ruff_format" }
else
return { "isort", "black" }
end
end,
-- javascript = { "prettierd", "prettier", stop_after_first = true },
},
options = {
lang_to_formatters = {
json = { "jq" },
},
},
format_on_save = {
timeout_ms = 1000,
lsp_format = "fallback",
},
}
end,
},
{ {
"NvChad/base46", "NvChad/base46",
@ -45,7 +158,7 @@ local default_plugins = {
}, },
{ {
"NvChad/nvterm", "zbirenbaum/nvterm",
init = function() init = function()
require("core.utils").load_mappings "nvterm" require("core.utils").load_mappings "nvterm"
end, end,
@ -57,9 +170,7 @@ local default_plugins = {
{ {
"NvChad/nvim-colorizer.lua", "NvChad/nvim-colorizer.lua",
init = function() event = "User FilePost",
require("core.utils").lazy_load "nvim-colorizer.lua"
end,
config = function(_, opts) config = function(_, opts)
require("colorizer").setup(opts) require("colorizer").setup(opts)
@ -87,6 +198,7 @@ local default_plugins = {
init = function() init = function()
require("core.utils").lazy_load "indent-blankline.nvim" require("core.utils").lazy_load "indent-blankline.nvim"
end, end,
event = "User FilePost",
opts = function() opts = function()
return require("plugins.configs.others").blankline return require("plugins.configs.others").blankline
end, end,
@ -99,9 +211,7 @@ local default_plugins = {
{ {
"nvim-treesitter/nvim-treesitter", "nvim-treesitter/nvim-treesitter",
init = function() event = { "BufReadPost", "BufNewFile" },
require("core.utils").lazy_load "nvim-treesitter"
end,
cmd = { "TSInstall", "TSBufEnable", "TSBufDisable", "TSModuleInfo" }, cmd = { "TSInstall", "TSBufEnable", "TSBufDisable", "TSModuleInfo" },
build = ":TSUpdate", build = ":TSUpdate",
opts = function() opts = function()
@ -113,25 +223,18 @@ local default_plugins = {
end, end,
}, },
{
"nvim-treesitter/nvim-treesitter-textobjects",
lazy = false,
config = function()
require("nvim-treesitter.configs").setup(require "plugins.configs.treesitter_textobjects")
end,
},
-- git stuff -- git stuff
{ {
"lewis6991/gitsigns.nvim", "lewis6991/gitsigns.nvim",
ft = { "gitcommit", "diff" }, event = "User FilePost",
init = function()
-- load gitsigns only when a git file is opened
vim.api.nvim_create_autocmd({ "BufRead" }, {
group = vim.api.nvim_create_augroup("GitSignsLazyLoad", { clear = true }),
callback = function()
vim.fn.system("git -C " .. '"' .. vim.fn.expand "%:p:h" .. '"' .. " rev-parse")
if vim.v.shell_error == 0 then
vim.api.nvim_del_augroup_by_name "GitSignsLazyLoad"
vim.schedule(function()
require("lazy").load { plugins = { "gitsigns.nvim" } }
end)
end
end,
})
end,
opts = function() opts = function()
return require("plugins.configs.others").gitsigns return require("plugins.configs.others").gitsigns
end, end,
@ -154,7 +257,9 @@ local default_plugins = {
-- custom nvchad cmd to install all mason binaries listed -- custom nvchad cmd to install all mason binaries listed
vim.api.nvim_create_user_command("MasonInstallAll", function() vim.api.nvim_create_user_command("MasonInstallAll", function()
if opts.ensure_installed and #opts.ensure_installed > 0 then
vim.cmd("MasonInstall " .. table.concat(opts.ensure_installed, " ")) vim.cmd("MasonInstall " .. table.concat(opts.ensure_installed, " "))
end
end, {}) end, {})
vim.g.mason_binaries_list = opts.ensure_installed vim.g.mason_binaries_list = opts.ensure_installed
@ -163,9 +268,7 @@ local default_plugins = {
{ {
"neovim/nvim-lspconfig", "neovim/nvim-lspconfig",
init = function() event = "User FilePost",
require("core.utils").lazy_load "nvim-lspconfig"
end,
config = function() config = function()
require "plugins.configs.lspconfig" require "plugins.configs.lspconfig"
end, end,
@ -237,6 +340,166 @@ local default_plugins = {
end, end,
}, },
-- Save and load macro / register
{
"desdic/macrothis.nvim",
opts = {},
keys = {
{
"<Leader>kkd",
function()
require("macrothis").delete()
end,
desc = "[D]elete",
},
{
"<Leader>kke",
function()
require("macrothis").edit()
end,
desc = "[E]dit",
},
{
"<Leader>kkl",
function()
require("macrothis").load()
end,
desc = "[L]oad",
},
{
"<Leader>kkn",
function()
require("macrothis").rename()
end,
desc = "Re[n]ame",
},
{
"<Leader>kkq",
function()
require("macrothis").quickfix()
end,
desc = "Run macro on all files in [q]uickfix",
},
{
"<Leader>kkr",
function()
require("macrothis").run()
end,
desc = "[R]un macro",
},
{
"<Leader>kks",
function()
require("macrothis").save()
end,
desc = "[S]ave",
},
{
"<Leader>kkx",
function()
require("macrothis").register()
end,
desc = "Edit register",
},
{
"<Leader>kkp",
function()
require("macrothis").copy_register_printable()
end,
desc = "Co[p]y register as printable",
},
{
"<Leader>kkm",
function()
require("macrothis").copy_macro_printable()
end,
desc = "Copy [m]acro as printable",
},
},
},
{
"onsails/diaglist.nvim",
lazy = false,
debug = false,
},
{
"anuvyklack/hydra.nvim",
lazy = false,
},
{
"gioele/vim-autoswap",
lazy = false,
},
{
"natecraddock/workspaces.nvim",
lazy = false,
config = function()
require("workspaces").setup {
hooks = {
open = { "Telescope find_files" },
},
}
end,
},
{
"mangelozzi/rgflow.nvim",
lazy = false,
config = function()
require("rgflow").setup {
-- Set the default rip grep flags and options for when running a search via
-- RgFlow. Once changed via the UI, the previous search flags are used for
-- each subsequent search (until Neovim restarts).
cmd_flags = "--smart-case --fixed-strings --ignore --max-columns 200",
-- Mappings to trigger RgFlow functions
default_trigger_mappings = true,
-- These mappings are only active when the RgFlow UI (panel) is open
default_ui_mappings = true,
-- QuickFix window only mapping
default_quickfix_mappings = true,
}
end,
},
{
"yorickpeterse/nvim-window",
lazy = false,
config = function()
require("nvim-window").setup {
normal_hl = "Normal",
hint_hl = "Bold",
border = "single",
}
end,
},
{
"sindrets/winshift.nvim",
lazy = false,
},
{
"kdheepak/lazygit.nvim",
lazy = false,
config = function()
require("lazy").setup {
{
"kdheepak/lazygit.nvim",
-- optional for floating window border decoration
dependencies = {
"nvim-lua/plenary.nvim",
},
},
}
end,
},
-- file managing , picker etc -- file managing , picker etc
{ {
"nvim-tree/nvim-tree.lua", "nvim-tree/nvim-tree.lua",
@ -255,7 +518,7 @@ local default_plugins = {
{ {
"nvim-telescope/telescope.nvim", "nvim-telescope/telescope.nvim",
dependencies = { "nvim-treesitter/nvim-treesitter", { "nvim-telescope/telescope-fzf-native.nvim", build = "make" } }, dependencies = { "nvim-treesitter/nvim-treesitter" },
cmd = "Telescope", cmd = "Telescope",
init = function() init = function()
require("core.utils").load_mappings "telescope" require("core.utils").load_mappings "telescope"
@ -278,6 +541,7 @@ local default_plugins = {
-- Only load whichkey after all the gui -- Only load whichkey after all the gui
{ {
"folke/which-key.nvim", "folke/which-key.nvim",
lazy = false,
keys = { "<leader>", "<c-r>", "<c-w>", '"', "'", "`", "c", "v", "g" }, keys = { "<leader>", "<c-r>", "<c-w>", '"', "'", "`", "c", "v", "g" },
init = function() init = function()
require("core.utils").load_mappings "whichkey" require("core.utils").load_mappings "whichkey"
@ -288,6 +552,51 @@ local default_plugins = {
require("which-key").setup(opts) require("which-key").setup(opts)
end, end,
}, },
{
"ThePrimeagen/harpoon",
branch = "harpoon2",
dependencies = { "nvim-lua/plenary.nvim" },
},
{
"folke/noice.nvim",
event = "VeryLazy",
opts = function()
return require "plugins.configs.noice"
end,
init = function()
require("noice").setup {
routes = {
{
view = "notify",
filter = { event = "msg_showmode" },
},
},
}
-- require("notify").setup({
-- background_colour = "#000000"
-- })
end,
dependencies = {
"MunifTanjim/nui.nvim",
-- "rcarriga/nvim-notify",
},
},
{
"folke/todo-comments.nvim",
lazy = false,
dependencies = { "nvim-lua/plenary.nvim" },
opts = {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
},
},
{
"folke/trouble.nvim",
lazy = false,
cmd = "Trouble",
opts = {},
},
} }
local config = require("core.utils").load_config() local config = require("core.utils").load_config()