From a33c314a8fa16f2d31f2117154e9a4fceb4a3c54 Mon Sep 17 00:00:00 2001 From: Gabriel Arazas Date: Mon, 4 Apr 2022 22:00:31 +0800 Subject: [PATCH] Modularize plugins config Also starting to use LuaSnip instead of UltiSnips. Let's see where this is going. --- nvim/init.lua | 235 ++----------------------------------------- nvim/lua/plugins.lua | 229 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 235 insertions(+), 229 deletions(-) create mode 100644 nvim/lua/plugins.lua diff --git a/nvim/init.lua b/nvim/init.lua index db59866..a50cf8e 100644 --- a/nvim/init.lua +++ b/nvim/init.lua @@ -1,232 +1,12 @@ -- vim: shiftwidth=2 + +-- Activating my own modules ala-Doom Emacs. +require("plugins") +require("lsp-user-config").setup() + vim.g['mapleader'] = " " vim.g['syntax'] = true --- Bootstrapping for the package manager -local install_path = vim.fn.stdpath('data')..'/site/pack/packer/start/packer.nvim' - -if vim.fn.empty(vim.fn.glob(install_path)) > 0 then - packer_bootstrap = vim.fn.system({'git', 'clone', 'https://github.com/wbthomason/packer.nvim', install_path}) -end - -vim.cmd [[packadd packer.nvim]] --- Plugins -require("packer").startup(function(use) - if packer_bootstrap then - require("packer").sync() - end - - -- Let the package manager manage itself. - use { "wbthomason/packer.nvim" } - - -- Custom color themes! - use { "rktjmp/lush.nvim" } - - -- EditorConfig plugin - use { "editorconfig/editorconfig-vim" } - - -- Colorize common color strings - use { - "norcalli/nvim-colorizer.lua", - config = function() - require("colorizer").setup() - end - } - - -- A snippets engine. - -- One of the must-haves for me. - use { - "sirver/ultisnips", - config = function() - vim.g.UltiSnipsEditSplit = "context" - vim.g.UltiSnipsSnippetDirectories = {vim.env.HOME .. "/.config/nvim/own-snippets", ".snippets"} - end, - - -- Contains various snippets for UltiSnips. - requires = "honza/vim-snippets" - } - - -- Fuzzy finder of lists - use { - "nvim-telescope/telescope.nvim", - requires = { - {"nvim-lua/popup.nvim"}, - {"nvim-lua/plenary.nvim"}, - {"nvim-telescope/telescope-project.nvim"} - }, - - config = function() - -- Telescope setup - require("telescope").setup { - extensions = { - project = { - base_dirs = { - {"~/library/projects/software", max_depth = 2}, - {"~/library/projects/packages"}, - {"~/library/writings"}, - {"~/Documents"}, - }, - }, - }, - } - - require("telescope").load_extension("project") - - vim.api.nvim_set_keymap('n', 'ff', 'lua require("telescope.builtin").find_files({ hidden = true })', { noremap = true }) - vim.api.nvim_set_keymap('n', 'fF', 'lua require("telescope.builtin").find_files({ cwd = require("telescope.utils").buffer_dir(), hidden = true })', { noremap = true }) - vim.api.nvim_set_keymap('n', 'fg', 'lua require("telescope.builtin").grep_string()', { noremap = true }) - vim.api.nvim_set_keymap('n', 'fG', 'lua require("telescope.builtin").live_grep()', { noremap = true }) - vim.api.nvim_set_keymap('n', 'fb', 'lua require("telescope.builtin").buffers()', { noremap = true }) - vim.api.nvim_set_keymap('n', 'fh', 'lua require("telescope.builtin").help_tags()', { noremap = true }) - vim.api.nvim_set_keymap('n', 'ft', 'lua require("telescope.builtin").treesitter()', { noremap = true }) - vim.api.nvim_set_keymap('n', 'fb', 'lua require("telescope.builtin").buffers()', { noremap = true }) - vim.api.nvim_set_keymap('n', 'fr', 'lua require("telescope.builtin").oldfiles()', { noremap = true }) - vim.api.nvim_set_keymap('n', 'fR', 'lua require("telescope.builtin").oldfiles({ only_cwd = true })', { noremap = true }) - vim.api.nvim_set_keymap('n', 'fA', 'lua require("telescope.builtin").resume()', { noremap = true }) - - -- Extensions - vim.api.nvim_set_keymap('n', 'fp', 'lua require("telescope").extensions.project.project({})', { noremap = true }) - end, - } - - -- Marks in ~~steroids~~ coconut oil - use { - "ThePrimeagen/harpoon", - config = function() - vim.api.nvim_set_keymap("n", "fm", "lua require('harpoon.mark').add_file()", {}) - - local has_telescope, telescope = pcall("telescope") - if has_telescope then - vim.api.nvim_set_keymap("n", "fM", "lua require('telescope').extensions.harpoon.harpoon({})", {}) - require("telescope").load_extension("harpoon") - end - end, - requires = { {"nvim-lua/plenary.nvim"} } - } - - -- A completion engine. - -- nvim-cmp is mostly explicit by making the configuration process manual unlike bigger plugins like CoC - use { - "hrsh7th/nvim-cmp", - requires = { - "hrsh7th/cmp-buffer", - "hrsh7th/cmp-path", - "hrsh7th/cmp-nvim-lsp", - "hrsh7th/cmp-nvim-lua", - "quangnguyen30192/cmp-nvim-ultisnips", - }, - config = function() - local cmp = require("cmp") - - cmp.setup({ - snippet = { - expand = function(args) - vim.fn["UltiSnips#Anon"](args.body) - end, - }, - - sources = { - { name = "ultisnips" }, - { name = "buffer" }, - { name = "path" }, - { name = "nvim_lua" }, - { name = "nvim_lsp" }, - }, - - mapping = { - [""] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }), - [""] = cmp.mapping(cmp.mapping.scroll_docs(-4), { "i", "c" }), - [""] = cmp.mapping(cmp.mapping.scroll_docs(4), { "i", "c" }), - [""] = cmp.mapping({ - i = cmp.mapping.abort(), - c = cmp.mapping.close(), - }), - }, - }) - end - } - - -- A linting engine, a DAP client, and an LSP client entered into a bar. - use { - "dense-analysis/ale", - config = function() - vim.g.ale_disable_lsp = 1 - end, - } - use { "neovim/nvim-lspconfig" } - use { "mfussenegger/nvim-dap" } - use { "puremourning/vimspector" } - - -- tree-sitter - use { - "nvim-treesitter/nvim-treesitter", - requires = { - "nvim-treesitter/nvim-treesitter-textobjects" - }, - run = ":TSUpdate", - config = function() - vim.opt.foldmethod = "expr" - vim.opt.foldexpr = "nvim_treesitter#foldexpr()" - - require("nvim-treesitter.configs").setup({ - highlight = { - enable = true, - additional_vim_regex_highlighting = true, - }, - - incremental_selection = { - enable = true, - keymaps = { - init_selection = "gnn", - node_incremental = "grn", - scope_incremental = "grc", - node_decremental = "grm", - }, - }, - - indent = { enable = true }, - - -- custom text objects with nvim-treesitter-textobjects - -- I've just copied this from the README but they are reasonable additions to me. - textobjects = { - select = { - enable = true, - lookahead = true, - - keymaps = { - ["af"] = "@function.outer", - ["if"] = "@function.inner", - ["ae"] = "@block.outer", - ["ie"] = "@block.inner", - ["ac"] = "@class.outer", - ["ic"] = "@class.inner", - ["aC"] = "@conditional.outer", - ["iC"] = "@conditional.inner", - }, - }, - }, - }) - end - } - - -- One of the most popular plugins. - -- Allows to create more substantial status bars. - use { "vim-airline/vim-airline" } - - -- Fuzzy finder for finding files freely and fastly. - use { - "junegunn/fzf", - requires = "junegunn/fzf.vim" - } - - -- Enable visuals for addition/deletion of lines in the gutter (side) similar to Visual Studio Code. - use { "airblade/vim-gitgutter" } - - -- Language plugins. - use { "LnL7/vim-nix" } - use { "vmchale/dhall-vim" } -end) - -- Editor configuration vim.opt.completeopt = "menuone,noselect" vim.opt.termguicolors = true @@ -248,7 +28,7 @@ vim.cmd "highlight clear SpellBad" vim.cmd "highlight clear SpellLocal" vim.cmd "highlight clear SpellCap" vim.cmd "highlight clear SpellRare" -vim.cmd "highlight CursorLineNr ctermfg=cyan" +--vim.cmd "highlight CursorLineNr ctermfg=cyan" vim.cmd "highlight Visual term=reverse cterm=reverse" vim.cmd "colorscheme fds-theme" @@ -256,6 +36,3 @@ vim.cmd "colorscheme fds-theme" vim.api.nvim_set_keymap('n', 'bd', ':bd', {}) vim.api.nvim_set_keymap('i', 'jk', '', {}) vim.api.nvim_set_keymap('n', 'hr', 'source $MYVIMRC', {}) - --- Activating my own modules ala-Doom Emacs. -require('lsp-user-config').setup() diff --git a/nvim/lua/plugins.lua b/nvim/lua/plugins.lua new file mode 100644 index 0000000..d7e3aa3 --- /dev/null +++ b/nvim/lua/plugins.lua @@ -0,0 +1,229 @@ +-- This is where I install my package manager and plugins of choice. For more +-- details, just look for `packger.nvim` help tag. + +-- Bootstrapping for the package manager +local install_path = vim.fn.stdpath("data") .. "/site/pack/packer/start/packer.nvim" + +if vim.fn.empty(vim.fn.glob(install_path)) > 0 then + packer_bootstrap = vim.fn.system({"git", "clone", "https://github.com/wbthomason/packer.nvim", install_path}) +end + +return require("packer").startup(function(use) + -- Let the package manager manage itself. + use { "wbthomason/packer.nvim" } + + -- Custom color themes! + use { "rktjmp/lush.nvim" } + + -- EditorConfig plugin + use { "editorconfig/editorconfig-vim" } + + -- Colorize common color strings + use { + "norcalli/nvim-colorizer.lua", + config = function() + require("colorizer").setup() + end + } + + -- Snippets engine. + -- A must have for me. + -- TODO: Port some of my personal snippets. + use { + "L3MON4D3/LuaSnip", + requires = { + "rafamadriz/friendly-snippets", + "molleweide/LuaSnip-snippets.nvim", + }, + config = function () + require("luasnip.loaders.from_vscode").lazy_load() + require("luasnip.loaders.from_lua").lazy_load() + end, + event = "InsertEnter", + } + + -- Fuzzy finder of lists + use { + "nvim-telescope/telescope.nvim", + requires = { + {"nvim-lua/popup.nvim"}, + {"nvim-lua/plenary.nvim"}, + {"nvim-telescope/telescope-project.nvim"} + }, + + config = function() + -- Telescope setup + require("telescope").setup { + extensions = { + project = { + base_dirs = { + {"~/library/projects/software", max_depth = 2}, + {"~/library/projects/packages"}, + {"~/library/writings"}, + }, + }, + }, + } + + require("telescope").load_extension("project") + + vim.api.nvim_set_keymap('n', 'ff', 'lua require("telescope.builtin").find_files({ hidden = true })', { noremap = true }) + vim.api.nvim_set_keymap('n', 'fF', 'lua require("telescope.builtin").find_files({ cwd = require("telescope.utils").buffer_dir(), hidden = true })', { noremap = true }) + vim.api.nvim_set_keymap('n', 'fg', 'lua require("telescope.builtin").grep_string()', { noremap = true }) + vim.api.nvim_set_keymap('n', 'fG', 'lua require("telescope.builtin").live_grep()', { noremap = true }) + vim.api.nvim_set_keymap('n', 'fb', 'lua require("telescope.builtin").buffers()', { noremap = true }) + vim.api.nvim_set_keymap('n', 'fh', 'lua require("telescope.builtin").help_tags()', { noremap = true }) + vim.api.nvim_set_keymap('n', 'ft', 'lua require("telescope.builtin").treesitter()', { noremap = true }) + vim.api.nvim_set_keymap('n', 'fb', 'lua require("telescope.builtin").buffers()', { noremap = true }) + vim.api.nvim_set_keymap('n', 'fr', 'lua require("telescope.builtin").oldfiles()', { noremap = true }) + vim.api.nvim_set_keymap('n', 'fR', 'lua require("telescope.builtin").oldfiles({ only_cwd = true })', { noremap = true }) + vim.api.nvim_set_keymap('n', 'fA', 'lua require("telescope.builtin").resume()', { noremap = true }) + + -- Extensions + vim.api.nvim_set_keymap('n', 'fp', 'lua require("telescope").extensions.project.project({})', { noremap = true }) + end, + } + + -- Marks in ~~steroids~~ coconut oil + use { + "ThePrimeagen/harpoon", + config = function() + vim.api.nvim_set_keymap("n", "fm", "lua require('harpoon.mark').add_file()", {}) + + local has_telescope, telescope = pcall("telescope") + if has_telescope then + vim.api.nvim_set_keymap("n", "fM", "lua require('telescope').extensions.harpoon.harpoon({})", {}) + require("telescope").load_extension("harpoon") + end + end, + requires = { {"nvim-lua/plenary.nvim"} } + } + + -- A completion engine. + -- nvim-cmp is mostly explicit by making the configuration process manual unlike bigger plugins like CoC + use { + "hrsh7th/nvim-cmp", + requires = { + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-nvim-lua", + "saadparwaiz1/cmp_luasnip", + }, + config = function() + local cmp = require("cmp") + + cmp.setup({ + snippet = { + expand = function (args) + ls.lsp_expand(args.body) + end, + }, + + sources = { + { name = "luasnip" }, + { name = "buffer" }, + { name = "path" }, + { name = "nvim_lua" }, + { name = "nvim_lsp" }, + }, + + mapping = { + [""] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }), + [""] = cmp.mapping(cmp.mapping.scroll_docs(-4), { "i", "c" }), + [""] = cmp.mapping(cmp.mapping.scroll_docs(4), { "i", "c" }), + [""] = cmp.mapping(cmp.mapping.confirm({ select = true }), { "i", "c" }), + [""] = cmp.mapping({ + i = cmp.mapping.abort(), + c = cmp.mapping.close(), + }), + }, + }) + end + } + + -- A linting engine, a DAP client, and an LSP client entered into a bar. + use { + "dense-analysis/ale", + config = function() + vim.g.ale_disable_lsp = 1 + end, + } + use { "neovim/nvim-lspconfig" } + use { "mfussenegger/nvim-dap" } + use { "puremourning/vimspector" } + + -- tree-sitter + use { + "nvim-treesitter/nvim-treesitter", + requires = { + "nvim-treesitter/nvim-treesitter-textobjects" + }, + run = ":TSUpdate", + config = function() + vim.opt.foldmethod = "expr" + vim.opt.foldexpr = "nvim_treesitter#foldexpr()" + + require("nvim-treesitter.configs").setup({ + highlight = { + enable = true, + additional_vim_regex_highlighting = false, + }, + + incremental_selection = { + enable = true, + keymaps = { + init_selection = "gnn", + node_incremental = "grn", + scope_incremental = "grc", + node_decremental = "grm", + }, + }, + + indent = { enable = true }, + + -- custom text objects with nvim-treesitter-textobjects + -- I've just copied this from the README but they are reasonable additions to me. + textobjects = { + select = { + enable = true, + lookahead = true, + + keymaps = { + ["af"] = "@function.outer", + ["if"] = "@function.inner", + ["ae"] = "@block.outer", + ["ie"] = "@block.inner", + ["ac"] = "@class.outer", + ["ic"] = "@class.inner", + ["aC"] = "@conditional.outer", + ["iC"] = "@conditional.inner", + }, + }, + }, + }) + end + } + + -- One of the most popular plugins. + -- Allows to create more substantial status bars. + use { "vim-airline/vim-airline" } + + -- Fuzzy finder for finding files freely and fastly. + use { + "junegunn/fzf", + requires = "junegunn/fzf.vim" + } + + -- Enable visuals for addition/deletion of lines in the gutter (side) similar to Visual Studio Code. + use { "airblade/vim-gitgutter" } + + -- Language plugins. + use { "LnL7/vim-nix" } -- Nix + use { "vmchale/dhall-vim" } -- Dhall + use { "ziglang/zig.vim" } -- Zig + + if packer_bootstrap then + require("packer").sync() + end +end)