init.lua 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. require('onedark').setup({
  2. term_colors = false,
  3. transparent = true,
  4. highlights = {
  5. MiniStatuslineModeNormal = { bg = '$blue', fg = '$black' },
  6. MiniStatuslineModeCommand = { bg = '$grey', fg = '$black' },
  7. MiniStatuslineModeInsert = { bg = '$green', fg = '$black' },
  8. MiniStatuslineModeVisual = { bg = '$orange', fg = '$black' },
  9. MiniStatuslineModeReplace = { bg = '$red', fg = '$black' },
  10. MiniStatuslineModeOther = { bg = '$green', fg = '$black' },
  11. MiniIndentscopeSymbol = { fg = '$bg3' },
  12. },
  13. })
  14. require('onedark').load()
  15. require('gitsigns').setup()
  16. require('mini.statusline').setup({
  17. content = {
  18. active = function()
  19. local mode, mode_hl = MiniStatusline.section_mode({ trunc_width = 120 })
  20. local git = MiniStatusline.section_git({ trunc_width = 75, icon = '' })
  21. local diagnostics = MiniStatusline.section_diagnostics({ trunc_width = 75, icon = '' })
  22. local filename = MiniStatusline.section_filename({ trunc_width = 140 })
  23. local fileinfo = MiniStatusline.section_fileinfo({ trunc_width = 120 })
  24. local location = MiniStatusline.section_location({ trunc_width = 75 })
  25. return MiniStatusline.combine_groups({
  26. { hl = mode_hl, strings = { mode } },
  27. { hl = 'MiniStatuslineDevinfo', strings = { git, diagnostics } },
  28. '%<', -- Mark general truncate point
  29. { hl = 'MiniStatuslineFilename', strings = { filename } },
  30. '%=', -- End left alignment
  31. { hl = 'MiniStatuslineFileinfo', strings = { fileinfo } },
  32. { hl = mode_hl, strings = { location } },
  33. })
  34. end
  35. },
  36. })
  37. require('mini.bufremove').setup()
  38. require('mini.indentscope').setup()
  39. require('nvim-treesitter.configs').setup {
  40. highlight = {
  41. enable = true,
  42. },
  43. }
  44. vim.diagnostic.config({
  45. virtual_text = { severity = { min = vim.diagnostic.severity.WARN } }
  46. })
  47. local opts = { noremap=true, silent=true }
  48. vim.api.nvim_set_keymap('n', '<space>e', '<cmd>lua vim.diagnostic.open_float()<CR>', opts)
  49. vim.api.nvim_set_keymap('n', '[d', '<cmd>lua vim.diagnostic.goto_prev()<CR>', opts)
  50. vim.api.nvim_set_keymap('n', ']d', '<cmd>lua vim.diagnostic.goto_next()<CR>', opts)
  51. vim.api.nvim_set_keymap('n', '<space>q', '<cmd>lua vim.diagnostic.setqflist({ severity = { min = vim.diagnostic.severity.WARN } })<CR>', opts)
  52. vim.api.nvim_set_keymap('n', '<Leader>q', '<cmd>lua MiniBufremove.delete()<CR>', opts)
  53. -- Allow pressing enter to autocomplete
  54. vim.api.nvim_set_keymap('i', '<CR>', 'pumvisible() ? "\\<C-y>" : "\\<CR>"', { noremap = true, expr = true })
  55. function on_attach(client, bufnr)
  56. -- Enable completion triggered by <c-x><c-o>
  57. vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.MiniCompletion.completefunc_lsp')
  58. -- Mappings.
  59. -- See `:help vim.lsp.*` for documentation on any of the below functions
  60. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
  61. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
  62. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
  63. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
  64. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
  65. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
  66. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
  67. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
  68. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
  69. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
  70. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
  71. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', '<cmd>References<CR>', opts)
  72. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>f', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts)
  73. end
  74. require'nvim-treesitter.configs'.setup {
  75. highlight = {
  76. enable = true,
  77. },
  78. }
  79. require('mini.completion').setup({
  80. delay = {
  81. -- disable autocomplete
  82. completion = 100000000,
  83. info = 100,
  84. signature = 50,
  85. },
  86. lsp_completion = {
  87. source_func = 'omnifunc',
  88. auto_setup = false,
  89. },
  90. });
  91. local nvim_lsp = require('lspconfig')
  92. local null_ls = require('null-ls')
  93. local null_ls_sources = {}
  94. if vim.fn.executable("node_modules/.bin/eslint") == 1 then
  95. table.insert(null_ls_sources, null_ls.builtins.formatting.eslint_d)
  96. table.insert(null_ls_sources, null_ls.builtins.diagnostics.eslint_d)
  97. table.insert(null_ls_sources, null_ls.builtins.code_actions.eslint_d)
  98. end
  99. if vim.fn.executable("gofmt") == 1 then
  100. table.insert(null_ls_sources, null_ls.builtins.formatting.gofmt)
  101. end
  102. if vim.fn.executable("shellcheck") == 1 then
  103. table.insert(null_ls_sources, null_ls.builtins.diagnostics.shellcheck)
  104. table.insert(null_ls_sources, null_ls.builtins.code_actions.shellcheck)
  105. end
  106. if vim.fn.executable("deno") == 1 then
  107. nvim_lsp.denols.setup({
  108. capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()),
  109. on_attach = on_attach,
  110. });
  111. table.insert(null_ls_sources, null_ls.builtins.formatting.deno_fmt);
  112. end
  113. if vim.fn.executable("node_modules/.bin/tsc") == 1 then
  114. local ts_utils = require("nvim-lsp-ts-utils")
  115. nvim_lsp.tsserver.setup({
  116. init_options = ts_utils.init_options,
  117. flags = {
  118. debounce_text_changes = 150,
  119. },
  120. on_attach = function(client, bufnr)
  121. client.resolved_capabilities.document_formatting = false
  122. client.resolved_capabilities.document_range_formatting = false
  123. on_attach(client, bufnr)
  124. ts_utils.setup({
  125. debug = false,
  126. disable_commands = false,
  127. enable_import_on_completion = true,
  128. -- import all
  129. import_all_timeout = 5000, -- ms
  130. -- lower numbers = higher priority
  131. import_all_priorities = {
  132. same_file = 1, -- add to existing import statement
  133. local_files = 2, -- git files or files with relative path markers
  134. buffer_content = 3, -- loaded buffer content
  135. buffers = 4, -- loaded buffer names
  136. },
  137. import_all_scan_buffers = 100,
  138. import_all_select_source = false,
  139. -- filter diagnostics
  140. filter_out_diagnostics_by_severity = {},
  141. filter_out_diagnostics_by_code = {},
  142. -- inlay hints
  143. auto_inlay_hints = false,
  144. inlay_hints_highlight = "Comment",
  145. -- update imports on file move
  146. update_imports_on_move = false,
  147. require_confirmation_on_move = false,
  148. watch_dir = nil,
  149. })
  150. -- required to fix code action ranges and filter diagnostics
  151. ts_utils.setup_client(client)
  152. end,
  153. })
  154. end
  155. null_ls.setup({
  156. sources = null_ls_sources,
  157. on_attach = function(client, bufnr)
  158. if client.resolved_capabilities.document_formatting then
  159. vim.cmd([[
  160. augroup LspFormatting
  161. autocmd! * <buffer>
  162. autocmd BufWritePre <buffer> lua vim.lsp.buf.formatting_sync()
  163. augroup END
  164. ]])
  165. end
  166. end,
  167. });