diff options
Diffstat (limited to '.config/nvim/lua/plugins.lua')
-rw-r--r-- | .config/nvim/lua/plugins.lua | 403 |
1 files changed, 274 insertions, 129 deletions
diff --git a/.config/nvim/lua/plugins.lua b/.config/nvim/lua/plugins.lua index 66ca22c..4fc780d 100644 --- a/.config/nvim/lua/plugins.lua +++ b/.config/nvim/lua/plugins.lua @@ -1,139 +1,284 @@ local execute = vim.api.nvim_command local fn = vim.fn -local install_path = fn.stdpath("data") .. "/site/pack/packer/start/packer.nvim" +local install_path = fn.stdpath "data" .. "/site/pack/packer/start/packer.nvim" if fn.empty(fn.glob(install_path)) > 0 then - execute("!git clone https://github.com/wbthomason/packer.nvim " .. install_path) - execute "packadd packer.nvim" + execute("!git clone https://github.com/wbthomason/packer.nvim " .. install_path) + execute "packadd packer.nvim" end ---- Check if a file or directory exists in this path -local function require_plugin(plugin) - local plugin_prefix = fn.stdpath("data") .. "/site/pack/packer/opt/" - - local plugin_path = plugin_prefix .. plugin .. "/" - -- print('test '..plugin_path) - local ok, err, code = os.rename(plugin_path, plugin_path) - if not ok then - if code == 13 then - -- Permission denied, but it exists - return true - end - end - -- print(ok, err, code) - if ok then vim.cmd("packadd " .. plugin) end - return ok, err, code +local packer_ok, packer = pcall(require, "packer") +if not packer_ok then + return end -vim.cmd "autocmd BufWritePost plugins.lua PackerCompile" -- Auto compile when there are changes in plugins.lua - -return require("packer").startup( - function(use)-- Packer can manage itself as an optional plugin - -- Packer can manage itself as an optional plugin - use "wbthomason/packer.nvim" - - -- TODO refactor all of this (for now it works, but yes I know it could be wrapped in a simpler function) - use {"neovim/nvim-lspconfig", opt = true} - use {"glepnir/lspsaga.nvim", opt = true} - use {"kabouzeid/nvim-lspinstall", opt = true} - use {"folke/trouble.nvim", opt = true} - - -- Telescope - use {"nvim-lua/popup.nvim", opt = true} - use {"nvim-lua/plenary.nvim", opt = true} - use {"nvim-telescope/telescope.nvim", opt = true} - use {"nvim-telescope/telescope-fzy-native.nvim", opt = true} - use {"nvim-telescope/telescope-project.nvim", opt = true} - - -- Autocomplete - use {"hrsh7th/nvim-compe", opt = true} - use {"hrsh7th/vim-vsnip", opt = true} - use {"rafamadriz/friendly-snippets", opt = true} - - -- Treesitter - use {"nvim-treesitter/nvim-treesitter", run = ":TSUpdate"} - use {"windwp/nvim-ts-autotag", opt = true} - use {'andymass/vim-matchup', opt = true} - - -- Explorer - use {"kyazdani42/nvim-tree.lua", opt = true} - use {"ahmedkhalf/lsp-rooter.nvim", opt = true} -- with this nvim-tree will follow you - - -- TODO remove when open on dir is supported by nvimtree - use "kevinhwang91/rnvimr" - - -- git - use {"lewis6991/gitsigns.nvim", opt = true} - use {'f-person/git-blame.nvim', opt = true} - - use {"ChristianChiarulli/dashboard-nvim", opt = true} - use {"windwp/nvim-autopairs", opt = true} - use {"kevinhwang91/nvim-bqf", opt = true} - - -- Comments - use {"terrortylor/nvim-comment", opt = true} - - -- Icons - use {"kyazdani42/nvim-web-devicons", opt = true} - - -- Status Line and Bufferline - use 'glepnir/galaxyline.nvim' - use {'akinsho/nvim-bufferline.lua', requires = 'kyazdani42/nvim-web-devicons'} - use {"romgrk/barbar.nvim", opt = true} - - -- Which key - use {"folke/which-key.nvim", opt = true} - - -- Colorschemes - use 'aktersnurra/githubsy.vim' - use {"aktersnurra/nvcode-color-schemes.vim", opt = true} - use 'RRethy/nvim-base16' - - -- General Plugins [my own additions] - use 'unblevable/quick-scope' - use {"Pocco81/TrueZen.nvim", opt = true} - - -- Extras - use {'nacro90/numb.nvim', opt = true} - use {'phaazon/hop.nvim', opt = true} - use {'norcalli/nvim-colorizer.lua', opt = true} - use 'airblade/vim-rooter' - - require_plugin("nvim-lspconfig") - require_plugin("lspsaga.nvim") - require_plugin("nvim-lspinstall") - require_plugin('trouble.nvim') - require_plugin("friendly-snippets") - require_plugin("popup.nvim") - require_plugin("plenary.nvim") - require_plugin("telescope.nvim") - require_plugin('telescope-project.nvim') - require_plugin("nvim-compe") - require_plugin("vim-vsnip") - require_plugin("nvim-treesitter") - require_plugin('vim-matchup') - require_plugin("nvim-tree.lua") - require_plugin("gitsigns.nvim") - require_plugin("git-blame.nvim") - require_plugin("vim-which-key") - require_plugin("dashboard-nvim") - require_plugin("nvim-autopairs") - require_plugin("nvim-comment") - require_plugin("nvim-bqf") - require_plugin("nvcode-color-schemes.vim") - require_plugin("nvim-web-devicons") - require_plugin("galaxyline.nvim") - require_plugin("barbar.nvim") - require_plugin('lsp-rooter.nvim') - require_plugin("which-key.nvim") - - require_plugin("vim-rooter") - require_plugin('numb.nvim') - require_plugin('hop.nvim') - require_plugin('nvim-colorizer.lua') - - require_plugin("quick-scope") - require_plugin("TrueZen.nvim") +packer.init { + git = { clone_timeout = 300 }, + display = { + open_fn = function() + return require("packer.util").float { border = "single" } + end, + }, +} + +vim.cmd "autocmd BufWritePost plugins.lua PackerCompile" + +return require("packer").startup(function(use) + -- Packer can manage itself as an optional plugin + use "wbthomason/packer.nvim" + + -- TODO refactor all of this (for now it works, but yes I know it could be wrapped in a simpler function) + use { "neovim/nvim-lspconfig" } + use { "kabouzeid/nvim-lspinstall", event = "BufRead" } + -- Telescope + use { "nvim-lua/popup.nvim" } + use { "nvim-lua/plenary.nvim" } + use { "tjdevries/astronauta.nvim" } + use { + "nvim-telescope/telescope.nvim", + config = [[require('cfg.telescope')]], + event = "BufEnter", + } + + -- Autocomplete + use { + "hrsh7th/nvim-compe", + event = "InsertEnter", + config = function() + require("cfg.compe").config() + end, + } + + use { "hrsh7th/vim-vsnip", event = "InsertEnter" } + use { "rafamadriz/friendly-snippets", event = "InsertEnter" } + + -- Treesitter + use { "nvim-treesitter/nvim-treesitter", run = ":TSUpdate" } + + -- Neoformat + use { "sbdchd/neoformat" } + + use { + "kyazdani42/nvim-tree.lua", + -- cmd = "NvimTreeToggle", + config = function() + require("cfg.nvimtree").config() + end, + } + + use { + "lewis6991/gitsigns.nvim", + + config = function() + require("cfg.gitsigns").config() + end, + event = "BufRead", + } + + -- whichkey + use { "folke/which-key.nvim" } + + -- Autopairs + use { + "windwp/nvim-autopairs", + event = "InsertEnter", + after = { "telescope.nvim" }, + config = function() + require "cfg.autopairs" + end, + } + + -- Comments + use { + "terrortylor/nvim-comment", + cmd = "CommentToggle", + config = function() + require("nvim_comment").setup() + end, + } + + -- Color + use { "christianchiarulli/nvcode-color-schemes.vim", opt = true } + + -- Icons + use { "kyazdani42/nvim-web-devicons" } + + -- Status Line and Bufferline + use { "glepnir/galaxyline.nvim" } + + use { + "romgrk/barbar.nvim", + config = function() + vim.api.nvim_set_keymap("n", "<TAB>", ":BufferNext<CR>", { noremap = true, silent = true }) + vim.api.nvim_set_keymap("n", "<S-TAB>", ":BufferPrevious<CR>", { noremap = true, silent = true }) + vim.api.nvim_set_keymap("n", "<S-x>", ":BufferClose<CR>", { noremap = true, silent = true }) + end, + -- event = "BufRead", + } + + -- Builtins, these do not load by default + + -- Dashboard + use { + "ChristianChiarulli/dashboard-nvim", + event = "BufWinEnter", + cmd = { "Dashboard", "DashboardNewFile", "DashboardJumpMarks" }, + config = function() + require("cfg.dashboard").config() + end, + disable = not O.plugin.dashboard.active, + opt = true, + } + -- Zen Mode + use { + "folke/zen-mode.nvim", + cmd = "ZenMode", + -- event = "BufRead", + config = function() + require("cfg.zen").config() + end, + disable = not O.plugin.zen.active, + } + + use { + "norcalli/nvim-colorizer.lua", + event = "BufRead", + config = function() + require("colorizer").setup() + vim.cmd "ColorizerReloadAllBuffers" + end, + disable = not O.plugin.colorizer.active, + } + + -- comments in context + use { + "JoosepAlviste/nvim-ts-context-commentstring", + event = "BufRead", + disable = not O.plugin.ts_context_commentstring.active, + } + + -- Symbol Outline + use { + "simrat39/symbols-outline.nvim", + cmd = "SymbolsOutline", + disable = not O.plugin.symbol_outline.active, + } + -- diagnostics + use { + "folke/trouble.nvim", + cmd = "TroubleToggle", + disable = not O.plugin.trouble.active, + } + + -- Use fzy for telescope + use { + "nvim-telescope/telescope-fzy-native.nvim", + event = "BufRead", + disable = not O.plugin.telescope_fzy.active, + } + + -- Use project for telescope + use { + "nvim-telescope/telescope-project.nvim", + event = "BufRead", + setup = function () vim.cmd[[packadd telescope.nvim]] end, + disable = not O.plugin.telescope_project.active, + } + + -- Sane gx for netrw_gx bug + use { + "felipec/vim-sanegx", + event = "BufRead", + disable = not O.plugin.sanegx.active, + } + + -- Diffview + use { + "sindrets/diffview.nvim", + event = "BufRead", + disable = not O.plugin.diffview.active, + } + + -- Lush Create Color Schemes + use { + "rktjmp/lush.nvim", + -- cmd = {"LushRunQuickstart", "LushRunTutorial", "Lushify"}, + disable = not O.plugin.lush.active, + } + + -- LANGUAGE SPECIFIC GOES HERE + use { + "lervag/vimtex", + ft = "tex", + config = function() + require "cfg.vimtex" + end, + } + + -- Rust tools + -- TODO: use lazy loading maybe? + use { + "simrat39/rust-tools.nvim", + disable = not O.lang.rust.rust_tools.active, + } + + -- Elixir + use { "elixir-editors/vim-elixir", ft = { "elixir", "eelixir", "euphoria3" } } + + -- Javascript / Typescript + use { + "jose-elias-alvarez/nvim-lsp-ts-utils", + ft = { + "javascript", + "javascriptreact", + "javascript.jsx", + "typescript", + "typescriptreact", + "typescript.tsx", + }, + } + + -- Autotags <div>|</div> + use { + "windwp/nvim-ts-autotag", + event = "InsertEnter", + disable = not O.plugin.ts_autotag.active, + } + + -- Custom semantic text objects + use { + "nvim-treesitter/nvim-treesitter-textobjects", + disable = not O.plugin.ts_textobjects.active, + } + + -- Smart text objects + use { + "RRethy/nvim-treesitter-textsubjects", + disable = not O.plugin.ts_textsubjects.active, + } + + -- Text objects using hint labels + use { + "mfussenegger/nvim-ts-hint-textobject", + event = "BufRead", + disable = not O.plugin.ts_hintobjects.active, + } + + -- vim rooter for projects + use { + "airblade/vim-rooter", + event = "BufRead", + disable = not O.plugin.vim_rooter.active, + } + + -- hop + use { + "phaazon/hop.nvim", + disable = not O.plugin.hop.active, + } + + for _, plugin in pairs(O.custom_plugins) do + packer.use(plugin) end -) +end) |