From 1a2a96be4c68c99abd1dc1aef40207753fd56362 Mon Sep 17 00:00:00 2001
From: TJ DeVries <devries.timothyj@gmail.com>
Date: Wed, 15 Feb 2023 16:23:05 -0500
Subject: [PATCH] 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', '<F5>', require('dap').continue)
+      vim.keymap.set('n', '<F1>', require('dap').step_into)
+      vim.keymap.set('n', '<F2>', require('dap').step_over)
+      vim.keymap.set('n', '<F3>', require('dap').step_out)
+      vim.keymap.set('n', '<leader>b', require('dap').toggle_breakpoint)
+      vim.keymap.set('n', '<leader>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,
+  },
+}