-- 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)