aboutsummaryrefslogblamecommitdiff
path: root/.config/nvim/init.lua
blob: 62149da4a3bbb5ecc265c6222ad0869fa6255fe5 (plain) (tree)
1
2
3
4
5
6
7
8
9
             
                 
                                                                                

                                           



                                                                                            


                                     
                                                 
                                              
                                                               




                                     
                                                      





                                                          

                                                                                              


                                              




















                                                                                             


                    
                                                              
                            
                                                                                                     


                                           

                                                                                    

                                   
                                                  
                                                            
                                                  





                                                                            

                                                              
                                                           
                                  
                                                                                  
                                               
                                                      

                                                                                                               
                                  

                         



                                                                                     







                                                                                          

                    
             

                                                                                                 
         
             

                                                                                             
                                   

                                                             

                                                             


                                                                                               




                                                                    





                                                                                             



                                                       

                                                                   

                                                       
                                  
                                                




                         

                                                                     


             
                                                                         
                                                                                      
                                   


                                                           

                                                                  

                         
 
                    


             
                                                                     
                                   
                                                                

























                                                                                                                                           
                    

         

                                                                 
                                                                     
         

             

                                                                   

         
                                                                                
 
                                                                  

             

                                                                      
                                   
                                                                           


                                                                                               
 

                                                                      
 







                                                                       
 


                                                                      
                    
         
 
             

















































































                                                                                                                                                                                                


                                                                    

             

                                                                                    


             
                                                                   
                                                                          
                                   
                                                   





                                                               
             

                                                                             
                                   



                                                                                
                         
                                                                                          


                    








                                                                                          

                                                                            
                                                             
    
-- :vi ft=lua
local fn = vim.fn
local install_path = fn.stdpath("data") .. "/site/pack/packer/start/packer.nvim"
local packer_bootstrap
if fn.empty(fn.glob(install_path)) > 0 then
	packer_bootstrap = fn.system({
		"git", "clone", "--depth", "1", "https://github.com/wbthomason/packer.nvim",
  install_path,
	})
end

vim.api.nvim_set_option("mouse", "a")
vim.api.nvim_command("set number relativenumber")
vim.api.nvim_set_option("termguicolors", true)
-- Comment the following lines to disable whitespace characters
vim.opt.list = true
vim.opt.listchars:append("space:⋅")
vim.opt.listchars:append("eol:↴")
vim.opt.listchars:append("tab:-->")

-- VSCode like moving lines up and down with alt+{j,k}
vim.api.nvim_command("nnoremap <A-j> :m .+1<CR>==")
vim.api.nvim_command("nnoremap <A-k> :m .-2<CR>==")
vim.api.nvim_command("inoremap <A-j> <Esc>:m .+1<CR>==gi")
vim.api.nvim_command("inoremap <A-k> <Esc>:m .-2<CR>==gi")
vim.api.nvim_command("vnoremap <A-j> :m '>+1<CR>gv=gv")
vim.api.nvim_command("vnoremap <A-k> :m '<-2<CR>gv=gv")
vim.api.nvim_command(
				"nnoremap <buffer> <M-CR> :lua vim.lsp.buf.code_action()<CR>")

return require("packer").startup(function(use)
	-- Package manager
	use { "https://github.com/wbthomason/packer.nvim" }

	use { "https://github.com/vladdoster/remember.nvim" }

	use {
		"https://github.com/filipdutescu/renamer.nvim",
		branch = "master",
		requires = { { "https://github.com/nvim-lua/plenary.nvim" } },
		config = function()
			vim.api.nvim_set_keymap("i", "<F2>",
			                        "<cmd>lua require(\"renamer\").rename()<cr>",
			                        { noremap = true, silent = true })
			vim.api.nvim_set_keymap("n", "<leader>rn",
			                        "<cmd>lua require(\"renamer\").rename()<cr>",
			                        { noremap = true, silent = true })
			vim.api.nvim_set_keymap("v", "<leader>rn",
			                        "<cmd>lua require(\"renamer\").rename()<cr>",
			                        { noremap = true, silent = true })

		end,
	}

	-- File tree
	use {
		"https://github.com/kyazdani42/nvim-tree.lua",
		requires = {
			"https://github.com/kyazdani42/nvim-web-devicons", -- optional, for file icon
		},
		cmd = { "NvimTreeToggle" },
		setup = function()
			vim.api.nvim_set_keymap("n", "<c-n>", ":NvimTreeToggle<CR>",
			                        { noremap = true, silent = true })
		end,
		config = function()
			require"nvim-tree".setup {
				auto_reload_on_write = true,
				update_cwd = true,
				view = {
					width = 30,
					height = 30,
					hide_root_folder = false,
					side = "left",
					preserve_window_proportions = false,
					number = true,
					relativenumber = true,
					signcolumn = "yes",
				},
				renderer = { indent_markers = { enable = true } },
				diagnostics = {
					enable = true,
					show_on_dirs = true,
					icons = { hint = "", info = "", warning = "", error = "" },
				},
			}
		end,
		-- tag = "nightly" -- optional, updated every week. (see issue #1193)
	}

	use {
		"https://github.com/nvim-telescope/telescope.nvim",
		cmd = { "Telescope" },
		requires = { { "https://github.com/nvim-lua/plenary.nvim" } },
		setup = function()
			vim.api.nvim_set_keymap("n", "<c-f>", ":Telescope find_files<CR>",
			                        { noremap = true, silent = true })
			vim.api.nvim_set_keymap("n", "<c-TAB>", ":Telescope buffers<CR>",
			                        { noremap = true, silent = true })
		end,
	}
	use {
		"https://github.com/akinsho/bufferline.nvim",
		config = function() require("bufferline").setup { diagnostics = "nvim_lsp" } end,
	}
	use {
		"https://github.com/nvim-lualine/lualine.nvim",
		requires = { "https://github.com/kyazdani42/nvim-web-devicons", opt = true },
		config = function()
			-- local tabline = require("tabline")
			require("lualine").setup {
				options = {
					icons_enabled = true,
					theme = "auto",
					component_separators = { left = "", right = "" },
					section_separators = { left = "", right = "" },
					disabled_filetypes = {},
					always_divide_middle = true,
					globalstatus = false,
				},
				sections = {
					lualine_a = { "mode" },
					lualine_b = { "branch", "diff", "diagnostics" },
					lualine_c = { "filename" },
					lualine_x = { "encoding", "fileformat", "filetype" },
					lualine_y = { "progress" },
					lualine_z = { "location" },
				},
				inactive_sections = {
					lualine_a = {},
					lualine_b = {},
					lualine_c = { "filename" },
					lualine_x = { "location" },
					lualine_y = {},
					lualine_z = {},
				},
				extensions = {},
			}
		end,
	}

	use {
		"https://github.com/karb94/neoscroll.nvim",
		config = function() require("neoscroll").setup() end,
	}

	use {
		"https://github.com/lukas-reineke/indent-blankline.nvim",
		setup = function() vim.api.nvim_set_option("termguicolors", true) end,
		config = function()
			require("indent_blankline").setup {
				show_end_of_line = true,
				space_char_blankline = " ",
				show_current_context = true,
				show_current_context_start = true,

			}

		end,
	}

	use {
		"https://github.com/nvim-treesitter/nvim-treesitter",
		config = function()
			require"nvim-treesitter.configs".setup {
				-- A list of parser names, or "all"
				ensure_installed = { "javascript", "lua", "rust" },

				-- Install parsers synchronously (only applied to `ensure_installed`)
				sync_install = false,

				-- List of parsers to ignore installing (for "all")
				-- ignore_install = {},

				highlight = {
					-- `false` will disable the whole extension
					enable = true,

					-- NOTE: these are the names of the parsers and not the filetype. (for example if you want to
					-- disable highlighting for the `tex` filetype, you need to include `latex` in this list as this is
					-- the name of the parser)
					-- list of language that will be disabled
					-- disable = { "c", "rust" },

					-- Setting this to true will run `:h syntax` and tree-sitter at the same time.
					-- Set this to `true` if you depend on 'syntax' being enabled (like for indentation).
					-- Using this option may slow down your editor, and you may see some duplicate highlights.
					-- Instead of true it can also be a list of languages
					additional_vim_regex_highlighting = false,
				},
			}
		end,
	}

	use {
		"https://github.com/norcalli/nvim-colorizer.lua",
		config = function() require("colorizer").setup() end,
	}

	use {
		"https://github.com/google/vim-coverage",
		requires = "https://github.com/google/vim-maktaba",
	}

	use { "https://github.com/prettier/vim-prettier", cmd = { "Prettier" } }

	use { "https://github.com/editorconfig/editorconfig-vim" }

	use {
		requires = "https://github.com/neovim/nvim-lspconfig",
		"https://github.com/williamboman/nvim-lsp-installer",
		config = function()
			local lsp_installer = require("nvim-lsp-installer")
			-- local nvim_lsp = require'nvim_lsp'
			-- Disable Diagnostcs globally
			-- vim.lsp.handlers["textDocument/publishDiagnostics"] = function() end

			lsp_installer.on_server_ready(function(server)
				local opts = {}

				if server.name == "denols" then 
					opts.root_dir = vim.loop.cwd
					opts.init_options = {
						enable = true,
						unstable = false,
						config = "./deno.jsonc"
					}
				end

				server:setup(opts)
				vim.cmd [[ do User LspAttachBuffers ]]
			end)
		end,
	}

	use {
		"https://github.com/hrsh7th/nvim-cmp",
		requires = {
			"https://github.com/neovim/nvim-lspconfig",
   "https://github.com/hrsh7th/cmp-nvim-lsp",
   "https://github.com/hrsh7th/cmp-buffer",
   "https://github.com/hrsh7th/cmp-path",
   "https://github.com/hrsh7th/cmp-cmdline",
   "https://github.com/hrsh7th/cmp-vsnip",
   "https://github.com/hrsh7th/vim-vsnip",
   "https://github.com/onsails/lspkind.nvim",
		},
		config = function()
			-- Setup 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.
					end,
				},
				window = {
					completion = cmp.config.window.bordered(),
					documentation = cmp.config.window.bordered(),
				},
				mapping = cmp.mapping.preset.insert({
					["<C-b>"] = cmp.mapping.scroll_docs(-4),
					["<C-f>"] = cmp.mapping.scroll_docs(4),
					["<C-Space>"] = cmp.mapping.complete(),
					["<C-e>"] = cmp.mapping.abort(),
					["<CR>"] = 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 = "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 `/` (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" } }),
			})

			-- Setup lspconfig.
			local capabilities = require("cmp_nvim_lsp").update_capabilities(vim.lsp
							                                                                 .protocol
							                                                                 .make_client_capabilities())
			-- Replace <YOUR_LSP_SERVER> with each lsp server you've enabled.
			require("lspconfig")["denols"].setup { capabilities = capabilities }
			local lspkind = require("lspkind")
			cmp.setup {
				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)

						-- The function below will be called before any actual modifications from lspkind
						-- so that you can provide more controls on popup customization. (See [#30](https://github.com/onsails/lspkind-nvim/pull/30))
						before = function(entry, vim_item) return vim_item end,
					}),
				},
			}

		end,
	}

	use {
		"https://github.com/nathom/filetype.nvim",
		setup = function() vim.g.did_load_filetypes = 1 end,
	}

	use {
		"https://github.com/dracula/vim",
		config = function() vim.api.nvim_command("colorscheme dracula") end,
	}

	use {
		"https://github.com/lukas-reineke/lsp-format.nvim",
		requires = { "https://github.com/neovim/nvim-lspconfig" },
		config = function()
			require"lsp-format".setup {
				typescript = { tab_width = 4 },
				yaml = { tab_width = 2 },
			}
		end,
	}

	use {
		"https://github.com/folke/trouble.nvim",
		requires = "https://github.com/kyazdani42/nvim-web-devicons",
		config = function()
			require("trouble").setup {
				-- your configuration comes here
				-- or leave it empty to use the default settings
				-- refer to the configuration section below
			}
			vim.api.nvim_command("nnoremap <buffer> <M-,> :TroubleToggle<CR>")
		end,
	}

	use {
		"https://github.com/wfxr/minimap.vim",
		setup = function()
			vim.g["minimap_auto_start"] = 1
			vim.api.nvim_command("nnoremap <buffer> <M-m> :MinimapToggle<CR>")
		end,
		cmd = { "MinimapToggle" },
	}

	-- Automatically set up your configuration after cloning packer.nvim
	-- Put this at the end after all plugins
	if packer_bootstrap then require("packer").sync() end
end)