-- :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 :m .+1==") vim.api.nvim_command("nnoremap :m .-2==") vim.api.nvim_command("inoremap :m .+1==gi") vim.api.nvim_command("inoremap :m .-2==gi") vim.api.nvim_command("vnoremap :m '>+1gv=gv") vim.api.nvim_command("vnoremap :m '<-2gv=gv") vim.api.nvim_command( "nnoremap :lua vim.lsp.buf.code_action()") 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", "", "lua require(\"renamer\").rename()", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "rn", "lua require(\"renamer\").rename()", { noremap = true, silent = true }) vim.api.nvim_set_keymap("v", "rn", "lua require(\"renamer\").rename()", { 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", "", ":NvimTreeToggle", { 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", "", ":Telescope find_files", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "", ":Telescope buffers", { 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({ [""] = 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 = "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 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 :TroubleToggle") end, } use { "https://github.com/wfxr/minimap.vim", setup = function() vim.g["minimap_auto_start"] = 1 vim.api.nvim_command("nnoremap :MinimapToggle") 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)