From c6629b47ff7c0ab98453ba07b417332d0417b1b0 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Wed, 15 Feb 2023 15:15:42 -0500 Subject: [PATCH 01/21] begin refresh --- .gitignore | 1 + init.lua | 117 ++++++++++++++++++++++------------------------------- 2 files changed, 50 insertions(+), 68 deletions(-) diff --git a/.gitignore b/.gitignore index 1b83131b514..227f02666e2 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ test.sh .luarc.json nvim plugin/packer_compiled.lua +lazy-lock.json diff --git a/init.lua b/init.lua index ac291dad17a..5fbe21d3601 100644 --- a/init.lua +++ b/init.lua @@ -1,19 +1,24 @@ --- Install packer -local install_path = vim.fn.stdpath 'data' .. '/site/pack/packer/start/packer.nvim' -local is_bootstrap = false -if vim.fn.empty(vim.fn.glob(install_path)) > 0 then - is_bootstrap = true - vim.fn.system { 'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path } - vim.cmd [[packadd packer.nvim]] +-- Install package manager +-- https://github.com/folke/lazy.nvim +-- `:help lazy.nvim.txt` for more info +local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' +if not vim.loop.fs_stat(lazypath) then + vim.fn.system { + 'git', + 'clone', + '--filter=blob:none', + 'https://github.com/folke/lazy.nvim.git', + '--branch=stable', -- latest stable release + lazypath, + } end +vim.opt.rtp:prepend(lazypath) -require('packer').startup(function(use) - -- Package manager - use 'wbthomason/packer.nvim' - - use { -- LSP Configuration & Plugins +require('lazy').setup({ + ---@diagnostic disable-next-line: assign-type-mismatch + { -- LSP Configuration & Plugins 'neovim/nvim-lspconfig', - requires = { + dependencies = { -- Automatically install LSPs to stdpath for neovim 'williamboman/mason.nvim', 'williamboman/mason-lspconfig.nvim', @@ -24,73 +29,49 @@ require('packer').startup(function(use) -- Additional lua configuration, makes nvim stuff amazing 'folke/neodev.nvim', }, - } - - use { -- Autocompletion + }, + { -- Autocompletion 'hrsh7th/nvim-cmp', - requires = { 'hrsh7th/cmp-nvim-lsp', 'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip' }, - } + dependencies = { 'hrsh7th/cmp-nvim-lsp', 'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip' }, + }, - use { -- Highlight, edit, and navigate code + { -- Highlight, edit, and navigate code 'nvim-treesitter/nvim-treesitter', - run = function() + dependencies = { + 'nvim-treesitter/nvim-treesitter-textobjects', + }, + config = function() pcall(require('nvim-treesitter.install').update { with_sync = true }) end, - } - - use { -- Additional text objects via treesitter - 'nvim-treesitter/nvim-treesitter-textobjects', - after = 'nvim-treesitter', - } + }, -- Git related plugins - use 'tpope/vim-fugitive' - use 'tpope/vim-rhubarb' - use 'lewis6991/gitsigns.nvim' + 'tpope/vim-fugitive', + 'tpope/vim-rhubarb', + 'lewis6991/gitsigns.nvim', - use 'navarasu/onedark.nvim' -- Theme inspired by Atom - use 'nvim-lualine/lualine.nvim' -- Fancier statusline - use 'lukas-reineke/indent-blankline.nvim' -- Add indentation guides even on blank lines - use 'numToStr/Comment.nvim' -- "gc" to comment visual regions/lines - use 'tpope/vim-sleuth' -- Detect tabstop and shiftwidth automatically + 'navarasu/onedark.nvim', -- Theme inspired by Atom + 'nvim-lualine/lualine.nvim', -- Fancier statusline + 'lukas-reineke/indent-blankline.nvim', -- Add indentation guides even on blank lines + 'numToStr/Comment.nvim', -- "gc" to comment visual regions/lines + 'tpope/vim-sleuth', -- Detect tabstop and shiftwidth automatically -- Fuzzy Finder (files, lsp, etc) - use { 'nvim-telescope/telescope.nvim', branch = '0.1.x', requires = { 'nvim-lua/plenary.nvim' } } + { 'nvim-telescope/telescope.nvim', branch = '0.1.x', dependencies = { 'nvim-lua/plenary.nvim' } }, -- Fuzzy Finder Algorithm which requires local dependencies to be built. Only load if `make` is available - use { 'nvim-telescope/telescope-fzf-native.nvim', run = 'make', cond = vim.fn.executable 'make' == 1 } - - -- Add custom plugins to packer from ~/.config/nvim/lua/custom/plugins.lua - local has_plugins, plugins = pcall(require, 'custom.plugins') - if has_plugins then - plugins(use) - end - - if is_bootstrap then - require('packer').sync() - end -end) - --- When we are bootstrapping a configuration, it doesn't --- make sense to execute the rest of the init.lua. --- --- You'll need to restart nvim, and then it will work. -if is_bootstrap then - print '==================================' - print ' Plugins are being installed' - print ' Wait until Packer completes,' - print ' then restart nvim' - print '==================================' - return -end + { + 'nvim-telescope/telescope-fzf-native.nvim', + build = 'make', + cond = function() + return vim.fn.executable 'make' == 1 + end, + }, --- Automatically source and re-compile packer whenever you save this init.lua -local packer_group = vim.api.nvim_create_augroup('Packer', { clear = true }) -vim.api.nvim_create_autocmd('BufWritePost', { - command = 'source | silent! LspStop | silent! LspStart | PackerCompile', - group = packer_group, - pattern = vim.fn.expand '$MYVIMRC', -}) + -- TODO: + -- { import = 'kickstart' }, + -- { import = 'custom.plugins' }, +}, {}) -- [[ Setting options ]] -- See `:help vim.o` @@ -343,7 +324,7 @@ local servers = { -- rust_analyzer = {}, -- tsserver = {}, - sumneko_lua = { + lua_ls = { Lua = { workspace = { checkThirdParty = false }, telemetry = { enable = false }, From 4f112819b1251ac1d86439fa1b8c093b9c33d847 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Wed, 15 Feb 2023 15:19:01 -0500 Subject: [PATCH 02/21] move leader to top of file --- init.lua | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/init.lua b/init.lua index 5fbe21d3601..c690893c4ed 100644 --- a/init.lua +++ b/init.lua @@ -1,3 +1,9 @@ +-- Set as the leader key +-- See `:help mapleader` +-- NOTE: Must happen before plugins are required (otherwise wrong leader will be used) +vim.g.mapleader = ' ' +vim.g.maplocalleader = ' ' + -- Install package manager -- https://github.com/folke/lazy.nvim -- `:help lazy.nvim.txt` for more info @@ -107,11 +113,6 @@ vim.cmd [[colorscheme onedark]] vim.o.completeopt = 'menuone,noselect' -- [[ Basic Keymaps ]] --- Set as the leader key --- See `:help mapleader` --- NOTE: Must happen before plugins are required (otherwise wrong leader will be used) -vim.g.mapleader = ' ' -vim.g.maplocalleader = ' ' -- Keymaps for better default experience -- See `:help vim.keymap.set()` From 68a0332ac2dbffb802ecfcb820cbacce709bd71a Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Wed, 15 Feb 2023 15:31:18 -0500 Subject: [PATCH 03/21] tree-sitter updates --- init.lua | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/init.lua b/init.lua index c690893c4ed..4cb5f6f0c6e 100644 --- a/init.lua +++ b/init.lua @@ -1,3 +1,6 @@ +-- TODO BEFORE MERGE: +-- - [ ] Document an example of adding your own custom plugins (for example, autopairs) + -- Set as the leader key -- See `:help mapleader` -- NOTE: Must happen before plugins are required (otherwise wrong leader will be used) @@ -203,7 +206,10 @@ vim.keymap.set('n', 'sd', require('telescope.builtin').diagnostics, { de -- See `:help nvim-treesitter` require('nvim-treesitter.configs').setup { -- Add languages to be installed here that you want installed for treesitter - ensure_installed = { 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'typescript', 'help', 'vim' }, + ensure_installed = { 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'tsx', 'typescript', 'help', 'vim' }, + + -- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!) + auto_install = false, highlight = { enable = true }, indent = { enable = true, disable = { 'python' } }, From 1afbeca63f17e14611ca94bae66c5e3471142b37 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Wed, 15 Feb 2023 15:34:45 -0500 Subject: [PATCH 04/21] docs --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4cc00b1b817..0c270171ed2 100644 --- a/README.md +++ b/README.md @@ -14,13 +14,17 @@ This repo is meant to be used as a starting point for a user's own configuration ### Installation * Backup your previous configuration -* Copy and paste the kickstart.nvim `init.lua` into `$HOME/.config/nvim/init.lua` (Linux) or `~/AppData/Local/nvim/init.lua` (Windows) +* Copy and paste the kickstart.nvim `init.lua` into `$HOME/.config/nvim/init.lua` (Linux/Mac) or `~/AppData/Local/nvim/init.lua` (Windows) * Start Neovim (`nvim`) and run `:PackerInstall` - ignore any error message about missing plugins, `:PackerInstall` will fix that shortly * Restart Neovim If there are languages that you don't want to use, remove their configuration and notes from your `init.lua` after copy and pasting (for example, in the mason configuration). +Additional requirements: +- Make sure to review the readmes of the plugins in the plugin list if anything is missing. In particular: + - [ripgrep](https://github.com/BurntSushi/ripgrep#installation) is required for multiple [telescope](https://github.com/nvim-telescope/telescope.nvim#suggested-dependencies) pickers. + ### Windows Installation Installation may require installing build tools, and updating the run command for `telescope-fzf-native` From 69d7d4a0810262bc35b8527eda04115bb80654c0 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Wed, 15 Feb 2023 15:34:50 -0500 Subject: [PATCH 05/21] fix typo --- init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init.lua b/init.lua index 4cb5f6f0c6e..33cd4c21f7d 100644 --- a/init.lua +++ b/init.lua @@ -194,7 +194,7 @@ vim.keymap.set('n', '/', function() winblend = 10, previewer = false, }) -end, { desc = '[/] Fuzzily search in current buffer]' }) +end, { desc = '[/] Fuzzily search in current buffer' }) vim.keymap.set('n', 'sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' }) vim.keymap.set('n', 'sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' }) From 4d218e3b8a7d1691cce820cf491f1383ef3f55cf Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Wed, 15 Feb 2023 15:40:28 -0500 Subject: [PATCH 06/21] add a few more todos for myself --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0c270171ed2..ff70f77860c 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,10 @@ This repo is meant to be used as a starting point for a user's own configuration * Backup your previous configuration * Copy and paste the kickstart.nvim `init.lua` into `$HOME/.config/nvim/init.lua` (Linux/Mac) or `~/AppData/Local/nvim/init.lua` (Windows) + +TODO: This isn't right anymore. Also, link to the sections about setting up the installation from the lazy readme * Start Neovim (`nvim`) and run `:PackerInstall` - ignore any error message about missing plugins, `:PackerInstall` will fix that shortly + * Restart Neovim @@ -82,7 +85,9 @@ Each PR, especially those which increase the line count, should have a descripti ### FAQ - * What should I do if I already have a pre-existing neovim configuration? - * You should back it up, then delete all files associated with it. - * This includes your existing init.lua and the neovim files in `.local` which can be deleted with `rm -rf ~/.local/share/nvim/` - +* What should I do if I already have a pre-existing neovim configuration? + * You should back it up, then delete all files associated with it. + * This includes your existing init.lua and the neovim files in `.local` which can be deleted with `rm -rf ~/.local/share/nvim/` +* Are there any cool videos about this plugin? + * Current iteration of kickstart (coming soon) + * Here is one about the previous iteration of kickstart: [video introduction to Kickstart.nvim](https://youtu.be/stqUbv-5u2s). From d6ad146301f44a5e5f4e45c3f7f05e7791ebaf3c Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Wed, 15 Feb 2023 15:53:09 -0500 Subject: [PATCH 07/21] add example of autoformatting --- init.lua | 4 ++- lua/kickstart/autoformat.lua | 61 ++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 lua/kickstart/autoformat.lua diff --git a/init.lua b/init.lua index 33cd4c21f7d..4e6738a2a3e 100644 --- a/init.lua +++ b/init.lua @@ -78,7 +78,7 @@ require('lazy').setup({ }, -- TODO: - -- { import = 'kickstart' }, + { import = 'kickstart.plugins' }, -- { import = 'custom.plugins' }, }, {}) @@ -373,6 +373,8 @@ require('fidget').setup() local cmp = require 'cmp' local luasnip = require 'luasnip' +luasnip.config.setup {} + cmp.setup { snippet = { expand = function(args) diff --git a/lua/kickstart/autoformat.lua b/lua/kickstart/autoformat.lua new file mode 100644 index 00000000000..7519c2ce847 --- /dev/null +++ b/lua/kickstart/autoformat.lua @@ -0,0 +1,61 @@ +-- Toggle this on/off for autoformatting +local autoformatting = false +if not autoformatting then + return +end + +-- Switch for controlling whether you want autoformatting. +-- Use :KickstartFormatToggle to toggle autoformatting on or off +local format_is_enabled = true +vim.api.nvim_create_user_command('KickstartFormatToggle', function() + format_is_enabled = not format_is_enabled + print('Setting autoformatting to: ' .. tostring(format_is_enabled)) +end, {}) + +-- Create an augroup that is used for managing our formatting autocmds. +-- We need one augroup per client to make sure that multiple clients +-- can attach to the same buffer without interfering with each other. +local _augroups = {} +local get_augroup = function(client) + if not _augroups[client.id] then + local group_name = 'kickstart-lsp-format-' .. client.name + local id = vim.api.nvim_create_augroup(group_name, { clear = true }) + _augroups[client.id] = id + end + + return _augroups[client.id] +end + +vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('kickstart-lsp-attach-format', { clear = true }), + + -- This is where we attach the autoformatting for reasonable clients + callback = function(args) + local client_id = args.data.client_id + local client = vim.lsp.get_client_by_id(client_id) + local bufnr = args.buf + + -- Only attach to clients that support document formatting + if not client.server_capabilities.documentFormattingProvider then + return + end + + -- Tsserver usually works poorly. Sorry you work with bad languages + -- You can remove this line if you know what you're doing :) + if client.name == 'tsserver' then + return + end + + vim.api.nvim_create_autocmd('BufWritePre', { + group = get_augroup(client), + buffer = bufnr, + callback = function() + if not format_is_enabled then + return + end + + vim.lsp.buf.format { async = false } + end, + }) + end, +}) From 36e99fbe3511214bb884bef1a17e1ffae9045941 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Wed, 15 Feb 2023 15:59:16 -0500 Subject: [PATCH 08/21] note to self --- lua/kickstart/autoformat.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lua/kickstart/autoformat.lua b/lua/kickstart/autoformat.lua index 7519c2ce847..87f9159d7ed 100644 --- a/lua/kickstart/autoformat.lua +++ b/lua/kickstart/autoformat.lua @@ -1,3 +1,9 @@ +-- TODO: Have to decide how we would make this easy +-- to configure and understand from init.lua... +-- +-- I was hoping all of them could go in plugins, but it's a little weird +-- to do that I guess? + -- Toggle this on/off for autoformatting local autoformatting = false if not autoformatting then From 1a2a96be4c68c99abd1dc1aef40207753fd56362 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Wed, 15 Feb 2023 16:23:05 -0500 Subject: [PATCH 09/21] move to good format after talking to folke --- init.lua | 6 ++- lua/kickstart/autoformat.lua | 67 --------------------------- lua/kickstart/plugins/autoformat.lua | 61 ++++++++++++++++++++++++ lua/kickstart/plugins/debug.lua | 69 ++++++++++++++++++++++++++++ 4 files changed, 135 insertions(+), 68 deletions(-) delete mode 100644 lua/kickstart/autoformat.lua create mode 100644 lua/kickstart/plugins/autoformat.lua create mode 100644 lua/kickstart/plugins/debug.lua diff --git a/init.lua b/init.lua index 4e6738a2a3e..7d0b86f30cb 100644 --- a/init.lua +++ b/init.lua @@ -77,8 +77,12 @@ require('lazy').setup({ end, }, + -- Next Step: Add additional "plugins" for kickstart + require 'kickstart.plugins.autoformat', + -- require('kickstart.plugins.debug'), + -- TODO: - { import = 'kickstart.plugins' }, + -- { import = 'kickstart.plugins' }, -- { import = 'custom.plugins' }, }, {}) diff --git a/lua/kickstart/autoformat.lua b/lua/kickstart/autoformat.lua deleted file mode 100644 index 87f9159d7ed..00000000000 --- a/lua/kickstart/autoformat.lua +++ /dev/null @@ -1,67 +0,0 @@ --- TODO: Have to decide how we would make this easy --- to configure and understand from init.lua... --- --- I was hoping all of them could go in plugins, but it's a little weird --- to do that I guess? - --- Toggle this on/off for autoformatting -local autoformatting = false -if not autoformatting then - return -end - --- Switch for controlling whether you want autoformatting. --- Use :KickstartFormatToggle to toggle autoformatting on or off -local format_is_enabled = true -vim.api.nvim_create_user_command('KickstartFormatToggle', function() - format_is_enabled = not format_is_enabled - print('Setting autoformatting to: ' .. tostring(format_is_enabled)) -end, {}) - --- Create an augroup that is used for managing our formatting autocmds. --- We need one augroup per client to make sure that multiple clients --- can attach to the same buffer without interfering with each other. -local _augroups = {} -local get_augroup = function(client) - if not _augroups[client.id] then - local group_name = 'kickstart-lsp-format-' .. client.name - local id = vim.api.nvim_create_augroup(group_name, { clear = true }) - _augroups[client.id] = id - end - - return _augroups[client.id] -end - -vim.api.nvim_create_autocmd('LspAttach', { - group = vim.api.nvim_create_augroup('kickstart-lsp-attach-format', { clear = true }), - - -- This is where we attach the autoformatting for reasonable clients - callback = function(args) - local client_id = args.data.client_id - local client = vim.lsp.get_client_by_id(client_id) - local bufnr = args.buf - - -- Only attach to clients that support document formatting - if not client.server_capabilities.documentFormattingProvider then - return - end - - -- Tsserver usually works poorly. Sorry you work with bad languages - -- You can remove this line if you know what you're doing :) - if client.name == 'tsserver' then - return - end - - vim.api.nvim_create_autocmd('BufWritePre', { - group = get_augroup(client), - buffer = bufnr, - callback = function() - if not format_is_enabled then - return - end - - vim.lsp.buf.format { async = false } - end, - }) - end, -}) diff --git a/lua/kickstart/plugins/autoformat.lua b/lua/kickstart/plugins/autoformat.lua new file mode 100644 index 00000000000..ca5807f1fce --- /dev/null +++ b/lua/kickstart/plugins/autoformat.lua @@ -0,0 +1,61 @@ +return { + 'neovim/nvim-lspconfig', + + config = function() + -- Switch for controlling whether you want autoformatting. + -- Use :KickstartFormatToggle to toggle autoformatting on or off + local format_is_enabled = true + vim.api.nvim_create_user_command('KickstartFormatToggle', function() + format_is_enabled = not format_is_enabled + print('Setting autoformatting to: ' .. tostring(format_is_enabled)) + end, {}) + + -- Create an augroup that is used for managing our formatting autocmds. + -- We need one augroup per client to make sure that multiple clients + -- can attach to the same buffer without interfering with each other. + local _augroups = {} + local get_augroup = function(client) + if not _augroups[client.id] then + local group_name = 'kickstart-lsp-format-' .. client.name + local id = vim.api.nvim_create_augroup(group_name, { clear = true }) + _augroups[client.id] = id + end + + return _augroups[client.id] + end + + vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('kickstart-lsp-attach-format', { clear = true }), + + -- This is where we attach the autoformatting for reasonable clients + callback = function(args) + local client_id = args.data.client_id + local client = vim.lsp.get_client_by_id(client_id) + local bufnr = args.buf + + -- Only attach to clients that support document formatting + if not client.server_capabilities.documentFormattingProvider then + return + end + + -- Tsserver usually works poorly. Sorry you work with bad languages + -- You can remove this line if you know what you're doing :) + if client.name == 'tsserver' then + return + end + + vim.api.nvim_create_autocmd('BufWritePre', { + group = get_augroup(client), + buffer = bufnr, + callback = function() + if not format_is_enabled then + return + end + + vim.lsp.buf.format { async = false } + end, + }) + end, + }) + end, +} diff --git a/lua/kickstart/plugins/debug.lua b/lua/kickstart/plugins/debug.lua new file mode 100644 index 00000000000..a61845271cb --- /dev/null +++ b/lua/kickstart/plugins/debug.lua @@ -0,0 +1,69 @@ +return { + { + enabled = true, + config = function() + -- Optional debug adapter setup + -- + -- To enable setup, change `disable = true` in the packer section + -- of the init.lua. You'll also want to copy this file into your + -- config at ~/.config/nvim/after/plugin/dap.lua + + local dapui = require 'dapui' + + require('mason-nvim-dap').setup { + -- Makes a best effort to setup the various debuggers with + -- reasonable debug configurations + automatic_setup = true, + + -- You'll need to check that you have the required things installed + -- online, please don't ask me how to install them :) + ensure_installed = { + -- Update this to ensure that you have the debuggers for the langs you want + 'delve', + }, + } + + -- You can provide additional configuration to the handlers, + -- see mason-nvim-dap README for more information + require('mason-nvim-dap').setup_handlers() + + -- Basic debugging keymaps, feel free to change to your liking! + vim.keymap.set('n', '', require('dap').continue) + vim.keymap.set('n', '', require('dap').step_into) + vim.keymap.set('n', '', require('dap').step_over) + vim.keymap.set('n', '', require('dap').step_out) + vim.keymap.set('n', 'b', require('dap').toggle_breakpoint) + vim.keymap.set('n', 'B', function() + require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ') + end) + + -- Dap UI setup + -- For more information, see |:help nvim-dap-ui| + dapui.setup { + -- Set icons to characters that are more likely to work in every terminal. + -- Feel free to remove or use ones that you like more! :) + -- Don't feel like these are good choices. + icons = { expanded = '▾', collapsed = '▸', current_frame = '*' }, + controls = { + icons = { + pause = '⏸', + play = '▶', + step_into = '⏎', + step_over = '⏭', + step_out = '⏮', + step_back = 'b', + run_last = '▶▶', + terminate = '⏹', + }, + }, + } + + dap.listeners.after.event_initialized['dapui_config'] = dapui.open + dap.listeners.before.event_terminated['dapui_config'] = dapui.close + dap.listeners.before.event_exited['dapui_config'] = dapui.close + + -- Install golang specific config + require('dap-go').setup() + end, + }, +} From 0d7e4dadab1edca76fb0e0c46e5c2b9d4e49f0aa Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Wed, 15 Feb 2023 21:01:33 -0500 Subject: [PATCH 10/21] debug works much better now --- doc/kickstart.txt | 24 ++++++ doc/tags | 3 + init.lua | 15 ++-- lua/custom/plugins/init.lua | 3 + lua/kickstart/plugins/debug.lua | 127 +++++++++++++++++--------------- 5 files changed, 107 insertions(+), 65 deletions(-) create mode 100644 doc/kickstart.txt create mode 100644 doc/tags create mode 100644 lua/custom/plugins/init.lua diff --git a/doc/kickstart.txt b/doc/kickstart.txt new file mode 100644 index 00000000000..cb87ac3f1de --- /dev/null +++ b/doc/kickstart.txt @@ -0,0 +1,24 @@ +================================================================================ +INTRODUCTION *kickstart.nvim* + +Kickstart.nvim is a project to help you get started on your neovim journey. + + *kickstart-is-not* +It is not: +- Complete framework for every plugin under the sun +- Place to add every plugin that could ever be useful + + *kickstart-is* +It is: +- Somewhere that has a good start for the most common "IDE" type features: + - autocompletion + - goto-definition + - find references + - fuzzy finding + - and hinting at what more can be done :) +- A place to _kickstart_ your journey. + - You should fork this project and use/modify it so that it matches your + style and preferences. If you don't want to do that, there are probably + other projects that would fit much better for you (and that's great!)! + + vim:tw=78:ts=8:ft=help:norl: diff --git a/doc/tags b/doc/tags new file mode 100644 index 00000000000..687ae7721d9 --- /dev/null +++ b/doc/tags @@ -0,0 +1,3 @@ +kickstart-is kickstart.txt /*kickstart-is* +kickstart-is-not kickstart.txt /*kickstart-is-not* +kickstart.nvim kickstart.txt /*kickstart.nvim* diff --git a/init.lua b/init.lua index 7d0b86f30cb..f47d04f5f05 100644 --- a/init.lua +++ b/init.lua @@ -77,13 +77,14 @@ require('lazy').setup({ end, }, - -- Next Step: Add additional "plugins" for kickstart - require 'kickstart.plugins.autoformat', - -- require('kickstart.plugins.debug'), - - -- TODO: - -- { import = 'kickstart.plugins' }, - -- { import = 'custom.plugins' }, + -- Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart + -- require 'kickstart.plugins.autoformat', + -- require 'kickstart.plugins.debug', + + -- Add your own custom plugins to `lua/custom/plugins/*.lua` + -- For more information see: + -- https://github.com/folke/lazy.nvim#-structuring-your-plugins + { import = 'custom.plugins' }, }, {}) -- [[ Setting options ]] diff --git a/lua/custom/plugins/init.lua b/lua/custom/plugins/init.lua new file mode 100644 index 00000000000..cdc244c933a --- /dev/null +++ b/lua/custom/plugins/init.lua @@ -0,0 +1,3 @@ +-- You can add your own plugins here or in other files in this directory! +-- I promise not to create any merge conflicts in this directory :) +return {} diff --git a/lua/kickstart/plugins/debug.lua b/lua/kickstart/plugins/debug.lua index a61845271cb..33e39807dc6 100644 --- a/lua/kickstart/plugins/debug.lua +++ b/lua/kickstart/plugins/debug.lua @@ -1,69 +1,80 @@ return { - { - enabled = true, - config = function() - -- Optional debug adapter setup - -- - -- To enable setup, change `disable = true` in the packer section - -- of the init.lua. You'll also want to copy this file into your - -- config at ~/.config/nvim/after/plugin/dap.lua + 'mfussenegger/nvim-dap', + dependencies = { + -- Creates a beautiful debugger UI + 'rcarriga/nvim-dap-ui', - local dapui = require 'dapui' + -- Installs the debug adapters for you + 'williamboman/mason.nvim', + 'jay-babu/mason-nvim-dap.nvim', - require('mason-nvim-dap').setup { - -- Makes a best effort to setup the various debuggers with - -- reasonable debug configurations - automatic_setup = true, + -- Add your own debuggers here + 'leoluz/nvim-dap-go', + }, - -- You'll need to check that you have the required things installed - -- online, please don't ask me how to install them :) - ensure_installed = { - -- Update this to ensure that you have the debuggers for the langs you want - 'delve', - }, - } + config = function() + -- Optional debug adapter setup + -- + -- To enable setup, change `disable = true` in the packer section + -- of the init.lua. You'll also want to copy this file into your + -- config at ~/.config/nvim/after/plugin/dap.lua + + local dap = require 'dap' + local dapui = require 'dapui' - -- You can provide additional configuration to the handlers, - -- see mason-nvim-dap README for more information - require('mason-nvim-dap').setup_handlers() + require('mason-nvim-dap').setup { + -- Makes a best effort to setup the various debuggers with + -- reasonable debug configurations + automatic_setup = true, - -- Basic debugging keymaps, feel free to change to your liking! - vim.keymap.set('n', '', require('dap').continue) - vim.keymap.set('n', '', require('dap').step_into) - vim.keymap.set('n', '', require('dap').step_over) - vim.keymap.set('n', '', require('dap').step_out) - vim.keymap.set('n', 'b', require('dap').toggle_breakpoint) - vim.keymap.set('n', 'B', function() - require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ') - end) + -- You'll need to check that you have the required things installed + -- online, please don't ask me how to install them :) + ensure_installed = { + -- Update this to ensure that you have the debuggers for the langs you want + 'delve', + }, + } - -- Dap UI setup - -- For more information, see |:help nvim-dap-ui| - dapui.setup { - -- Set icons to characters that are more likely to work in every terminal. - -- Feel free to remove or use ones that you like more! :) - -- Don't feel like these are good choices. - icons = { expanded = '▾', collapsed = '▸', current_frame = '*' }, - controls = { - icons = { - pause = '⏸', - play = '▶', - step_into = '⏎', - step_over = '⏭', - step_out = '⏮', - step_back = 'b', - run_last = '▶▶', - terminate = '⏹', - }, + -- You can provide additional configuration to the handlers, + -- see mason-nvim-dap README for more information + require('mason-nvim-dap').setup_handlers() + + -- Basic debugging keymaps, feel free to change to your liking! + vim.keymap.set('n', '', dap.continue) + vim.keymap.set('n', '', dap.step_into) + vim.keymap.set('n', '', dap.step_over) + vim.keymap.set('n', '', dap.step_out) + vim.keymap.set('n', 'b', dap.toggle_breakpoint) + vim.keymap.set('n', 'B', function() + dap.set_breakpoint(vim.fn.input 'Breakpoint condition: ') + end) + + -- Dap UI setup + -- For more information, see |:help nvim-dap-ui| + dapui.setup { + -- Set icons to characters that are more likely to work in every terminal. + -- Feel free to remove or use ones that you like more! :) + -- Don't feel like these are good choices. + icons = { expanded = '▾', collapsed = '▸', current_frame = '*' }, + controls = { + icons = { + pause = '⏸', + play = '▶', + step_into = '⏎', + step_over = '⏭', + step_out = '⏮', + step_back = 'b', + run_last = '▶▶', + terminate = '⏹', }, - } + }, + } - dap.listeners.after.event_initialized['dapui_config'] = dapui.open - dap.listeners.before.event_terminated['dapui_config'] = dapui.close - dap.listeners.before.event_exited['dapui_config'] = dapui.close + dap.listeners.after.event_initialized['dapui_config'] = dapui.open + dap.listeners.before.event_terminated['dapui_config'] = dapui.close + dap.listeners.before.event_exited['dapui_config'] = dapui.close - -- Install golang specific config - require('dap-go').setup() - end, - }, + -- Install golang specific config + require('dap-go').setup() + end, } From 5ba0db5522bc67785a66395d88d351b84a5d3f69 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Thu, 16 Feb 2023 16:57:42 -0500 Subject: [PATCH 11/21] readme --- README.md | 86 +++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index ff70f77860c..5ed5900d23f 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,57 @@ +# kickstart.nvim + ### Introduction A starting point for Neovim that is: -* Small (<500 lines) -* Single-file +* Small +* Single-file (with examples of moving to multi-file) * Documented * Modular -Kickstart.nvim targets *only* the latest ['stable'](https://github.com/neovim/neovim/releases/tag/stable) and latest ['nightly'](https://github.com/neovim/neovim/releases/tag/nightly) of Neovim. If you are experiencing issues, please make sure you have the latest versions. - -This repo is meant to be used as a starting point for a user's own configuration; remove the things you don't use and add what you miss. Please refrain from leaving comments about enabling / disabling particular languages out of the box. +This repo is meant to be used as by **YOU** to begin your Neovim journey; remove the things you don't use and add what you miss. ### Installation +Kickstart.nvim targets *only* the latest ['stable'](https://github.com/neovim/neovim/releases/tag/stable) and latest ['nightly'](https://github.com/neovim/neovim/releases/tag/nightly) of Neovim. If you are experiencing issues, please make sure you have the latest versions. + * Backup your previous configuration * Copy and paste the kickstart.nvim `init.lua` into `$HOME/.config/nvim/init.lua` (Linux/Mac) or `~/AppData/Local/nvim/init.lua` (Windows) - -TODO: This isn't right anymore. Also, link to the sections about setting up the installation from the lazy readme -* Start Neovim (`nvim`) and run `:PackerInstall` - ignore any error message about missing plugins, `:PackerInstall` will fix that shortly - +* Start Neovim (`nvim`) and allow `lazy.nvim` to complete installation. * Restart Neovim - -If there are languages that you don't want to use, remove their configuration and notes from your `init.lua` after copy and pasting (for example, in the mason configuration). - -Additional requirements: +Additional system requirements: - Make sure to review the readmes of the plugins in the plugin list if anything is missing. In particular: - [ripgrep](https://github.com/BurntSushi/ripgrep#installation) is required for multiple [telescope](https://github.com/nvim-telescope/telescope.nvim#suggested-dependencies) pickers. -### Windows Installation - -Installation may require installing build tools, and updating the run command for `telescope-fzf-native` - -See `telescope-fzf-native` documention for [more details](https://github.com/nvim-telescope/telescope-fzf-native.nvim#installation) - -This requires: - -- Install CMake, and the Microsoft C++ Build Tools on Windows - -```lua -use {'nvim-telescope/telescope-fzf-native.nvim', run = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' } -``` - ### Configuration -You could directly modify the `init.lua` file with your personal customizations. This option is the most straightforward, but if you update your config from this repo, you may need to reapply your changes. +* Fork this repo so that you have your own copy. +* Inside of your fork, feel free to modify any file you like! It's your fork! +* Then there are two primary configuration options available: + * Include the `lua/kickstart/plugins/*` files in your configuration. + * Add new configuration in `lua/custom/plugins/*` files, which will be auto sourced using `lazy.nvim` -An alternative approach is to create a separate `custom.plugins` module to register your own plugins. In addition, you can handle further customizations in the `/after/plugin/` directory (see `:help load-plugins`). See the following examples for more information. Leveraging this technique should make upgrading to a newer version of this repo easier. +#### Example: Adding an autopairs plugin -#### Example `plugins.lua` - -The following is an example of a `plugins.lua` module (located at `$HOME/.config/nvim/lua/custom/plugins.lua`) where you can register your own plugins. +In the file: `lua/custom/plugins/autopairs.lua`, add: ```lua -return function(use) - use({ - "folke/which-key.nvim", - config = function() - require("which-key").setup({}) - end - }) -end +-- File: lua/custom/plugins/autopairs.lua + +return { + "windwp/nvim-autopairs", + config = function() + require("nvim-autopairs").setup {} + end, +} ``` -#### Example `defaults.lua` +This will automatically install `nvim-autopairs` and enable it on startup. For more information, see documentation for [lazy.nvim](https://github.com/folke/lazy.nvim). + +#### Example: Adding a file to change default options -For further customizations, you can add a file in the `/after/plugin/` folder (see `:help load-plugins`) to include your own options, keymaps, autogroups, and more. The following is an example `defaults.lua` file (located at `$HOME/.config/nvim/after/plugin/defaults.lua`). +To change default options, you can add a file in the `/after/plugin/` folder (see `:help load-plugins`) to include your own options, keymaps, autogroups, and more. The following is an example `defaults.lua` file (located at `$HOME/.config/nvim/after/plugin/defaults.lua`). ```lua vim.opt.relativenumber = true @@ -79,7 +65,6 @@ Pull-requests are welcome. The goal of this repo is not to create a Neovim confi * Custom language server configuration (null-ls templates) * Theming beyond a default colorscheme necessary for LSP highlight groups -* Lazy-loading. Kickstart.nvim should start within 40 ms on modern hardware. Please profile and contribute to upstream plugins to optimize startup time instead. Each PR, especially those which increase the line count, should have a description as to why the PR is necessary. @@ -91,3 +76,18 @@ Each PR, especially those which increase the line count, should have a descripti * Are there any cool videos about this plugin? * Current iteration of kickstart (coming soon) * Here is one about the previous iteration of kickstart: [video introduction to Kickstart.nvim](https://youtu.be/stqUbv-5u2s). + +### Windows Installation + +Installation may require installing build tools, and updating the run command for `telescope-fzf-native` + +See `telescope-fzf-native` documention for [more details](https://github.com/nvim-telescope/telescope-fzf-native.nvim#installation) + +This requires: + +- Install CMake, and the Microsoft C++ Build Tools on Windows + +```lua +use {'nvim-telescope/telescope-fzf-native.nvim', run = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' } +``` + From e40d7048d4c3f2e03c797097289041fbbacc060e Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Thu, 16 Feb 2023 17:02:01 -0500 Subject: [PATCH 12/21] more docs --- README.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5ed5900d23f..93d67adacc8 100644 --- a/README.md +++ b/README.md @@ -21,17 +21,20 @@ Kickstart.nvim targets *only* the latest ['stable'](https://github.com/neovim/ne * Restart Neovim Additional system requirements: -- Make sure to review the readmes of the plugins in the plugin list if anything is missing. In particular: +- Make sure to review the readmes of the plugins if you are experiencing errors. In particular: - [ripgrep](https://github.com/BurntSushi/ripgrep#installation) is required for multiple [telescope](https://github.com/nvim-telescope/telescope.nvim#suggested-dependencies) pickers. +- See as well [Windows Installation] -### Configuration +### Usage -* Fork this repo so that you have your own copy. +* Fork this repo (so that you have your own copy that you can modify). * Inside of your fork, feel free to modify any file you like! It's your fork! * Then there are two primary configuration options available: * Include the `lua/kickstart/plugins/*` files in your configuration. * Add new configuration in `lua/custom/plugins/*` files, which will be auto sourced using `lazy.nvim` +You can also merge updates/changes from the repo back into your fork, to keep up-to-date with any changes for the default configuration + #### Example: Adding an autopairs plugin In the file: `lua/custom/plugins/autopairs.lua`, add: @@ -71,8 +74,11 @@ Each PR, especially those which increase the line count, should have a descripti ### FAQ * What should I do if I already have a pre-existing neovim configuration? - * You should back it up, then delete all files associated with it. - * This includes your existing init.lua and the neovim files in `.local` which can be deleted with `rm -rf ~/.local/share/nvim/` + * You should back it up, then delete all files associated with it. + * This includes your existing init.lua and the neovim files in `~/.local` which can be deleted with `rm -rf ~/.local/share/nvim/` + * You may also want to look at the [migration guide for lazy.nvim](https://github.com/folke/lazy.nvim#-migration-guide) +* What if I want to "uninstall" this configuration: + * See [lazy.nvim uninstall](https://github.com/folke/lazy.nvim#-uninstalling) information * Are there any cool videos about this plugin? * Current iteration of kickstart (coming soon) * Here is one about the previous iteration of kickstart: [video introduction to Kickstart.nvim](https://youtu.be/stqUbv-5u2s). From c33d911e60e10c4b7634b40147e102fd136e314f Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Thu, 16 Feb 2023 17:02:44 -0500 Subject: [PATCH 13/21] more docs --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 93d67adacc8..243fb0c95f5 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Kickstart.nvim targets *only* the latest ['stable'](https://github.com/neovim/ne Additional system requirements: - Make sure to review the readmes of the plugins if you are experiencing errors. In particular: - [ripgrep](https://github.com/BurntSushi/ripgrep#installation) is required for multiple [telescope](https://github.com/nvim-telescope/telescope.nvim#suggested-dependencies) pickers. -- See as well [Windows Installation] +- See as well [Windows Installation](#Windows-Installation) ### Usage From eea0adb4fec649a7c072c8c633abf5d379e2db34 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Thu, 16 Feb 2023 17:04:22 -0500 Subject: [PATCH 14/21] more docs --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 243fb0c95f5..9028d19ae4a 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,8 @@ This repo is meant to be used as by **YOU** to begin your Neovim journey; remove Kickstart.nvim targets *only* the latest ['stable'](https://github.com/neovim/neovim/releases/tag/stable) and latest ['nightly'](https://github.com/neovim/neovim/releases/tag/nightly) of Neovim. If you are experiencing issues, please make sure you have the latest versions. * Backup your previous configuration -* Copy and paste the kickstart.nvim `init.lua` into `$HOME/.config/nvim/init.lua` (Linux/Mac) or `~/AppData/Local/nvim/init.lua` (Windows) +* (Recommended) Fork this repo (so that you have your own copy that you can modify). +* Clone the kickstart repo into `$HOME/.config/nvim/` (Linux/Mac) or `~/AppData/Local/nvim/` (Windows) * Start Neovim (`nvim`) and allow `lazy.nvim` to complete installation. * Restart Neovim @@ -25,9 +26,8 @@ Additional system requirements: - [ripgrep](https://github.com/BurntSushi/ripgrep#installation) is required for multiple [telescope](https://github.com/nvim-telescope/telescope.nvim#suggested-dependencies) pickers. - See as well [Windows Installation](#Windows-Installation) -### Usage +### Configuration And Extension -* Fork this repo (so that you have your own copy that you can modify). * Inside of your fork, feel free to modify any file you like! It's your fork! * Then there are two primary configuration options available: * Include the `lua/kickstart/plugins/*` files in your configuration. From a7400529d71e783e0fdd8d21888f0470c9398bd4 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Thu, 16 Feb 2023 17:05:17 -0500 Subject: [PATCH 15/21] more docs --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 9028d19ae4a..07a17cd22e7 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,10 @@ Kickstart.nvim targets *only* the latest ['stable'](https://github.com/neovim/ne * Backup your previous configuration * (Recommended) Fork this repo (so that you have your own copy that you can modify). * Clone the kickstart repo into `$HOME/.config/nvim/` (Linux/Mac) or `~/AppData/Local/nvim/` (Windows) + * If you don't want to include it as a git repo, you can just clone it and then move the files to this location * Start Neovim (`nvim`) and allow `lazy.nvim` to complete installation. * Restart Neovim +* **You're ready to go!** Additional system requirements: - Make sure to review the readmes of the plugins if you are experiencing errors. In particular: From ba5786cde43eaff6151295c8d6db2721c0e99f3d Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Thu, 16 Feb 2023 17:09:21 -0500 Subject: [PATCH 16/21] more docs --- README.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/README.md b/README.md index 07a17cd22e7..c3c11443d93 100644 --- a/README.md +++ b/README.md @@ -52,8 +52,33 @@ return { } ``` + This will automatically install `nvim-autopairs` and enable it on startup. For more information, see documentation for [lazy.nvim](https://github.com/folke/lazy.nvim). +#### Example: Adding a file tree plugin + +In the file: `lua/custom/plugins/filetree.lua`, add: + +```lua +return { + "nvim-neo-tree/neo-tree.nvim", + branch = "v2.x", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended + "MunifTanjim/nui.nvim", + }, + config = function () + -- Unless you are still migrating, remove the deprecated commands from v1.x + vim.cmd([[ let g:neo_tree_remove_legacy_commands = 1 ]]) + + require('neo-tree').setup {} + end, +} +``` + +This will install the tree plugin and add the command `:NeoTree` for you. You can explore the documentation at [neo-tree.nvim](https://github.com/nvim-neo-tree/neo-tree.nvim) for more information. + #### Example: Adding a file to change default options To change default options, you can add a file in the `/after/plugin/` folder (see `:help load-plugins`) to include your own options, keymaps, autogroups, and more. The following is an example `defaults.lua` file (located at `$HOME/.config/nvim/after/plugin/defaults.lua`). From 775ff6ac89d6a3fdf812f2fe79855f4a71ec1195 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Thu, 16 Feb 2023 17:11:01 -0500 Subject: [PATCH 17/21] more docs --- init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init.lua b/init.lua index f47d04f5f05..e4beb936409 100644 --- a/init.lua +++ b/init.lua @@ -224,7 +224,7 @@ require('nvim-treesitter.configs').setup { init_selection = '', node_incremental = '', scope_incremental = '', - node_decremental = '', + node_decremental = '', }, }, textobjects = { From e5c03b42060df04306d2918d9cdfc9458d25c381 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Thu, 16 Feb 2023 17:12:47 -0500 Subject: [PATCH 18/21] add whichkey --- init.lua | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/init.lua b/init.lua index e4beb936409..969f5733daf 100644 --- a/init.lua +++ b/init.lua @@ -54,6 +54,15 @@ require('lazy').setup({ end, }, + { -- Useful plugin to show you pending keybinds. + 'folke/which-key.nvim', + config = function() + vim.o.timeout = true + vim.o.timeoutlen = 300 + require('which-key').setup {} + end, + }, + -- Git related plugins 'tpope/vim-fugitive', 'tpope/vim-rhubarb', From bdbe2f3ae22796672557e1a763e304d08dc20a94 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Thu, 16 Feb 2023 17:31:31 -0500 Subject: [PATCH 19/21] getting to the closing part of this repo --- .gitignore | 1 - Dockerfile | 34 ----- init.lua | 194 +++++++++++++++++---------- lua/custom/plugins/init.lua | 2 + lua/kickstart/plugins/autoformat.lua | 5 + lua/kickstart/plugins/debug.lua | 17 ++- 6 files changed, 140 insertions(+), 113 deletions(-) delete mode 100644 Dockerfile diff --git a/.gitignore b/.gitignore index 227f02666e2..ea93edad490 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,4 @@ tags test.sh .luarc.json nvim -plugin/packer_compiled.lua lazy-lock.json diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 5c303b48bfe..00000000000 --- a/Dockerfile +++ /dev/null @@ -1,34 +0,0 @@ -# Build neovim separately in the first stage -FROM alpine:latest AS base - -RUN apk --no-cache add \ - autoconf \ - automake \ - build-base \ - cmake \ - ninja \ - coreutils \ - curl \ - gettext-tiny-dev \ - git \ - libtool \ - pkgconf \ - unzip - -# Build neovim (and use it as an example codebase -RUN git clone https://github.com/neovim/neovim.git - -ARG VERSION=master -RUN cd neovim && git checkout ${VERSION} && make CMAKE_BUILD_TYPE=RelWithDebInfo install - -# To support kickstart.nvim -RUN apk --no-cache add \ - fd \ - ctags \ - ripgrep \ - git - -# Copy the kickstart.nvim init.lua -COPY ./init.lua /root/.config/nvim/init.lua - -WORKDIR /neovim diff --git a/init.lua b/init.lua index 969f5733daf..20a5e36dd90 100644 --- a/init.lua +++ b/init.lua @@ -1,5 +1,23 @@ --- TODO BEFORE MERGE: --- - [ ] Document an example of adding your own custom plugins (for example, autopairs) +--[[ + +===================================================================== +==================== READ THIS BEFORE CONTINUING ==================== +===================================================================== + +I have left several `:help X` comments throughout the init.lua +You should run that command and read the help for the section for more information. + +In addition, I have some `NOTE:` items throughout the file. +These are for you, the reader to help understand what is happening. Feel free to delete +them once you know what you're doing, but they should serve as a guide for when you +are first encountering a few different constructs in your nvim config. + +I hope you enjoy your Neovim journey, +- TJ + +P.S. You can delete this when you're done too. It's your config now :) + +--]] -- Set as the leader key -- See `:help mapleader` @@ -23,8 +41,23 @@ if not vim.loop.fs_stat(lazypath) then end vim.opt.rtp:prepend(lazypath) +-- NOTE: Here is where you install your plugins. +-- You can configure plugins using the `config` key. +-- +-- You can also configure plugins after the setup call, +-- as they will be available in your neovim runtime. require('lazy').setup({ - ---@diagnostic disable-next-line: assign-type-mismatch + -- NOTE: First, some plugins that don't require any configuration + + -- Git related plugins + 'tpope/vim-fugitive', + 'tpope/vim-rhubarb', + + -- Detect tabstop and shiftwidth automatically + 'tpope/vim-sleuth', + + -- NOTE: This is where your plugins related to LSP can be installed. + -- The configuration is done below. Search for lspconfig to find it below. { -- LSP Configuration & Plugins 'neovim/nvim-lspconfig', dependencies = { @@ -32,28 +65,23 @@ require('lazy').setup({ 'williamboman/mason.nvim', 'williamboman/mason-lspconfig.nvim', - -- Useful status updates for LSP - 'j-hui/fidget.nvim', + { -- Useful status updates for LSP + 'j-hui/fidget.nvim', + config = function() + require('fidget').setup() + end, + }, - -- Additional lua configuration, makes nvim stuff amazing + -- Additional lua configuration, makes nvim stuff amazing! 'folke/neodev.nvim', }, }, + { -- Autocompletion 'hrsh7th/nvim-cmp', dependencies = { 'hrsh7th/cmp-nvim-lsp', 'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip' }, }, - { -- Highlight, edit, and navigate code - 'nvim-treesitter/nvim-treesitter', - dependencies = { - 'nvim-treesitter/nvim-treesitter-textobjects', - }, - config = function() - pcall(require('nvim-treesitter.install').update { with_sync = true }) - end, - }, - { -- Useful plugin to show you pending keybinds. 'folke/which-key.nvim', config = function() @@ -63,21 +91,70 @@ require('lazy').setup({ end, }, - -- Git related plugins - 'tpope/vim-fugitive', - 'tpope/vim-rhubarb', - 'lewis6991/gitsigns.nvim', + { -- Adds git releated signs to the gutter, as well as utilities for managing changes + 'lewis6991/gitsigns.nvim', + config = function() + -- See `:help gitsigns.txt` + require('gitsigns').setup { + signs = { + add = { text = '+' }, + change = { text = '~' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + }, + } + end, + }, + + { -- Theme inspired by Atom + 'navarasu/onedark.nvim', + config = function() + vim.cmd.colorscheme 'onedark' + end, + }, + + { -- Fancier statusline + 'nvim-lualine/lualine.nvim', + config = function() + -- Set lualine as statusline + -- See `:help lualine.txt` + require('lualine').setup { + options = { + icons_enabled = false, + theme = 'onedark', + component_separators = '|', + section_separators = '', + }, + } + end, + }, - 'navarasu/onedark.nvim', -- Theme inspired by Atom - 'nvim-lualine/lualine.nvim', -- Fancier statusline - 'lukas-reineke/indent-blankline.nvim', -- Add indentation guides even on blank lines - 'numToStr/Comment.nvim', -- "gc" to comment visual regions/lines - 'tpope/vim-sleuth', -- Detect tabstop and shiftwidth automatically + { -- Add indentation guides even on blank lines + 'lukas-reineke/indent-blankline.nvim', + config = function() + -- Enable `lukas-reineke/indent-blankline.nvim` + -- See `:help indent_blankline.txt` + require('indent_blankline').setup { + char = '┊', + show_trailing_blankline_indent = false, + } + end, + }, + + { -- "gc" to comment visual regions/lines + 'numToStr/Comment.nvim', + config = function() + require('Comment').setup() + end, + }, -- Fuzzy Finder (files, lsp, etc) { 'nvim-telescope/telescope.nvim', branch = '0.1.x', dependencies = { 'nvim-lua/plenary.nvim' } }, - -- Fuzzy Finder Algorithm which requires local dependencies to be built. Only load if `make` is available + -- Fuzzy Finder Algorithm which requires local dependencies to be built. + -- Only load if `make` is available. Make sure you have the system + -- requirements installed. { 'nvim-telescope/telescope-fzf-native.nvim', build = 'make', @@ -86,13 +163,23 @@ require('lazy').setup({ end, }, - -- Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart + { -- Highlight, edit, and navigate code + 'nvim-treesitter/nvim-treesitter', + dependencies = { + 'nvim-treesitter/nvim-treesitter-textobjects', + }, + config = function() + pcall(require('nvim-treesitter.install').update { with_sync = true }) + end, + }, + + -- NOTE: Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart -- require 'kickstart.plugins.autoformat', -- require 'kickstart.plugins.debug', - -- Add your own custom plugins to `lua/custom/plugins/*.lua` - -- For more information see: - -- https://github.com/folke/lazy.nvim#-structuring-your-plugins + -- NOTE: Add your own custom plugins to `lua/custom/plugins/*.lua` + -- There are examples in the README.md for kickstar.nvim + -- For additional information see: https://github.com/folke/lazy.nvim#-structuring-your-plugins { import = 'custom.plugins' }, }, {}) @@ -122,13 +209,12 @@ vim.o.smartcase = true vim.o.updatetime = 250 vim.wo.signcolumn = 'yes' --- Set colorscheme -vim.o.termguicolors = true -vim.cmd [[colorscheme onedark]] - -- Set completeopt to have a better completion experience vim.o.completeopt = 'menuone,noselect' +-- NOTE: You should make sure your terminal supports this +vim.o.termguicolors = true + -- [[ Basic Keymaps ]] -- Keymaps for better default experience @@ -150,39 +236,6 @@ vim.api.nvim_create_autocmd('TextYankPost', { pattern = '*', }) --- Set lualine as statusline --- See `:help lualine.txt` -require('lualine').setup { - options = { - icons_enabled = false, - theme = 'onedark', - component_separators = '|', - section_separators = '', - }, -} - --- Enable Comment.nvim -require('Comment').setup() - --- Enable `lukas-reineke/indent-blankline.nvim` --- See `:help indent_blankline.txt` -require('indent_blankline').setup { - char = '┊', - show_trailing_blankline_indent = false, -} - --- Gitsigns --- See `:help gitsigns.txt` -require('gitsigns').setup { - signs = { - add = { text = '+' }, - change = { text = '~' }, - delete = { text = '_' }, - topdelete = { text = '‾' }, - changedelete = { text = '~' }, - }, -} - -- [[ Configure Telescope ]] -- See `:help telescope` and `:help telescope.setup()` require('telescope').setup { @@ -355,7 +408,7 @@ local servers = { -- Setup neovim lua configuration require('neodev').setup() --- + -- nvim-cmp supports additional completion capabilities, so broadcast that to servers local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) @@ -380,9 +433,6 @@ mason_lspconfig.setup_handlers { end, } --- Turn on lsp status information -require('fidget').setup() - -- nvim-cmp setup local cmp = require 'cmp' local luasnip = require 'luasnip' @@ -398,7 +448,7 @@ cmp.setup { mapping = cmp.mapping.preset.insert { [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), - [''] = cmp.mapping.complete(), + [''] = cmp.mapping.complete {}, [''] = cmp.mapping.confirm { behavior = cmp.ConfirmBehavior.Replace, select = true, diff --git a/lua/custom/plugins/init.lua b/lua/custom/plugins/init.lua index cdc244c933a..be0eb9d8d7a 100644 --- a/lua/custom/plugins/init.lua +++ b/lua/custom/plugins/init.lua @@ -1,3 +1,5 @@ -- You can add your own plugins here or in other files in this directory! -- I promise not to create any merge conflicts in this directory :) +-- +-- See the kickstart.nvim README for more information return {} diff --git a/lua/kickstart/plugins/autoformat.lua b/lua/kickstart/plugins/autoformat.lua index ca5807f1fce..855f350f319 100644 --- a/lua/kickstart/plugins/autoformat.lua +++ b/lua/kickstart/plugins/autoformat.lua @@ -1,3 +1,8 @@ +-- autoformat.lua +-- +-- Use your language server to automatically format your code on save. +-- Adds additional commands as well to manage the behavior + return { 'neovim/nvim-lspconfig', diff --git a/lua/kickstart/plugins/debug.lua b/lua/kickstart/plugins/debug.lua index 33e39807dc6..0b68c43b94b 100644 --- a/lua/kickstart/plugins/debug.lua +++ b/lua/kickstart/plugins/debug.lua @@ -1,5 +1,16 @@ +-- debug.lua +-- +-- Shows how to use the DAP plugin to debug your code. +-- +-- Primarily focused on configuring the debugger for Go, but can +-- be extended to other languages as well. That's why it's called +-- kickstart.nvim and not kitchen-sink.nvim ;) + return { + -- NOTE: Yes, you can install new plugins here! 'mfussenegger/nvim-dap', + + -- NOTE: And you can specify dependencies as well dependencies = { -- Creates a beautiful debugger UI 'rcarriga/nvim-dap-ui', @@ -13,12 +24,6 @@ return { }, config = function() - -- Optional debug adapter setup - -- - -- To enable setup, change `disable = true` in the packer section - -- of the init.lua. You'll also want to copy this file into your - -- config at ~/.config/nvim/after/plugin/dap.lua - local dap = require 'dap' local dapui = require 'dapui' From 33469ef03dc7cdc5c2dcd2d6cf3ca67d40ffb4c9 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Fri, 17 Feb 2023 10:06:48 -0500 Subject: [PATCH 20/21] fix several of folke's comments --- README.md | 6 +- init.lua | 128 +++++++++++++++------------ lua/kickstart/plugins/autoformat.lua | 14 ++- 3 files changed, 85 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index c3c11443d93..32f58dfb6b7 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,9 @@ A starting point for Neovim that is: This repo is meant to be used as by **YOU** to begin your Neovim journey; remove the things you don't use and add what you miss. +Distribution Alternatives: +- [LazyVim](https://www.lazyvim.org/): A delightful distribution maintained by @folke (the author of lazy.nvim, the package manager used here) + ### Installation Kickstart.nvim targets *only* the latest ['stable'](https://github.com/neovim/neovim/releases/tag/stable) and latest ['nightly'](https://github.com/neovim/neovim/releases/tag/nightly) of Neovim. If you are experiencing issues, please make sure you have the latest versions. @@ -34,6 +37,7 @@ Additional system requirements: * Then there are two primary configuration options available: * Include the `lua/kickstart/plugins/*` files in your configuration. * Add new configuration in `lua/custom/plugins/*` files, which will be auto sourced using `lazy.nvim` + * NOTE: To enable this, you need to uncomment `{ import = 'custom.plugins' }` in your `init.lua` You can also merge updates/changes from the repo back into your fork, to keep up-to-date with any changes for the default configuration @@ -62,7 +66,7 @@ In the file: `lua/custom/plugins/filetree.lua`, add: ```lua return { "nvim-neo-tree/neo-tree.nvim", - branch = "v2.x", + version = "*", dependencies = { "nvim-lua/plenary.nvim", "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended diff --git a/init.lua b/init.lua index 20a5e36dd90..a3cf24bb0e0 100644 --- a/init.lua +++ b/init.lua @@ -4,8 +4,26 @@ ==================== READ THIS BEFORE CONTINUING ==================== ===================================================================== +Kickstart.nvim is *not* a distribution. + +Kickstart.nvim is a template for your own configuration. + The goal is that you can read every line of code, top-to-bottom, and understand + what your configuration is doing. + + Once you've done that, you should start exploring, configuring and tinkering to + explore Neovim! + + If you don't know anything about Lua, I recommend taking some time to read through + a guide. One possible example: + - https://learnxinyminutes.com/docs/lua/ + + And then you can explore or search through `:help lua-guide` + + +Kickstart Guide: + I have left several `:help X` comments throughout the init.lua -You should run that command and read the help for the section for more information. +You should run that command and read that help section for more information. In addition, I have some `NOTE:` items throughout the file. These are for you, the reader to help understand what is happening. Feel free to delete @@ -16,7 +34,6 @@ I hope you enjoy your Neovim journey, - TJ P.S. You can delete this when you're done too. It's your config now :) - --]] -- Set as the leader key @@ -65,12 +82,9 @@ require('lazy').setup({ 'williamboman/mason.nvim', 'williamboman/mason-lspconfig.nvim', - { -- Useful status updates for LSP - 'j-hui/fidget.nvim', - config = function() - require('fidget').setup() - end, - }, + -- Useful status updates for LSP + -- NOTE: `opt = {}` is the same as calling `require('fidget').setup({})` + { 'j-hui/fidget.nvim', opts = {} }, -- Additional lua configuration, makes nvim stuff amazing! 'folke/neodev.nvim', @@ -82,81 +96,66 @@ require('lazy').setup({ dependencies = { 'hrsh7th/cmp-nvim-lsp', 'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip' }, }, - { -- Useful plugin to show you pending keybinds. - 'folke/which-key.nvim', - config = function() - vim.o.timeout = true - vim.o.timeoutlen = 300 - require('which-key').setup {} - end, - }, - + -- Useful plugin to show you pending keybinds. + { 'folke/which-key.nvim', opt = {} }, { -- Adds git releated signs to the gutter, as well as utilities for managing changes 'lewis6991/gitsigns.nvim', - config = function() + opt = { -- See `:help gitsigns.txt` - require('gitsigns').setup { - signs = { - add = { text = '+' }, - change = { text = '~' }, - delete = { text = '_' }, - topdelete = { text = '‾' }, - changedelete = { text = '~' }, - }, - } - end, + signs = { + add = { text = '+' }, + change = { text = '~' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + }, + }, }, { -- Theme inspired by Atom 'navarasu/onedark.nvim', + priority = 1000, config = function() vim.cmd.colorscheme 'onedark' end, }, - { -- Fancier statusline + { -- Set lualine as statusline 'nvim-lualine/lualine.nvim', - config = function() - -- Set lualine as statusline - -- See `:help lualine.txt` - require('lualine').setup { - options = { - icons_enabled = false, - theme = 'onedark', - component_separators = '|', - section_separators = '', - }, - } - end, + -- See `:help lualine.txt` + opt = { + options = { + icons_enabled = false, + theme = 'onedark', + component_separators = '|', + section_separators = '', + }, + }, }, { -- Add indentation guides even on blank lines 'lukas-reineke/indent-blankline.nvim', - config = function() - -- Enable `lukas-reineke/indent-blankline.nvim` - -- See `:help indent_blankline.txt` - require('indent_blankline').setup { - char = '┊', - show_trailing_blankline_indent = false, - } - end, + -- Enable `lukas-reineke/indent-blankline.nvim` + -- See `:help indent_blankline.txt` + opt = { + char = '┊', + show_trailing_blankline_indent = false, + }, }, - { -- "gc" to comment visual regions/lines - 'numToStr/Comment.nvim', - config = function() - require('Comment').setup() - end, - }, + -- "gc" to comment visual regions/lines + { 'numToStr/Comment.nvim', opt = {} }, -- Fuzzy Finder (files, lsp, etc) - { 'nvim-telescope/telescope.nvim', branch = '0.1.x', dependencies = { 'nvim-lua/plenary.nvim' } }, + { 'nvim-telescope/telescope.nvim', version = '*', dependencies = { 'nvim-lua/plenary.nvim' } }, -- Fuzzy Finder Algorithm which requires local dependencies to be built. -- Only load if `make` is available. Make sure you have the system -- requirements installed. { 'nvim-telescope/telescope-fzf-native.nvim', + -- NOTE: If you are having trouble with this installation, + -- refer to the README for telescope-fzf-native for more instructions. build = 'make', cond = function() return vim.fn.executable 'make' == 1 @@ -174,12 +173,19 @@ require('lazy').setup({ }, -- NOTE: Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart + -- These are some example plugins that I've included in the kickstart repository. + -- Uncomment any of the lines below to enable them. -- require 'kickstart.plugins.autoformat', -- require 'kickstart.plugins.debug', - -- NOTE: Add your own custom plugins to `lua/custom/plugins/*.lua` - -- There are examples in the README.md for kickstar.nvim + -- NOTE: The import below automatically adds your own plugins, configuration, etc from `lua/custom/plugins/*.lua` + -- You can use this folder to prevent any conflicts with this init.lua if you're interested in keeping + -- up-to-date with whatever is in the kickstart repo. + -- -- For additional information see: https://github.com/folke/lazy.nvim#-structuring-your-plugins + -- + -- An additional note is that if you only copied in the `init.lua`, you can just comment this line + -- to get rid of the warning telling you that there are not plugins in `lua/custom/plugins/`. { import = 'custom.plugins' }, }, {}) @@ -205,9 +211,13 @@ vim.o.undofile = true vim.o.ignorecase = true vim.o.smartcase = true +-- Keep signcolumn on by default +vim.wo.signcolumn = 'yes' + -- Decrease update time vim.o.updatetime = 250 -vim.wo.signcolumn = 'yes' +vim.o.timeout = true +vim.o.timeoutlen = 300 -- Set completeopt to have a better completion experience vim.o.completeopt = 'menuone,noselect' diff --git a/lua/kickstart/plugins/autoformat.lua b/lua/kickstart/plugins/autoformat.lua index 855f350f319..bc56b15b027 100644 --- a/lua/kickstart/plugins/autoformat.lua +++ b/lua/kickstart/plugins/autoformat.lua @@ -5,7 +5,6 @@ return { 'neovim/nvim-lspconfig', - config = function() -- Switch for controlling whether you want autoformatting. -- Use :KickstartFormatToggle to toggle autoformatting on or off @@ -29,9 +28,11 @@ return { return _augroups[client.id] end + -- Whenever an LSP attaches to a buffer, we will run this function. + -- + -- See `:help LspAttach` for more information about this autocmd event. vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('kickstart-lsp-attach-format', { clear = true }), - -- This is where we attach the autoformatting for reasonable clients callback = function(args) local client_id = args.data.client_id @@ -49,6 +50,8 @@ return { return end + -- Create an autocmd that will run *before* we save the buffer. + -- Run the formatting command for the LSP that has just attached. vim.api.nvim_create_autocmd('BufWritePre', { group = get_augroup(client), buffer = bufnr, @@ -57,7 +60,12 @@ return { return end - vim.lsp.buf.format { async = false } + vim.lsp.buf.format { + async = false, + filter = function(c) + return c.id == client.id + end, + } end, }) end, From d8784b62db6d6371b13895b2b38506ac1c1d2adc Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Fri, 17 Feb 2023 10:45:02 -0500 Subject: [PATCH 21/21] opt -> opts, ty folke part 2 --- init.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/init.lua b/init.lua index a3cf24bb0e0..13db1393a0a 100644 --- a/init.lua +++ b/init.lua @@ -83,7 +83,7 @@ require('lazy').setup({ 'williamboman/mason-lspconfig.nvim', -- Useful status updates for LSP - -- NOTE: `opt = {}` is the same as calling `require('fidget').setup({})` + -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` { 'j-hui/fidget.nvim', opts = {} }, -- Additional lua configuration, makes nvim stuff amazing! @@ -97,10 +97,10 @@ require('lazy').setup({ }, -- Useful plugin to show you pending keybinds. - { 'folke/which-key.nvim', opt = {} }, + { 'folke/which-key.nvim', opts = {} }, { -- Adds git releated signs to the gutter, as well as utilities for managing changes 'lewis6991/gitsigns.nvim', - opt = { + opts = { -- See `:help gitsigns.txt` signs = { add = { text = '+' }, @@ -123,7 +123,7 @@ require('lazy').setup({ { -- Set lualine as statusline 'nvim-lualine/lualine.nvim', -- See `:help lualine.txt` - opt = { + opts = { options = { icons_enabled = false, theme = 'onedark', @@ -137,14 +137,14 @@ require('lazy').setup({ 'lukas-reineke/indent-blankline.nvim', -- Enable `lukas-reineke/indent-blankline.nvim` -- See `:help indent_blankline.txt` - opt = { + opts = { char = '┊', show_trailing_blankline_indent = false, }, }, -- "gc" to comment visual regions/lines - { 'numToStr/Comment.nvim', opt = {} }, + { 'numToStr/Comment.nvim', opts = {} }, -- Fuzzy Finder (files, lsp, etc) { 'nvim-telescope/telescope.nvim', version = '*', dependencies = { 'nvim-lua/plenary.nvim' } },