-- disable netrw at the very start of your init.lua (strongly advised) vim.g.loaded = 1 vim.g.loaded_netrwPlugin = 1 -- load lsp and dependencies (help for both coc and independent lsp setup) require("mason").setup() require("mason-lspconfig").setup({ ensure_installed = { "bashls", "pyright", "perlnavigator", "salt_ls", "dockerls", "kotlin_language_server", "intelephense", "phpactor", "eslint" } }) require("null-ls").setup({ sources = { require("null-ls").builtins.formatting.stylua, require("null-ls").builtins.diagnostics.eslint, require("null-ls").builtins.completion.spell, require("null-ls").builtins.code_actions.gitsigns, }, }) -- setup minimap local codewindow = require('codewindow') codewindow.setup({ minimap_width = 20, -- The width of the text part of the minimap width_multiplier = 4, -- How many characters one dot represents use_lsp = true, -- Use the builtin LSP to show errors and warnings use_treesitter = true, -- Use nvim-treesitter to highlight the code show_cursor = true, exclude_filetypes = {}, -- Choose certain filetypes to not show minimap on z_index = 1, -- The z-index the floating window will be on }) codewindow.apply_default_keybinds() -- setup nvim-lspconfig -- Mappings. -- See `:help vim.diagnostic.*` for documentation on any of the below functions local opts = { noremap=true, silent=true } vim.keymap.set('n', 'e', vim.diagnostic.open_float, 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', 'q', vim.diagnostic.setloclist, opts) -- Use an on_attach function to only map the following keys -- after the language server attaches to the current buffer local on_attach = function(client, bufnr) -- Enable completion triggered by vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') -- Mappings. -- See `:help vim.lsp.*` for documentation on any of the below functions 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.definition, 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', '', vim.lsp.buf.signature_help, bufopts) vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, bufopts) vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, bufopts) vim.keymap.set('n', 'wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, bufopts) vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bufopts) vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, bufopts) vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) vim.keymap.set('n', 'f', function() vim.lsp.buf.format { async = true } end, bufopts) end local capabilities = require('cmp_nvim_lsp').default_capabilities() require'lspconfig'.pyright.setup{ on_attach = on_attach, capabilities = capabilities, } require'lspconfig'.bashls.setup{ on_attach = on_attach, } require'lspconfig'.salt_ls.setup{ on_attach = on_attach, } require'lspconfig'.dockerls.setup{ on_attach = on_attach, } require'lspconfig'.kotlin_language_server.setup{ on_attach = on_attach, } require'lspconfig'.intelephense.setup{ on_attach = on_attach, } require'lspconfig'.eslint.setup{ on_attach = on_attach, } -- load perl lsp require'lspconfig'.perlnavigator.setup{ settings = { perlnavigator = { perlPath = 'perl', enableWarnings = true, perltidyProfile = '', perlcriticProfile = '', perlcriticEnabled = true, } }, on_attach = on_attach, capabilities = capabilities, } -- Set up nvim-cmp. local cmp = require'cmp' cmp.setup({ snippet = { -- REQUIRED - you must specify a snippet engine expand = function(args) vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users. -- require('luasnip').lsp_expand(args.body) -- For `luasnip` users. -- require('snippy').expand_snippet(args.body) -- For `snippy` users. -- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users. end, }, window = { -- completion = cmp.config.window.bordered(), -- documentation = cmp.config.window.bordered(), }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.abort(), [''] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. }), sources = cmp.config.sources({ { name = 'nvim_lsp' }, { name = 'vsnip' }, -- For vsnip users. -- { name = 'luasnip' }, -- For luasnip users. -- { name = 'ultisnips' }, -- For ultisnips users. -- { name = 'snippy' }, -- For snippy users. }, { { name = 'buffer' }, }) }) -- Set configuration for specific filetype. cmp.setup.filetype('gitcommit', { sources = cmp.config.sources({ { name = 'cmp_git' }, -- You can specify the `cmp_git` source if you were installed it. }, { { name = 'buffer' }, }) }) -- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline({ '/', '?' }, { mapping = cmp.mapping.preset.cmdline(), sources = { { name = 'buffer' } } }) -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline(':', { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ { name = 'path' } }, { { name = 'cmdline' } }) }) -- Set up lspconfig. local capabilities = require('cmp_nvim_lsp').default_capabilities() -- Replace with each lsp server you've enabled. require('lspconfig')[''].setup { capabilities = capabilities } require'lspconfig'.tsserver.setup{} require("nvim-tree").setup({ create_in_closed_folder = true, hijack_cursor = true, open_on_setup = true, open_on_setup_file = true, sync_root_with_cwd = true, view = { adaptive_size = true, }, renderer = { full_name = true, group_empty = true, special_files = {}, symlink_destination = false, indent_markers = { enable = true, }, icons = { git_placement = "signcolumn", show = { file = true, folder = true, folder_arrow = true, git = true, }, }, }, update_focused_file = { enable = true, update_root = true, ignore_list = { "help" }, }, diagnostics = { enable = true, show_on_dirs = true, }, filters = { custom = { "^.git$", "^.mypy_cache$", }, }, actions = { change_dir = { enable = false, restrict_above_cwd = true, }, open_file = { resize_window = true, }, remove_file = { close_window = false, }, }, log = { enable = false, truncate = true, types = { all = false, config = false, copy_paste = false, diagnostics = false, git = false, profile = false, watcher = false, }, }, }) --Gruvbox theme settings -- setup must be called before loading the colorscheme require("gruvbox").setup({ undercurl = true, underline = true, bold = true, italic = false, -- default=true strikethrough = true, invert_selection = false, invert_signs = false, invert_tabline = false, invert_intend_guides = false, inverse = true, -- invert background for search, diffs, statuslines and errors contrast = "hard", -- can be "hard", "soft" or empty string palette_overrides = {}, overrides = {}, dim_inactive = true, -- default=false transparent_mode = false, }) require('bufferline').setup { options = { mode = "buffers", -- set to "tabs" to only show tabpages instead numbers = "buffer_id", close_command = "bdelete! %d", -- can be a string | function, see "Mouse actions" right_mouse_command = "bdelete! %d", -- can be a string | function, see "Mouse actions" left_mouse_command = "buffer %d", -- can be a string | function, see "Mouse actions" middle_mouse_command = nil, -- can be a string | function, see "Mouse actions" indicator = { icon = '>', -- this should be omitted if indicator style is not 'icon' style = 'icon', }, buffer_close_icon = '', modified_icon = '●', close_icon = '', left_trunc_marker = '', right_trunc_marker = '', --- name_formatter can be used to change the buffer's label in the bufferline. --- Please note some names can/will break the --- bufferline so use this at your discretion knowing that it has --- some limitations that will *NOT* be fixed. name_formatter = function(buf) -- buf contains: -- name | str | the basename of the active file -- path | str | the full path of the active file -- bufnr (buffer only) | int | the number of the active buffer -- buffers (tabs only) | table(int) | the numbers of the buffers in the tab -- tabnr (tabs only) | int | the "handle" of the tab, can be converted to its ordinal number using: `vim.api.nvim_tabpage_get_number(buf.tabnr)` end, max_name_length = 18, max_prefix_length = 15, -- prefix used when a buffer is de-duplicated truncate_names = true, -- whether or not tab names should be truncated tab_size = 18, diagnostics = "coc", diagnostics_update_in_insert = false, -- The diagnostics indicator can be set to nil to keep the buffer name highlight but delete the highlighting color_icons = true, -- whether or not to add the filetype icon highlights show_buffer_icons = true, -- disable filetype icons for buffers show_buffer_close_icons = true, show_buffer_default_icon = true, -- whether or not an unrecognised filetype should show a default icon show_close_icon = false, show_tab_indicators = true, show_duplicate_prefix = true, -- whether to show duplicate buffer prefix persist_buffer_sort = true, -- whether or not custom sorted buffers should persist -- can also be a table containing 2 custom separators -- [focused and unfocused]. eg: { '|', '|' } separator_style = "thick", enforce_regular_tabs = false, always_show_bufferline = true, hover = { enabled = true, delay = 200, reveal = {'close'} }, sort_by = 'tabs' } }