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 1b83131b..227f0266 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 ac291dad..5fbe21d3 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 } + { + 'nvim-telescope/telescope-fzf-native.nvim', + build = 'make', + cond = function() + return vim.fn.executable 'make' == 1 + end, + }, - -- 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 - --- 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 5fbe21d3..c690893c 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 c690893c..4cb5f6f0 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 4cc00b1b..0c270171 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 4cb5f6f0..33cd4c21 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 0c270171..ff70f778 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 33cd4c21..4e6738a2 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 00000000..7519c2ce --- /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 7519c2ce..87f9159d 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 4e6738a2..7d0b86f3 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 87f9159d..00000000 --- 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 00000000..ca5807f1 --- /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 00000000..a6184527 --- /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 | 13 +-- lua/custom/plugins/init.lua | 3 + lua/kickstart/plugins/debug.lua | 139 +++++++++++++++++--------------- 5 files changed, 112 insertions(+), 70 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 00000000..cb87ac3f --- /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 00000000..687ae772 --- /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 7d0b86f3..f47d04f5 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'), + -- Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart + -- require 'kickstart.plugins.autoformat', + -- require 'kickstart.plugins.debug', - -- TODO: - -- { import = 'kickstart.plugins' }, - -- { import = 'custom.plugins' }, + -- 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 00000000..cdc244c9 --- /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 a6184527..33e39807 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, - - -- 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, + -- Add your own debuggers here + 'leoluz/nvim-dap-go', }, + + 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' + + 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', '', 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 + + -- 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 | 124 +++++++++++++++++++++++++++--------------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index ff70f778..5ed5900d 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,82 @@ +# 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. +### Configuration + +* 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` + +#### Example: Adding an autopairs plugin + +In the file: `lua/custom/plugins/autopairs.lua`, add: + +```lua +-- File: lua/custom/plugins/autopairs.lua + +return { + "windwp/nvim-autopairs", + config = function() + require("nvim-autopairs").setup {} + end, +} +``` + +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 + +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 + +vim.keymap.set('n', 'sr', require('telescope.builtin').resume, { desc = '[S]earch [R]esume' }) +``` + +### Contribution + +Pull-requests are welcome. The goal of this repo is not to create a Neovim configuration framework, but to offer a starting template that shows, by example, available features in Neovim. Some things that will not be included: + +* Custom language server configuration (null-ls templates) +* Theming beyond a default colorscheme necessary for LSP highlight groups + +Each PR, especially those which increase the line count, should have a description as to why the PR is necessary. + +### 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/` +* 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` @@ -42,52 +91,3 @@ This requires: 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. - -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 `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. - -```lua -return function(use) - use({ - "folke/which-key.nvim", - config = function() - require("which-key").setup({}) - end - }) -end -``` - -#### Example `defaults.lua` - -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`). - -```lua -vim.opt.relativenumber = true - -vim.keymap.set('n', 'sr', require('telescope.builtin').resume, { desc = '[S]earch [R]esume' }) -``` - -### Contribution - -Pull-requests are welcome. The goal of this repo is not to create a Neovim configuration framework, but to offer a starting template that shows, by example, available features in Neovim. Some things that will not be included: - -* 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. - -### 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/` -* 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 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 5ed5900d..93d67ada 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 93d67ada..243fb0c9 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 243fb0c9..9028d19a 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 9028d19a..07a17cd2 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 07a17cd2..c3c11443 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 f47d04f5..e4beb936 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 e4beb936..969f5733 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 | 218 ++++++++++++++++----------- lua/custom/plugins/init.lua | 2 + lua/kickstart/plugins/autoformat.lua | 5 + lua/kickstart/plugins/debug.lua | 17 ++- 6 files changed, 152 insertions(+), 125 deletions(-) delete mode 100644 Dockerfile diff --git a/.gitignore b/.gitignore index 227f0266..ea93edad 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 5c303b48..00000000 --- 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 969f5733..20a5e36d 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,18 +65,104 @@ 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' }, }, + { -- 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, + }, + + { -- 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, + }, + + { -- 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. Make sure you have the system + -- requirements installed. + { + 'nvim-telescope/telescope-fzf-native.nvim', + build = 'make', + cond = function() + return vim.fn.executable 'make' == 1 + end, + }, + { -- Highlight, edit, and navigate code 'nvim-treesitter/nvim-treesitter', dependencies = { @@ -54,45 +173,13 @@ 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', - 'lewis6991/gitsigns.nvim', - - '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) - { '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 - { - 'nvim-telescope/telescope-fzf-native.nvim', - build = 'make', - cond = function() - return vim.fn.executable 'make' == 1 - end, - }, - - -- Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart + -- 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 cdc244c9..be0eb9d8 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 ca5807f1..855f350f 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 33e39807..0b68c43b 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 c3c11443..32f58dfb 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 20a5e36d..a3cf24bb 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 855f350f..bc56b15b 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 a3cf24bb..13db1393 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' } },