Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2024
443
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 12.45 KB | None | 0 0
  1. vim.g.mapleader = ' '
  2. vim.g.maplocalleader = ' '
  3.  
  4. vim.g.have_nerd_font = true
  5.  
  6. vim.opt.number = true
  7.  
  8. vim.opt.relativenumber = true
  9.  
  10. vim.opt.mouse = 'a'
  11.  
  12. vim.opt.showmode = false
  13.  
  14. vim.opt.clipboard = 'unnamedplus'
  15.  
  16. vim.opt.breakindent = true
  17.  
  18. vim.opt.undofile = true
  19.  
  20. vim.opt.ignorecase = true
  21. vim.opt.smartcase = true
  22.  
  23. vim.opt.signcolumn = 'yes'
  24.  
  25. vim.opt.updatetime = 250
  26.  
  27. vim.opt.timeoutlen = 300
  28.  
  29. vim.opt.splitright = true
  30. vim.opt.splitbelow = true
  31.  
  32. vim.opt.list = true
  33. vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' }
  34.  
  35. vim.opt.inccommand = 'split'
  36.  
  37. vim.opt.cursorline = true
  38.  
  39. vim.opt.scrolloff = 10
  40.  
  41. vim.opt.hlsearch = true
  42. vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<CR>')
  43.  
  44. vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous [D]iagnostic message' })
  45. vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next [D]iagnostic message' })
  46. vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float, { desc = 'Show diagnostic [E]rror messages' })
  47. vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' })
  48.  
  49. vim.keymap.set('t', '<Esc><Esc>', '<C-\\><C-n>', { desc = 'Exit terminal mode' })
  50.  
  51. vim.keymap.set('n', '<C-h>', '<C-w><C-h>', { desc = 'Move focus to the left window' })
  52. vim.keymap.set('n', '<C-l>', '<C-w><C-l>', { desc = 'Move focus to the right window' })
  53. vim.keymap.set('n', '<C-j>', '<C-w><C-j>', { desc = 'Move focus to the lower window' })
  54. vim.keymap.set('n', '<C-k>', '<C-w><C-k>', { desc = 'Move focus to the upper window' })
  55.  
  56. vim.api.nvim_create_autocmd('TextYankPost', {
  57.   desc = 'Highlight when yanking (copying) text',
  58.   group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }),
  59.   callback = function()
  60.     vim.highlight.on_yank()
  61.   end,
  62. })
  63.  
  64. local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
  65. if not vim.loop.fs_stat(lazypath) then
  66.   local lazyrepo = 'https://github.com/folke/lazy.nvim.git'
  67.   vim.fn.system { 'git', 'clone', '--filter=blob:none', '--branch=stable', lazyrepo, lazypath }
  68. end
  69. vim.opt.rtp:prepend(lazypath)
  70.  
  71. require('lazy').setup({
  72.  
  73.   'tpope/vim-sleuth',
  74.  
  75.   { 'numToStr/Comment.nvim', opts = {} },
  76.  
  77.   {
  78.     'lewis6991/gitsigns.nvim',
  79.     opts = {
  80.       signs = {
  81.         add = { text = '+' },
  82.         change = { text = '~' },
  83.         delete = { text = '_' },
  84.         topdelete = { text = '‾' },
  85.         changedelete = { text = '~' },
  86.       },
  87.     },
  88.   },
  89.  
  90.   {
  91.     'folke/which-key.nvim',
  92.     event = 'VimEnter',
  93.     config = function()
  94.       require('which-key').setup()
  95.  
  96.       require('which-key').register {
  97.         ['<leader>c'] = { name = '[C]ode', _ = 'which_key_ignore' },
  98.         ['<leader>d'] = { name = '[D]ocument', _ = 'which_key_ignore' },
  99.         ['<leader>r'] = { name = '[R]ename', _ = 'which_key_ignore' },
  100.         ['<leader>p'] = { name = '[P]roject Telescope', _ = 'which_key_ignore' },
  101.         ['<leader>w'] = { name = '[W]orkspace', _ = 'which_key_ignore' },
  102.       }
  103.     end,
  104.   },
  105.  
  106.   {
  107.     'nvim-telescope/telescope.nvim',
  108.     event = 'VimEnter',
  109.     branch = '0.1.x',
  110.     dependencies = {
  111.       'nvim-lua/plenary.nvim',
  112.       {
  113.         'nvim-telescope/telescope-fzf-native.nvim',
  114.  
  115.         build = 'make',
  116.  
  117.         cond = function()
  118.           return vim.fn.executable 'make' == 1
  119.         end,
  120.       },
  121.       { 'nvim-telescope/telescope-ui-select.nvim' },
  122.  
  123.       { 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font },
  124.     },
  125.     config = function()
  126.  
  127.       require('telescope').setup {
  128.  
  129.         extensions = {
  130.           ['ui-select'] = {
  131.             require('telescope.themes').get_dropdown(),
  132.           },
  133.         },
  134.       }
  135.  
  136.       pcall(require('telescope').load_extension, 'fzf')
  137.       pcall(require('telescope').load_extension, 'ui-select')
  138.  
  139.       local builtin = require 'telescope.builtin'
  140.       vim.keymap.set('n', '<leader>ph', builtin.help_tags, { desc = '[S]earch [H]elp' })
  141.       vim.keymap.set('n', '<leader>pk', builtin.keymaps, { desc = '[S]earch [K]eymaps' })
  142.       vim.keymap.set('n', '<leader>pf', builtin.find_files, { desc = '[S]earch [F]iles' })
  143.       vim.keymap.set('n', '<leader>ps', builtin.builtin, { desc = '[S]earch [S]elect Telescope' })
  144.       vim.keymap.set('n', '<leader>pw', builtin.grep_string, { desc = '[S]earch current [W]ord' })
  145.       vim.keymap.set('n', '<leader>pg', builtin.live_grep, { desc = '[S]earch by [G]rep' })
  146.       vim.keymap.set('n', '<leader>pd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' })
  147.       vim.keymap.set('n', '<leader>pr', builtin.resume, { desc = '[S]earch [R]esume' })
  148.       vim.keymap.set('n', '<leader>p.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' })
  149.       vim.keymap.set('n', '<leader><leader>', builtin.buffers, { desc = '[ ] Find existing buffers' })
  150.  
  151.       vim.keymap.set('n', '<leader>/', function()
  152.  
  153.         builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown {
  154.           winblend = 10,
  155.           previewer = false,
  156.         })
  157.       end, { desc = '[/] Fuzzily search in current buffer' })
  158.  
  159.       vim.keymap.set('n', '<leader>s/', function()
  160.         builtin.live_grep {
  161.           grep_open_files = true,
  162.           prompt_title = 'Live Grep in Open Files',
  163.         }
  164.       end, { desc = '[S]earch [/] in Open Files' })
  165.  
  166.       vim.keymap.set('n', '<leader>sn', function()
  167.         builtin.find_files { cwd = vim.fn.stdpath 'config' }
  168.       end, { desc = '[S]earch [N]eovim files' })
  169.     end,
  170.   },
  171.  
  172.   {
  173.     'neovim/nvim-lspconfig',
  174.     dependencies = {
  175.  
  176.       'williamboman/mason.nvim',
  177.       'williamboman/mason-lspconfig.nvim',
  178.       'WhoIsSethDaniel/mason-tool-installer.nvim',
  179.  
  180.       { 'j-hui/fidget.nvim', opts = {} },
  181.  
  182.       { 'folke/neodev.nvim', opts = {} },
  183.     },
  184.     config = function()
  185.  
  186.       vim.api.nvim_create_autocmd('LspAttach', {
  187.         group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }),
  188.         callback = function(event)
  189.  
  190.           local map = function(keys, func, desc)
  191.             vim.keymap.set('n', keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
  192.           end
  193.  
  194.           map('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
  195.  
  196.           map('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
  197.  
  198.           map('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
  199.  
  200.           map('<leader>D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition')
  201.  
  202.           map('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
  203.  
  204.           map('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
  205.  
  206.           map('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
  207.  
  208.           map('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
  209.  
  210.           map('K', vim.lsp.buf.hover, 'Hover Documentation')
  211.  
  212.           map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
  213.  
  214.           local client = vim.lsp.get_client_by_id(event.data.client_id)
  215.           if client and client.server_capabilities.documentHighlightProvider then
  216.             vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
  217.               buffer = event.buf,
  218.               callback = vim.lsp.buf.document_highlight,
  219.             })
  220.  
  221.             vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
  222.               buffer = event.buf,
  223.               callback = vim.lsp.buf.clear_references,
  224.             })
  225.           end
  226.         end,
  227.       })
  228.  
  229.       local capabilities = vim.lsp.protocol.make_client_capabilities()
  230.       capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities())
  231.  
  232.       local servers = {
  233.         clangd = {},
  234.         pyright = {},
  235.         rust_analyzer = {},
  236.         tsserver = {},
  237.         lua_ls = {
  238.  
  239.           settings = {
  240.             Lua = {
  241.               completion = {
  242.                 callSnippet = 'Replace',
  243.               },
  244.  
  245.             },
  246.           },
  247.         },
  248.       }
  249.  
  250.       require('mason').setup()
  251.  
  252.       local ensure_installed = vim.tbl_keys(servers or {})
  253.       vim.list_extend(ensure_installed, {
  254.         'stylua',
  255.       })
  256.       require('mason-tool-installer').setup { ensure_installed = ensure_installed }
  257.  
  258.       require('mason-lspconfig').setup {
  259.         handlers = {
  260.           function(server_name)
  261.             local server = servers[server_name] or {}
  262.  
  263.             server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
  264.             require('lspconfig')[server_name].setup(server)
  265.           end,
  266.         },
  267.       }
  268.     end,
  269.   },
  270.  
  271.   {
  272.     'stevearc/conform.nvim',
  273.     lazy = false,
  274.     keys = {
  275.       {
  276.         '<leader>f',
  277.         function()
  278.           require('conform').format { async = true, lsp_fallback = true }
  279.         end,
  280.         mode = '',
  281.         desc = '[F]ormat buffer',
  282.       },
  283.     },
  284.     opts = {
  285.       notify_on_error = false,
  286.       format_on_save = function(bufnr)
  287.  
  288.         local disable_filetypes = { c = true, cpp = true }
  289.         return {
  290.           timeout_ms = 500,
  291.           lsp_fallback = not disable_filetypes[vim.bo[bufnr].filetype],
  292.         }
  293.       end,
  294.       formatters_by_ft = {
  295.         lua = { 'stylua' },
  296.  
  297.       },
  298.     },
  299.   },
  300.  
  301.   {
  302.     'hrsh7th/nvim-cmp',
  303.     event = 'InsertEnter',
  304.     dependencies = {
  305.  
  306.       {
  307.         'L3MON4D3/LuaSnip',
  308.         build = (function()
  309.  
  310.           if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then
  311.             return
  312.           end
  313.           return 'make install_jsregexp'
  314.         end)(),
  315.         dependencies = {
  316.  
  317.         },
  318.       },
  319.       'saadparwaiz1/cmp_luasnip',
  320.  
  321.       'hrsh7th/cmp-nvim-lsp',
  322.       'hrsh7th/cmp-path',
  323.     },
  324.     config = function()
  325.  
  326.       local cmp = require 'cmp'
  327.       local luasnip = require 'luasnip'
  328.       luasnip.config.setup {}
  329.  
  330.       cmp.setup {
  331.         snippet = {
  332.           expand = function(args)
  333.             luasnip.lsp_expand(args.body)
  334.           end,
  335.         },
  336.         completion = { completeopt = 'menu,menuone,noinsert' },
  337.  
  338.         mapping = cmp.mapping.preset.insert {
  339.  
  340.           ['<C-n>'] = cmp.mapping.select_next_item(),
  341.  
  342.           ['<C-p>'] = cmp.mapping.select_prev_item(),
  343.  
  344.           ['<C-b>'] = cmp.mapping.scroll_docs(-4),
  345.           ['<C-f>'] = cmp.mapping.scroll_docs(4),
  346.  
  347.           ['<C-y>'] = cmp.mapping.confirm { select = true },
  348.  
  349.           ['<C-Space>'] = cmp.mapping.complete {},
  350.  
  351.           ['<C-l>'] = cmp.mapping(function()
  352.             if luasnip.expand_or_locally_jumpable() then
  353.               luasnip.expand_or_jump()
  354.             end
  355.           end, { 'i', 's' }),
  356.           ['<C-h>'] = cmp.mapping(function()
  357.             if luasnip.locally_jumpable(-1) then
  358.               luasnip.jump(-1)
  359.             end
  360.           end, { 'i', 's' }),
  361.  
  362.         },
  363.         sources = {
  364.           { name = 'nvim_lsp' },
  365.           { name = 'luasnip' },
  366.           { name = 'path' },
  367.         },
  368.       }
  369.     end,
  370.   },
  371.  
  372.   {
  373.  
  374.     'folke/tokyonight.nvim',
  375.     priority = 1000,
  376.     init = function()
  377.  
  378.       vim.cmd.colorscheme 'tokyonight-night'
  379.  
  380.       vim.cmd.hi 'Comment gui=none'
  381.     end,
  382.   },
  383.  
  384.   { 'folke/todo-comments.nvim', event = 'VimEnter', dependencies = { 'nvim-lua/plenary.nvim' }, opts = { signs = false } },
  385.   {
  386.     'echasnovski/mini.nvim',
  387.     config = function()
  388.  
  389.       require('mini.ai').setup { n_lines = 500 }
  390.  
  391.       require('mini.surround').setup()
  392.  
  393.       local statusline = require 'mini.statusline'
  394.  
  395.       statusline.setup { use_icons = vim.g.have_nerd_font }
  396.  
  397.       statusline.section_location = function()
  398.         return '%2l:%-2v'
  399.       end
  400.  
  401.     end,
  402.   },
  403.   {
  404.     'nvim-treesitter/nvim-treesitter',
  405.     build = ':TSUpdate',
  406.     opts = {
  407.       ensure_installed = { 'bash', 'c', 'html', 'lua', 'luadoc', 'markdown', 'vim', 'vimdoc' },
  408.  
  409.       auto_install = true,
  410.       highlight = {
  411.         enable = true,
  412.  
  413.         additional_vim_regex_highlighting = { 'ruby' },
  414.       },
  415.       indent = { enable = true, disable = { 'ruby' } },
  416.     },
  417.     config = function(_, opts)
  418.  
  419.       require('nvim-treesitter.configs').setup(opts)
  420.  
  421.     end,
  422.   },
  423.   {
  424.     'stevearc/oil.nvim',
  425.     opts = {},
  426.     dependencies = { 'nvim-tree/nvim-web-devicons' },
  427.     config = function(_, _)
  428.       require('oil').setup()
  429.       vim.keymap.set('n', '-', '<CMD>Oil<CR>', { desc = 'Open Oil' })
  430.     end,
  431.   },
  432.   { 'ThePrimeagen/vim-be-good' },
  433.  
  434.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement