aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/home/.config/nvim/lua/custom/plugins/init.lua
diff options
context:
space:
mode:
authorLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2024-05-20 17:08:02 +0100
committerLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2024-05-20 17:08:02 +0100
commit079c385b9bd40a73ebafae6d847f62c2bed5126c (patch)
tree95d5e270ac7dab639fe7bca9b7a02041bfadfa47 /home/.config/nvim/lua/custom/plugins/init.lua
parent1d6fe632512eca513dab6a8868298df638e50e5e (diff)
downloaddotfiles-079c385b9bd40a73ebafae6d847f62c2bed5126c.tar.gz
dotfiles-079c385b9bd40a73ebafae6d847f62c2bed5126c.tar.bz2
dotfiles-079c385b9bd40a73ebafae6d847f62c2bed5126c.zip
[nvim] Rewrite config motivated by nvim 0.10
Diffstat (limited to 'home/.config/nvim/lua/custom/plugins/init.lua')
-rw-r--r--home/.config/nvim/lua/custom/plugins/init.lua1076
1 files changed, 4 insertions, 1072 deletions
diff --git a/home/.config/nvim/lua/custom/plugins/init.lua b/home/.config/nvim/lua/custom/plugins/init.lua
index 8c979e4..cfd6b24 100644
--- a/home/.config/nvim/lua/custom/plugins/init.lua
+++ b/home/.config/nvim/lua/custom/plugins/init.lua
@@ -5,34 +5,14 @@ return {
{ "tpope/vim-repeat", event = "VeryLazy" },
'tpope/vim-sleuth',
{
- "numToStr/Comment.nvim",
- config = true,
- },
- {
- "tpope/vim-unimpaired",
+ 'tummetott/unimpaired.nvim',
keys = { "]", "[", "yo" },
+ opts = {
+ -- add options here if you wish to override the default settings
+ },
},
- { "folke/which-key.nvim", lazy = true },
{ "kylechui/nvim-surround", config = true },
{
- "dstein64/vim-startuptime",
- cmd = "StartupTime",
- },
- "xiyaowong/nvim-cursorword",
- {
- "sainnhe/gruvbox-material",
- priority = 1000,
- config = function()
- vim.g.gruvbox_material_background = "hard"
- vim.g.gruvbox_material_enable_bold = 1
- vim.g.gruvbox_material_enable_italic = 1
- vim.g.gruvbox_material_better_performance = 1
- vim.g.gruvbox_material_palette = "original"
-
- vim.cmd([[ colorscheme gruvbox-material]])
- end
- },
- {
"aserowy/tmux.nvim",
config = true,
},
@@ -41,62 +21,6 @@ return {
dependencies = { "kana/vim-textobj-user" },
},
{
- "norcalli/nvim-colorizer.lua",
- event = "BufRead",
- config = true
- },
- {
- "lewis6991/hover.nvim",
- config = function()
- require("hover").setup {
- init = function()
- require("hover.providers.lsp")
- require('hover.providers.gh')
- require('hover.providers.man')
- -- require('hover.providers.dictionary')
- end,
- }
-
- vim.keymap.set("n", "K", require("hover").hover, { desc = "hover.nvim" })
- vim.keymap.set("n", "gh", require("hover").hover, { desc = "hover.nvim" })
- vim.keymap.set("n", "gK", require("hover").hover_select,
- { desc = "hover.nvim (select)" })
- end
- },
- { 'akinsho/git-conflict.nvim', config = true },
- {
- "lukas-reineke/indent-blankline.nvim",
- config = function()
- local highlight = {
- "RainbowRed",
- "RainbowYellow",
- "RainbowBlue",
- "RainbowOrange",
- "RainbowGreen",
- "RainbowViolet",
- "RainbowCyan",
- }
- local hooks = require "ibl.hooks"
- -- create the highlight groups in the highlight setup hook, so they are reset
- -- every time the colorscheme changes
- hooks.register(hooks.type.HIGHLIGHT_SETUP, function()
- vim.api.nvim_set_hl(0, "RainbowRed", { fg = "#E06C75" })
- vim.api.nvim_set_hl(0, "RainbowYellow", { fg = "#E5C07B" })
- vim.api.nvim_set_hl(0, "RainbowBlue", { fg = "#61AFEF" })
- vim.api.nvim_set_hl(0, "RainbowOrange", { fg = "#D19A66" })
- vim.api.nvim_set_hl(0, "RainbowGreen", { fg = "#98C379" })
- vim.api.nvim_set_hl(0, "RainbowViolet", { fg = "#C678DD" })
- vim.api.nvim_set_hl(0, "RainbowCyan", { fg = "#56B6C2" })
- end)
-
- vim.g.rainbow_delimiters = { highlight = highlight }
- require("ibl").setup { scope = { highlight = highlight } }
-
- hooks.register(hooks.type.SCOPE_HIGHLIGHT,
- hooks.builtin.scope_highlight_from_extmark)
- end
- },
- {
"monaqa/dial.nvim",
config = function()
map.n("]i", require("dial.map").inc_normal())
@@ -111,1000 +35,8 @@ return {
build = "cd app && yarn install",
ft = { "markdown" },
},
- "gpanders/editorconfig.nvim",
{
"kwkarlwang/bufresize.nvim",
config = true
},
- "kovetskiy/sxhkd-vim",
- "tmux-plugins/vim-tmux",
- "chrisbra/csv.vim",
- "martinda/Jenkinsfile-vim-syntax",
- "rhysd/vim-llvm",
- "MTDL9/vim-log-highlighting",
- "raimon49/requirements.txt.vim",
- "wgwoods/vim-systemd-syntax",
- {
- "NeogitOrg/neogit",
- dependencies = {
- "nvim-lua/plenary.nvim",
- "nvim-telescope/telescope.nvim",
- },
- config = function()
- local neogit = require("neogit")
- neogit.setup({
- disable_commit_confirmation = true,
- kind = "split",
- console_timeout = 5000,
- auto_show_console = false,
- })
- map.n("<leader>ng", neogit.open)
- end,
- },
- {
- "ruifm/gitlinker.nvim",
- keys = {
- { "<leader>gy", function() require 'gitlinker'.get_buf_range_url("n") end },
- {
- "<leader>gy",
- function()
- require 'gitlinker'.get_buf_range_url("v")
- end,
- mode = "v"
- },
- },
- dependencies = {
- "nvim-lua/plenary.nvim",
- },
- config = function()
- require "gitlinker".setup({
- callbacks = {
- ["personal"] = function(url_data)
- url_data.host = "github.com"
- return require "gitlinker.hosts".get_github_type_url(url_data)
- end,
- ["work"] = function(url_data)
- url_data.host = "github.com"
- return require "gitlinker.hosts".get_github_type_url(url_data)
- end,
- ["git.strisemarx.com"] = function(url_data)
- local url = require "gitlinker.hosts".get_base_https_url(url_data)
- url = url .. "/tree/" .. url_data.file .. "?id=" .. url_data.rev
- if url_data.lstart then
- url = url .. "#n" .. url_data.lstart
- end
- return url
- end
- },
- })
- end,
- },
- {
- "lewis6991/gitsigns.nvim",
- event = "BufRead",
- opts = {
- signs = {
- change = { show_count = true },
- delete = { show_count = true },
- topdelete = { show_count = true },
- changedelete = { show_count = true },
- },
- numhl = true,
- _extmark_signs = true,
- _threaded_diff = true,
- _signs_staged_enable = true,
- on_attach = function(bufnr)
- local gs = package.loaded.gitsigns
-
- -- Navigation
- map.n(']c', function()
- if vim.wo.diff then return ']c' end
- vim.schedule(function() gs.next_hunk() end)
- return '<Ignore>'
- end, { expr = true }, bufnr)
-
- map.n('[c', function()
- if vim.wo.diff then return '[c' end
- vim.schedule(function() gs.prev_hunk() end)
- return '<Ignore>'
- end, { expr = true }, bufnr)
-
- -- Actions
- map.nvcmd('<leader>hs', "Gitsigns stage_hunk", nil, bufnr)
- map.nvcmd('<leader>hr', "Gitsigns reset_hunk", nil, bufnr)
- map.n('<leader>hS', gs.stage_buffer, nil, bufnr)
- map.n('<leader>hu', gs.undo_stage_hunk, nil, bufnr)
- map.n('<leader>hR', gs.reset_buffer, nil, bufnr)
- map.n('<leader>hp', gs.preview_hunk, nil, bufnr)
- map.n('<leader>hb', function() gs.blame_line { full = true } end, nil,
- bufnr)
- map.n('<leader>tb', gs.toggle_current_line_blame, nil, bufnr)
- map.n('<leader>hd', gs.diffthis, nil, bufnr)
- map.n('<leader>hD', function() gs.diffthis('~') end, nil, bufnr)
- map.n('<leader>hc', gs.change_base, nil, bufnr)
- map.n('<leader>hC', function() gs.change_base('~') end, nil, bufnr)
- map.n('<leader>td', gs.toggle_deleted, nil, bufnr)
- map.n('<leader>tw', gs.toggle_word_diff, nil, bufnr)
- map.n('<leader>tl', gs.toggle_linehl, nil, bufnr)
-
- -- Text object
- map.map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<CR>', nil, bufnr)
- end
- },
- dependencies = {
- "nvim-lua/plenary.nvim",
- },
- },
- {
- "nvim-telescope/telescope.nvim",
- config = function()
- local actions = require("telescope.actions")
- require("telescope").setup({
- defaults = {
- sorting_strategy = "ascending",
- layout_config = {
- prompt_position = "top",
- },
- scroll_strategy = "cycle",
- selection_strategy = "follow",
- color_devicons = false,
- mappings = {
- i = {
- ["<c-j>"] = actions.move_selection_next,
- ["<c-k>"] = actions.move_selection_previous,
- },
- },
- extensions = {
- fzf = {
- fuzzy = true, -- false will only do exact matching
- override_generic_sorter = true, -- override the generic sorter
- override_file_sorter = true, -- override the file sorter
- case_mode = "smart_case", -- or "ignore_case" or "respect_case"
- },
- ["ui-select"] = {
- require("telescope.themes").get_dropdown({
- -- even more opts
- }),
- },
- },
- },
- })
- require("telescope").load_extension("fzf")
- require("telescope").load_extension("ui-select")
-
- local b = require("telescope.builtin")
-
- map.n("<localleader>p", b.planets)
- map.n("<localleader>B", b.builtin)
- map.n("<localleader>/", b.live_grep)
- map.n("<localleader>?", b.grep_string)
- map.n("<localleader>f", function()
- b.find_files({
- find_command = {
- "fd",
- "--type",
- "file",
- "--follow",
- "--hidden",
- "--exclude",
- ".git",
- },
- })
- end)
- map.n("<localleader>b", function()
- b.buffers({ sort_lastused = true, initial_mode = "normal" })
- end)
-
- map.n("<localleader>t", b.treesitter)
-
- map.n("<localleader>c", b.commands)
- map.n("<localleader>h", b.help_tags)
- map.n("<localleader>m", b.man_pages)
- map.n("<localleader>k", b.keymaps)
- map.n("<localleader>Q", function()
- b.quickfix({ initial_mode = "normal" })
- end)
- map.n("<localleader>L", function()
- b.loclist({ initial_mode = "normal" })
- end)
- map.n("<localleader>R", function()
- b.registers({ initial_mode = "normal" })
- end)
- map.n("<localleader>A", b.autocommands)
-
- map.n("gd", function()
- b.lsp_definitions({ initial_mode = "normal" })
- end)
- map.n("gvd", function()
- b.lsp_definitions({ initial_mode = "normal", jump_type = "vsplit" })
- end)
- map.n("gxd", function()
- b.lsp_definitions({ initial_mode = "normal", jump_type = "split" })
- end)
- map.n("gtd", function()
- b.lsp_definitions({ initial_mode = "normal", jump_type = "tab" })
- end)
- map.n("gi", function()
- b.lsp_implementations({ initial_mode = "normal" })
- end)
- map.n("gvi", function()
- b.lsp_implementations({ initial_mode = "normal", jump_type = "vsplit" })
- end)
- map.n("gxi", function()
- b.lsp_implementations({ initial_mode = "normal", jump_type = "split" })
- end)
- map.n("gti", function()
- b.lsp_implementations({ initial_mode = "normal", jump_type = "tab" })
- end)
- map.n("go", b.lsp_document_symbols)
- map.n("gS", b.lsp_dynamic_workspace_symbols)
- map.n("ge", function()
- b.lsp_document_diagnostics({ initial_mode = "normal" })
- end)
- map.n("gE", function()
- b.lsp_workspace_diagnostics({ initial_mode = "normal" })
- end)
- map.n("gr", function()
- b.lsp_references({ initial_mode = "normal" })
- end)
- map.n("gic", function()
- b.lsp_incoming_calls({ initial_mode = "normal" })
- end)
- map.n("goc", function()
- b.lsp_outgoing_calls({ initial_mode = "normal" })
- end)
- end,
- dependencies = {
- "nvim-lua/plenary.nvim",
- {
- "nvim-telescope/telescope-fzf-native.nvim",
- build = "make",
- },
- "nvim-telescope/telescope-ui-select.nvim",
- },
- },
- {
- "mfussenegger/nvim-dap",
- config = function()
- local dap = require("dap")
-
- dap.defaults.fallback.force_external_terminal = true
- dap.defaults.fallback.external_terminal = {
- command = "/usr/bin/st",
- args = { "-e" },
- }
-
- dap.defaults.fallback.terminal_win_cmd = "50vsplit new"
-
- local function get_env_vars()
- local variables = {}
- for k, v in pairs(vim.fn.environ()) do
- table.insert(variables, string.format("%s=%s", k, v))
- end
- return variables
- end
-
- dap.adapters.lldb = {
- type = "executable",
- command = "/usr/bin/lldb-vscode",
- name = "lldb",
- }
-
- local function str_split(inputstr, sep)
- sep = sep or "%s"
- local t = {}
- for str in inputstr:gmatch("([^" .. sep .. "]+)") do
- table.insert(t, str)
- end
- return t
- end
-
- local _cmd = nil
-
- local function get_cmd()
- if _cmd then
- return _cmd
- end
- local clipboard_cmd = vim.fn.getreg("+")
- _cmd = vim.fn.input({
- prompt = "Command to execute: ",
- default = clipboard_cmd
- })
- return _cmd
- end
-
- local function get_program()
- return str_split(get_cmd())[1]
- end
-
- local function get_args()
- local argv = str_split(get_cmd())
- local args = {}
-
- if #argv < 2 then
- return {}
- end
-
- for i = 2, #argv do
- args[#args + 1] = argv[i]
- end
-
- return args
- end
-
- dap.configurations.cpp = {
- {
- name = "Launch",
- type = "lldb",
- request = "launch",
- cwd = "${workspaceFolder}",
- program = get_program,
- stopOnEntry = true,
- args = get_args,
- env = get_env_vars,
- runInTerminal = true,
- },
- {
- -- If you get an "Operation not permitted" error using this, try disabling YAMA:
- -- echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
- name = "Attach to process",
- type = "lldb",
- request = "attach",
- pid = require('dap.utils').pick_process,
- },
- }
-
- dap.configurations.c = dap.configurations.cpp
- dap.configurations.rust = dap.configurations.cpp
-
- local get_python_path = function()
- local venv_path = os.getenv("VIRTUAL_ENV")
- if venv_path then
- return venv_path .. "/bin/python"
- end
- return "/usr/bin/python"
- end
-
- require("dap-python").setup(get_python_path())
-
- dap.adapters.nlua = function(callback, config)
- callback({ type = "server", host = config.host, port = config.port })
- end
-
- dap.configurations.lua = {
- {
- type = "nlua",
- request = "attach",
- name = "Attach to running Neovim instance",
- host = function()
- local value = vim.fn.input("Host [127.0.0.1]: ")
- if value ~= "" then
- return value
- end
- return "127.0.0.1"
- end,
- port = function()
- local val = tonumber(vim.fn.input("Port: "))
- assert(val, "Please provide a port number")
- return val
- end,
- },
- }
-
- dap.repl.commands = vim.tbl_extend("force", dap.repl.commands, {
- continue = { "continue", "c" },
- next_ = { "next", "n" },
- back = { "back", "b" },
- reverse_continue = { "reverse-continue", "rc" },
- into = { "into" },
- into_target = { "into_target" },
- out = { "out" },
- scopes = { "scopes" },
- threads = { "threads" },
- frames = { "frames" },
- exit = { "exit", "quit", "q" },
- up = { "up" },
- down = { "down" },
- goto_ = { "goto" },
- capabilities = { "capabilities", "cap" },
- -- add your own commands
- custom_commands = {
- ["echo"] = function(text)
- dap.repl.append(text)
- end,
- },
- })
-
- map.n("<F4>", dap.close)
- map.n("<F5>", dap.continue)
- map.n("<F10>", dap.step_over)
- map.n("<F11>", dap.step_into)
- map.n("<F12>", dap.step_out)
- map.n("<leader>b", dap.toggle_breakpoint)
- map.n("<leader>B", function()
- dap.set_breakpoint(vim.fn.input("Breakpoint condition: "))
- end)
- map.n("<leader>lp", function()
- dap.set_breakpoint(nil, nil, vim.fn.input("Log point message: "))
- end)
- map.n("<leader>dr", dap.repl.open)
- map.n("<leader>dl", dap.run_last)
- map.n("<F2>", dap.list_breakpoints)
-
- local dapui = require("dapui")
- dap.listeners.after.event_initialized["dapui_config"] = function()
- dapui.open()
- end
- dap.listeners.before.event_terminated["dapui_config"] = function()
- dapui.close()
- end
- dap.listeners.before.event_exited["dapui_config"] = function()
- dapui.close()
- end
- map.n("<leader>du", dapui.toggle)
- map.v("<leader>de", dapui.eval)
- end,
- dependencies = {
- {
- "rcarriga/nvim-dap-ui",
- dependencies = "nvim-neotest/nvim-nio",
- opts = {
- icons = { expanded = "-", collapsed = "+", current_frame = "*" },
- controls = { enabled = false },
- layouts = {
- {
- elements = {
- -- Elements can be strings or table with id and size keys.
- "scopes",
- "breakpoints",
- "stacks",
- "watches",
- },
- size = 40,
- position = "left",
- },
- {
- elements = {
- "repl",
- },
- size = 0.25, -- 25% of total lines
- position = "bottom",
- },
- },
- },
- },
- {
- "mfussenegger/nvim-dap-python",
- keys = {
- { "gm", function()
- require("dap-python").test_method()
- end },
- {
- "g<cr>",
- function()
- require("dap-python").debug_selection()
- end,
- mode = "v"
- },
- },
- },
- "jbyuki/one-small-step-for-vimkind",
- {
- "theHamsta/nvim-dap-virtual-text",
- config = true,
- dependencies = { "nvim-treesitter/nvim-treesitter" }
- }
- },
- },
- {
- 'nvim-treesitter/nvim-treesitter',
- dependencies = {
- 'nvim-treesitter/nvim-treesitter-textobjects',
- "nvim-treesitter/nvim-treesitter-refactor",
- "RRethy/nvim-treesitter-textsubjects",
- "theHamsta/nvim-treesitter-pairs",
- "RRethy/nvim-treesitter-endwise",
- },
- build = ":TSUpdate",
- config = function()
- require("nvim-treesitter.configs").setup({
- ensure_installed = {
- "bash",
- "c",
- "cmake",
- "comment",
- "cpp",
- "css",
- "cuda",
- "diff",
- "dockerfile",
- "fortran",
- "git_rebase",
- "gitattributes",
- "gitcommit",
- "gitignore",
- "go",
- "html",
- "javascript",
- "jsdoc",
- "json",
- "llvm",
- "lua",
- "make",
- "markdown",
- "markdown_inline",
- "ninja",
- "python",
- "regex",
- "rust",
- "sql",
- "todotxt",
- "toml",
- "typescript",
- "vim",
- "vimdoc",
- "yaml"
- },
- -- ignore_install = { "phpdoc" },
- highlight = {
- enable = true, -- false will disable the whole extension
- additional_vim_regex_highlighting = false,
- },
- incremental_selection = {
- enable = true,
- keymaps = {
- init_selection = "gnn",
- node_incremental = "grn",
- scope_incremental = "grc",
- node_decremental = "grm",
- },
- },
- indent = { enable = true },
- refactor = {
- highlight_definitions = { enable = true },
- highlight_current_scope = { enable = true },
- smart_rename = { enable = true, keymaps = { smart_rename = "grr" } },
- navigation = {
- enable = true,
- keymaps = {
- goto_definition = "gnd",
- list_definitions = "gnD",
- list_definitions_toc = "gO",
- goto_next_usage = "<a-*>",
- goto_previous_usage = "<a-#>",
- },
- },
- },
- 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
- ["af"] = "@function.outer",
- ["if"] = "@function.inner",
- ["ac"] = "@class.outer",
- ["ic"] = "@class.inner",
- },
- },
- swap = {
- enable = true,
- swap_next = { ["<leader>a"] = "@parameter.inner" },
- swap_previous = { ["<leader>A"] = "@parameter.inner" },
- },
- move = {
- enable = true,
- set_jumps = true, -- whether to set jumps in the jumplist
- goto_next_start = {
- ["]m"] = "@function.outer",
- ["]]"] = "@class.outer",
- },
- goto_next_end = {
- ["]M"] = "@function.outer",
- ["]["] = "@class.outer",
- },
- goto_previous_start = {
- ["[m"] = "@function.outer",
- ["[["] = "@class.outer",
- },
- goto_previous_end = {
- ["[M"] = "@function.outer",
- ["[]"] = "@class.outer",
- },
- },
- lsp_interop = {
- enable = true,
- peek_definition_code = {
- ["df"] = "@function.outer",
- ["dF"] = "@class.outer",
- },
- },
- },
- matchup = {
- enable = true,
- },
- pairs = {
- enable = true,
- goto_right_end = false,
- keymaps = { goto_partner = "%" },
- },
- textsubjects = {
- enable = true,
- keymaps = { ["."] = "textsubjects-smart", [";"] = "textsubjects-big" },
- },
- tree_docs = {
- enable = true,
- },
- endwise = {
- enable = true,
- },
- })
- end
- },
- {
- "hrsh7th/nvim-cmp",
- event = "InsertEnter",
- config = function()
- local cmp = require("cmp")
-
- local has_words_before = function()
- local line, col = unpack(vim.api.nvim_win_get_cursor(0))
- return col ~= 0
- and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]
- :sub(col, col)
- :match("%s")
- == nil
- end
-
- local luasnip = require("luasnip")
-
- cmp.setup({
- snippet = {
- expand = function(args)
- require("luasnip").lsp_expand(args.body)
- end,
- },
- mapping = {
- ["<Tab>"] = cmp.mapping(function(fallback)
- if cmp.visible() then
- cmp.select_next_item()
- elseif luasnip.expand_or_jumpable() then
- luasnip.expand_or_jump()
- elseif has_words_before() then
- cmp.complete()
- else
- fallback()
- end
- end, {
- "i",
- "s",
- }),
- ["<S-Tab>"] = cmp.mapping(function(fallback)
- if cmp.visible() then
- cmp.select_prev_item()
- elseif luasnip.jumpable(-1) then
- luasnip.jump(-1)
- else
- fallback()
- end
- end, {
- "i",
- "s",
- }),
- ["<CR>"] = cmp.mapping.confirm({
- behavior = cmp.ConfirmBehavior.Replace,
- select = true,
- }),
- },
- formatting = {
- format = function(entry, vim_item)
- -- set a name for each source
- vim_item.menu = ({
- path = "[Path]",
- nvim_lsp = "[LSP]",
- luasnip = "[LuaSnip]",
- dap = "[dap]",
- })[entry.source.name]
- return vim_item
- end,
- },
- sources = {
- { name = "nvim_lsp" },
- { name = "luasnip" },
- { name = "path" },
- { name = "nvim_lsp_signature_help" },
- },
- })
-
- require "cmp".setup.filetype(
- { "dap-repl", "dapui_watches", "dapui_hover" }, {
- sources = {
- { name = "dap" },
- },
- })
- end,
- dependencies = {
- "hrsh7th/cmp-nvim-lsp",
- "hrsh7th/cmp-path",
- "hrsh7th/cmp-nvim-lsp-signature-help",
- "rcarriga/cmp-dap",
- {
- "saadparwaiz1/cmp_luasnip",
- dependencies = {
- {
- "L3MON4D3/LuaSnip",
- event = "InsertCharPre",
- keys = {
- { "<c-j>", function() require "luasnip".jump(1) end, mode = "i" },
- { "<c-k>", function() require "luasnip".jump(-1) end, mode = "i" },
- },
- config = function()
- require("luasnip/loaders/from_vscode").lazy_load()
- end,
- dependencies = {
- "kitagry/vs-snippets",
- "rafamadriz/friendly-snippets",
- "kkonghao/snippet-dog",
- },
- }
- },
- },
- },
- },
- {
- 'neovim/nvim-lspconfig',
- config = function()
- local lspconfig = require("lspconfig")
- -- Enable (broadcasting) snippet capability for completion
- local capabilities = vim.lsp.protocol.make_client_capabilities()
- capabilities.textDocument.completion.completionItem.snippetSupport = true
- capabilities.workspace.didChangeWatchedFiles.dynamicRegistration = true
- capabilities = require("cmp_nvim_lsp").default_capabilities(capabilities)
-
- lspconfig.util.default_config = vim.tbl_extend(
- "force",
- lspconfig.util.default_config,
- {
- on_attach = require "cfg.lsp".on_attach_wrapper,
- capabilities = capabilities,
- flags = {
- debounce_text_changes = 150,
- },
- }
- )
-
- local function switch_source_header_splitcmd(bufnr, splitcmd)
- bufnr = lspconfig.util.validate_bufnr(bufnr)
- local clangd_client = lspconfig.util.get_active_client_by_name(
- bufnr,
- "clangd"
- )
- local params = { uri = vim.uri_from_bufnr(bufnr) }
- if clangd_client then
- clangd_client.request(
- "textDocument/switchSourceHeader",
- params,
- function(err, result)
- if err then
- error(tostring(err))
- end
- if not result then
- print("Corresponding file cannot be determined")
- return
- end
- vim.api.nvim_command(splitcmd .. " " .. vim.uri_to_fname(result))
- end,
- bufnr
- )
- else
- print(
- "method textDocument/switchSourceHeader is not supported by any servers active on the current buffer"
- )
- end
- end
-
- local servers = {
- bashls = {},
- dockerls = {},
- fortls = {},
- lua_ls = {
- on_attach = function(client, bufnr)
- require("cfg.lsp").on_attach_wrapper(
- client,
- bufnr,
- { auto_format = true }
- )
- end,
- settings = {
- Lua = {
- completion = {
- callSnippet = "Both",
- displayContext = 1,
- },
- hint = {
- enable = true,
- }
- }
- },
- },
- ruff_lsp = {},
- pyright = {},
- clangd = {
- cmd = {
- "clangd",
- "--enable-config",
- "--completion-parse=auto",
- "--completion-style=bundled",
- "--header-insertion=iwyu",
- "--header-insertion-decorators",
- "--inlay-hints",
- "--suggest-missing-includes",
- "--folding-ranges",
- "--function-arg-placeholders",
- "--pch-storage=memory",
- },
- commands = {
- ClangdSwitchSourceHeader = {
- function()
- switch_source_header_splitcmd(0, "edit")
- end,
- description = "Open source/header in current buffer",
- },
- ClangdSwitchSourceHeaderVSplit = {
- function()
- switch_source_header_splitcmd(0, "vsplit")
- end,
- description = "Open source/header in a new vsplit",
- },
- ClangdSwitchSourceHeaderSplit = {
- function()
- switch_source_header_splitcmd(0, "split")
- end,
- description = "Open source/header in a new split",
- },
- ClangdSwitchSourceHeaderTab = {
- function()
- switch_source_header_splitcmd(0, "tabedit")
- end,
- description = "Open source/header in a new tab",
- },
- },
- on_attach = function(client, bufnr)
- require("cfg.lsp").on_attach_wrapper(client, bufnr)
- local cmpconfig = require("cmp.config")
- local compare = require("cmp.config.compare")
- cmpconfig.set_buffer({
- sorting = {
- comparators = {
- compare.offset,
- compare.exact,
- -- compare.scopes,
- require("clangd_extensions.cmp_scores"),
- compare.recently_used,
- compare.locality,
- compare.kind,
- compare.sort_text,
- compare.length,
- compare.order,
- },
- },
- }, bufnr)
- vim.api.nvim_create_augroup("clang-format", {})
- vim.api.nvim_create_autocmd("BufWritePre", {
- group = "clang-format",
- buffer = bufnr,
- callback = function()
- if vim.fn.expand('%:p:h'):find("test") then
- return
- end
- require("cfg.utils").format_hunks({
- bufnr = bufnr,
- async = false,
- id = client.id
- })
- end,
- })
- map.ncmd("gH", "ClangdSwitchSourceHeader")
- map.ncmd("gvH", "ClangdSwitchSourceHeaderVSplit")
- map.ncmd("gxH", "ClangdSwitchSourceHeaderSplit")
- map.ncmd("gtH", "ClangdSwitchSourceHeaderSplit")
-
- require("clangd_extensions.inlay_hints").setup_autocmd()
- require("clangd_extensions.inlay_hints").set_inlay_hints()
- end,
- init_options = {
- usePlaceholders = true,
- completeUnimported = true,
- clangdFileStatus = true,
- },
- },
- }
-
- for server, config in pairs(servers) do
- local default_config = lspconfig[server].default_config or
- lspconfig[server].document_config.default_config
- local cmd = config.cmd or default_config.cmd
- if vim.fn.executable(cmd[1]) == 1 then lspconfig[server].setup(config) end
- end
- end,
- dependencies = {
- "hrsh7th/cmp-nvim-lsp",
- "ray-x/lsp_signature.nvim",
- "jubnzv/virtual-types.nvim",
- { 'folke/neodev.nvim', opts = {} },
- { "lvimuser/lsp-inlayhints.nvim", config = true },
- {
- "p00f/clangd_extensions.nvim",
- config = function()
- require("clangd_extensions").setup({
- })
- end
- },
- },
- },
- {
- 'mrcjkb/rustaceanvim',
- config = function()
- vim.g.rustaceanvim = {
- server = {
- on_attach = function(client, bufnr)
- require("cfg.lsp").on_attach_wrapper(
- client,
- bufnr,
- { auto_format = true }
- )
- end,
- },
- }
- end,
- ft = { 'rust' },
- },
- {
- 'nvim-lualine/lualine.nvim',
- opts = {
- options = {
- icons_enabled = false,
- theme = 'gruvbox_dark',
- component_separators = '',
- section_separators = '|',
- },
- sections = {
- lualine_a = { 'filetype', { 'filename', path = 1 } },
- lualine_b = { '%l/%L:%c:%o' },
- lualine_c = { 'diff' },
- lualine_x = { 'searchcount, selectioncount' },
- lualine_y = {},
- lualine_z = { 'diagnostics' }
- },
- inactive_sections = {
- lualine_a = { 'filename' },
- lualine_b = {},
- lualine_c = {},
- lualine_x = {},
- lualine_y = {},
- lualine_z = {}
- },
- },
- },
- {
- "nvimtools/none-ls.nvim",
- config = function()
- local nls = require("null-ls")
- nls.setup({
- on_attach = function(client, bufnr)
- require("cfg.lsp").on_attach_wrapper(
- client,
- bufnr,
- { auto_format = true }
- )
- end,
- sources = {
- nls.builtins.formatting.black,
- nls.builtins.diagnostics.hadolint,
- }
- })
- end,
- },
- "https://gitlab.com/HiPhish/rainbow-delimiters.nvim",
}