diff --git a/init.lua b/init.lua index 4e6738a..7d0b86f 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 87f9159..0000000 --- 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 0000000..ca5807f --- /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 0000000..a618452 --- /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, + }, +}