require("scrollbar").setup() -- hlslens config require('hlslens').setup() local kopts = { noremap = true, silent = true } vim.api.nvim_set_keymap('n', 'n', [[execute('normal! ' . v:count1 . 'n')lua require('hlslens').start()]], kopts) vim.api.nvim_set_keymap('n', 'N', [[execute('normal! ' . v:count1 . 'N')lua require('hlslens').start()]], kopts) vim.api.nvim_set_keymap('n', '*', [[*lua require('hlslens').start()]], kopts) vim.api.nvim_set_keymap('n', '#', [[#lua require('hlslens').start()]], kopts) vim.api.nvim_set_keymap('n', 'g*', [[g*lua require('hlslens').start()]], kopts) vim.api.nvim_set_keymap('n', 'g#', [[g#lua require('hlslens').start()]], kopts) vim.api.nvim_set_keymap('n', 'l', ':noh', kopts) -- config gitsigns require('gitsigns').setup { signs = { add = { hl = 'GitSignsAdd', text = '│', numhl = 'GitSignsAddNr', linehl = 'GitSignsAddLn' }, change = { hl = 'GitSignsChange', text = '│', numhl = 'GitSignsChangeNr', linehl = 'GitSignsChangeLn' }, delete = { hl = 'GitSignsDelete', text = '_', numhl = 'GitSignsDeleteNr', linehl = 'GitSignsDeleteLn' }, topdelete = { hl = 'GitSignsDelete', text = '‾', numhl = 'GitSignsDeleteNr', linehl = 'GitSignsDeleteLn' }, changedelete = { hl = 'GitSignsChange', text = '~', numhl = 'GitSignsChangeNr', linehl = 'GitSignsChangeLn' }, untracked = { hl = 'GitSignsAdd', text = '┆', numhl = 'GitSignsAddNr', linehl = 'GitSignsAddLn' }, }, signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` numhl = false, -- Toggle with `:Gitsigns toggle_numhl` linehl = false, -- Toggle with `:Gitsigns toggle_linehl` word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff` watch_gitdir = { interval = 1000, follow_files = true }, attach_to_untracked = true, current_line_blame = true, -- Toggle with `:Gitsigns toggle_current_line_blame` current_line_blame_opts = { virt_text = true, virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align' delay = 1000, ignore_whitespace = false, }, current_line_blame_formatter = ', - ', sign_priority = 6, update_debounce = 100, status_formatter = nil, -- Use default max_file_length = 40000, -- Disable if file is longer than this (in lines) preview_config = { -- Options passed to nvim_open_win border = 'single', style = 'minimal', relative = 'cursor', row = 0, col = 1 }, yadm = { enable = false }, on_attach = function(bufnr) local gs = package.loaded.gitsigns local function map(mode, l, r, opts) opts = opts or {} opts.buffer = bufnr vim.keymap.set(mode, l, r, opts) end -- Navigation map('n', ']c', function() if vim.wo.diff then return ']c' end vim.schedule(function() gs.next_hunk() end) return '' end, { expr = true }) map('n', '[c', function() if vim.wo.diff then return '[c' end vim.schedule(function() gs.prev_hunk() end) return '' end, { expr = true }) -- Actions map({ 'n', 'v' }, 'hs', ':Gitsigns stage_hunk') map({ 'n', 'v' }, 'hr', ':Gitsigns reset_hunk') map('n', 'hS', gs.stage_buffer) map('n', 'hu', gs.undo_stage_hunk) map('n', 'hR', gs.reset_buffer) map('n', '', gs.preview_hunk) map('n', 'hb', function() gs.blame_line { full = true } end) map('n', 'tb', gs.toggle_current_line_blame) map('n', 'hd', gs.diffthis) map('n', 'hD', function() gs.diffthis('~') end) map('n', 'td', gs.toggle_deleted) -- Text object map({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk') end } require('lualine').setup { options = { icons_enabled = true, theme = 'dracula', component_separators = { left = '', right = '' }, section_separators = { left = '', right = '' }, disabled_filetypes = { statusline = {}, winbar = {}, }, ignore_focus = {}, always_divide_middle = true, globalstatus = false, refresh = { statusline = 1000, tabline = 1000, winbar = 1000, } }, sections = { lualine_a = { 'mode' }, lualine_b = { 'branch', 'diff', 'diagnostics' }, lualine_c = { 'filename' }, lualine_x = { 'encoding', 'fileformat', 'filetype' }, lualine_y = { 'progress' }, lualine_z = { 'tabs' } }, inactive_sections = { lualine_a = {}, lualine_b = {}, lualine_c = { 'filename' }, lualine_x = { 'location' }, lualine_y = {}, lualine_z = {} }, tabline = {}, winbar = {}, inactive_winbar = {}, extensions = { 'quickfix', 'nvim-tree', 'symbols-outline', 'fugitive', 'man' } } -- load lsp and dependencies require("mason").setup() require("mason-lspconfig").setup({ ensure_installed = { "bashls", "pyright", "pylsp", --"pyre", "perlnavigator", "dockerls", "kotlin_language_server", "intelephense", "eslint", "tsserver", "cssls", "cssmodules_ls", "diagnosticls", "jsonls", "sumneko_lua", "sqlls", "yamlls", "lemminx", "marksman" } }) -- 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() -- Set up nvim-cmp. local cmp = require 'cmp' local lspkind = require('lspkind') cmp.setup({ snippet = { -- REQUIRED - you must specify a snippet engine expand = function(args) require('luasnip').lsp_expand(args.body) -- For `luasnip` 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' }, { name = 'path' }, }), formatting = { format = lspkind.cmp_format({ --mode = 'symbol', -- show only symbol annotations maxwidth = 50, -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters) ellipsis_char = '...', -- when popup menu exceed maxwidth, the truncated part would show ellipsis_char instead (must define maxwidth first) }) } }) -- 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' } }) }) 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 = '', 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', } }