From 56f0d00f96cd9c5c3cc8882d1d090ef4bf8dc30e Mon Sep 17 00:00:00 2001
From: Alexander Gehrke <github@qwertyuiop.de>
Date: Fri, 15 Mar 2024 15:15:26 +0100
Subject: [PATCH] Run formatter on all lua files

---
 after/ftplugin/java.lua     |  16 +-
 after/plugin/treesitter.lua |  30 ++--
 after/plugin/trouble.lua    |  18 +-
 ftdetect/extensions.lua     |  29 +--
 ftdetect/sc.lua             |  14 +-
 lua/common.lua              | 114 ++++++------
 lua/debug.lua               |  48 ++---
 lua/plugins/beamer.lua      |  10 +-
 lua/plugins/chroma.lua      |  12 +-
 lua/plugins/deepl.lua       |  13 +-
 lua/plugins/exttools.lua    |   1 -
 lua/plugins/fugitive.lua    |   4 +-
 lua/plugins/gen.lua         |   7 +
 lua/plugins/git.lua         |  14 ++
 lua/plugins/hover.lua       |  40 ++---
 lua/plugins/init.lua        |  16 +-
 lua/plugins/lspconfig.lua   | 346 ++++++++++++++++++------------------
 lua/plugins/lush.lua        |   2 +-
 lua/plugins/markdown.lua    |   4 +-
 lua/plugins/metals.lua      | 108 +++++------
 lua/plugins/tabline.lua     | 108 +++++------
 lua/plugins/telescope.lua   | 104 +++++------
 lua/plugins/treesitter.lua  | 212 +++++++++++-----------
 plugin/centerscroll.lua     |  14 +-
 plugin/scaladeps.lua        |   5 +-
 25 files changed, 659 insertions(+), 630 deletions(-)
 create mode 100644 lua/plugins/gen.lua
 create mode 100644 lua/plugins/git.lua

diff --git a/after/ftplugin/java.lua b/after/ftplugin/java.lua
index f039aac..9a8bec7 100644
--- a/after/ftplugin/java.lua
+++ b/after/ftplugin/java.lua
@@ -5,18 +5,18 @@ local bmap = vim.keymap.set
 local map_opt = { silent = true, buffer = true }
 
 bmap('n', '<leader>ev', function() require('jdtls').extract_variable() end,
-	{ silent = true, buffer = true, desc = 'Extract variable'})
+	{ silent = true, buffer = true, desc = 'Extract variable' })
 bmap('v', '<leader>ev', function() require('jdtls').extract_variable(true) end,
-	{ silent = true, buffer = true, desc = 'Extract variable'})
+	{ silent = true, buffer = true, desc = 'Extract variable' })
 bmap('n', '<leader>ec', function() require('jdtls').extract_constant() end,
-	{ silent = true, buffer = true, desc = 'Extract constant'})
+	{ silent = true, buffer = true, desc = 'Extract constant' })
 bmap('v', '<leader>ec', function() require('jdtls').extract_constant(true) end,
-	{ silent = true, buffer = true, desc = 'Extract constant'})
+	{ silent = true, buffer = true, desc = 'Extract constant' })
 bmap('v', '<leader>em', function() require('jdtls').extract_method(true) end,
-	{ silent = true, buffer = true, desc = 'Extract method'})
+	{ silent = true, buffer = true, desc = 'Extract method' })
 bmap('n', '<leader>ro', function() require('jdtls').organize_imports() end,
-	{ silent = true, buffer = true, desc = 'Organize imports'})
+	{ silent = true, buffer = true, desc = 'Organize imports' })
 bmap('n', '<leader>tc', function() require 'jdtls'.test_class() end,
-	{ silent = true, buffer = true, desc = 'Test class'})
+	{ silent = true, buffer = true, desc = 'Test class' })
 bmap('n', '<leader>tm', function() require 'jdtls'.test_nearest_method() end,
-	{ silent = true, buffer = true, desc = 'Test nearest method'})
+	{ silent = true, buffer = true, desc = 'Test nearest method' })
diff --git a/after/plugin/treesitter.lua b/after/plugin/treesitter.lua
index 4d9554a..3271d2e 100644
--- a/after/plugin/treesitter.lua
+++ b/after/plugin/treesitter.lua
@@ -1,16 +1,16 @@
-require'nvim-treesitter.configs'.setup {
-  ensure_installed = { "typescript" },
-  sync_install = true,
-  auto_install = true,
-  highlight = {
-    enable = true,
-    -- Setting this to true will run `:h syntax` and tree-sitter at the same time.
-    -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation).
-    -- Using this option may slow down your editor, and you may see some duplicate highlights.
-    -- Instead of true it can also be a list of languages
-    additional_vim_regex_highlighting = false,
-  },
-  indent = {
-    enable = true
-  },
+require 'nvim-treesitter.configs'.setup {
+	ensure_installed = { "typescript" },
+	sync_install = true,
+	auto_install = true,
+	highlight = {
+		enable = true,
+		-- Setting this to true will run `:h syntax` and tree-sitter at the same time.
+		-- Set this to `true` if you depend on 'syntax' being enabled (like for indentation).
+		-- Using this option may slow down your editor, and you may see some duplicate highlights.
+		-- Instead of true it can also be a list of languages
+		additional_vim_regex_highlighting = false,
+	},
+	indent = {
+		enable = true
+	},
 }
diff --git a/after/plugin/trouble.lua b/after/plugin/trouble.lua
index a979067..e663d78 100644
--- a/after/plugin/trouble.lua
+++ b/after/plugin/trouble.lua
@@ -1,11 +1,11 @@
 require("trouble").setup {
-  -- your configuration comes here
-  -- or leave it empty to use the default settings
-  -- refer to the configuration section below
+	-- your configuration comes here
+	-- or leave it empty to use the default settings
+	-- refer to the configuration section below
 }
-vim.api.nvim_set_keymap("n", "<leader>xx", "<cmd>Trouble<cr>", {silent = true, noremap = true})
-vim.api.nvim_set_keymap("n", "<leader>xw", "<cmd>Trouble workspace_diagnostics<cr>", {silent = true, noremap = true})
-vim.api.nvim_set_keymap("n", "<leader>xd", "<cmd>Trouble document_diagnostics<cr>", {silent = true, noremap = true})
-vim.api.nvim_set_keymap("n", "<leader>xl", "<cmd>Trouble loclist<cr>", {silent = true, noremap = true})
-vim.api.nvim_set_keymap("n", "<leader>xq", "<cmd>Trouble quickfix<cr>", {silent = true, noremap = true})
-vim.api.nvim_set_keymap("n", "gR", "<cmd>Trouble lsp_references<cr>", {silent = true, noremap = true})
+vim.api.nvim_set_keymap("n", "<leader>xx", "<cmd>Trouble<cr>", { silent = true, noremap = true })
+vim.api.nvim_set_keymap("n", "<leader>xw", "<cmd>Trouble workspace_diagnostics<cr>", { silent = true, noremap = true })
+vim.api.nvim_set_keymap("n", "<leader>xd", "<cmd>Trouble document_diagnostics<cr>", { silent = true, noremap = true })
+vim.api.nvim_set_keymap("n", "<leader>xl", "<cmd>Trouble loclist<cr>", { silent = true, noremap = true })
+vim.api.nvim_set_keymap("n", "<leader>xq", "<cmd>Trouble quickfix<cr>", { silent = true, noremap = true })
+vim.api.nvim_set_keymap("n", "gR", "<cmd>Trouble lsp_references<cr>", { silent = true, noremap = true })
diff --git a/ftdetect/extensions.lua b/ftdetect/extensions.lua
index c3b69da..50ad492 100644
--- a/ftdetect/extensions.lua
+++ b/ftdetect/extensions.lua
@@ -1,19 +1,20 @@
 vim.filetype.add({
-  extension = {
-  },
-  filename = {
-    ['.scalafmt.conf'] = 'hocon',
-    ['kitty.conf'] = 'kitty',
-    ['neomuttrc'] = 'neomutt',
-    ['template'] = 'sh',
-    ['mbsyncrc'] = 'mbsyncrc',
-  },
-  pattern = {
-    ['${XDG_CONFIG_HOME}/kitty/*.conf'] = 'kitty',
-    ['${XDG_CONFIG_HOME}/kitty/*.session'] = 'kitty-session',
-  },
+	extension = {
+		['vtt'] = 'vtt',
+	},
+	filename = {
+		['.scalafmt.conf'] = 'hocon',
+		['kitty.conf'] = 'kitty',
+		['neomuttrc'] = 'neomutt',
+		['template'] = 'sh',
+		['mbsyncrc'] = 'mbsyncrc',
+	},
+	pattern = {
+		['${XDG_CONFIG_HOME}/kitty/*.conf'] = 'kitty',
+		['${XDG_CONFIG_HOME}/kitty/*.session'] = 'kitty-session',
+	},
 })
 
 -- au BufRead,BufNewFile *.ttl set filetype=rdf-turtle
 -- au! BufNewFile,BufRead *.xwiki   set ft=xwiki syntax=xwiki
--- 
+--
diff --git a/ftdetect/sc.lua b/ftdetect/sc.lua
index 422a4f8..6d70f77 100644
--- a/ftdetect/sc.lua
+++ b/ftdetect/sc.lua
@@ -7,13 +7,13 @@ vim.filetype.add({
 		sc = function(path, bufnr)
 			for _, line in ipairs(vim.filetype.getlines(bufnr, 1, 25)) do
 				if
-					vim.filetype.findany(line, {
-						'var%s<',
-						'classvar%s<',
-						'%^this.*',
-						'%+%s%w*%s{',
-						'%*ar%s',
-					})
+						vim.filetype.findany(line, {
+							'var%s<',
+							'classvar%s<',
+							'%^this.*',
+							'%+%s%w*%s{',
+							'%*ar%s',
+						})
 				then
 					return 'supercollider'
 				end
diff --git a/lua/common.lua b/lua/common.lua
index 7a25f61..97b43ca 100644
--- a/lua/common.lua
+++ b/lua/common.lua
@@ -1,61 +1,61 @@
 -- Adapted from https://github.com/LazyVim/LazyVim/
 -- SPDX-License-Identifier: Apache-2.0
 return {
-  icons = {
-    dap = {
-      Stopped = { "󰁕 ", "DiagnosticWarn", "DapStoppedLine" },
-      Breakpoint = " ",
-      BreakpointCondition = " ",
-      BreakpointRejected = { " ", "DiagnosticError" },
-      LogPoint = ".>",
-    },
-    diagnostics = {
-      Error = " ",
-      Warn = " ",
-      Hint = " ",
-      Info = " ",
-    },
-    git = {
-      added = " ",
-      modified = " ",
-      removed = " ",
-    },
-    kinds = {
-      Array = " ",
-      Boolean = " ",
-      Class = " ",
-      Color = " ",
-      Constant = " ",
-      Constructor = " ",
-      Copilot = " ",
-      Enum = " ",
-      EnumMember = " ",
-      Event = " ",
-      Field = " ",
-      File = " ",
-      Folder = " ",
-      Function = " ",
-      Interface = " ",
-      Key = " ",
-      Keyword = " ",
-      Method = " ",
-      Module = " ",
-      Namespace = " ",
-      Null = " ",
-      Number = " ",
-      Object = " ",
-      Operator = " ",
-      Package = " ",
-      Property = " ",
-      Reference = " ",
-      Snippet = " ",
-      String = " ",
-      Struct = " ",
-      Text = " ",
-      TypeParameter = " ",
-      Unit = " ",
-      Value = " ",
-      Variable = " ",
-    },
-  },
+	icons = {
+		dap = {
+			Stopped = { "󰁕 ", "DiagnosticWarn", "DapStoppedLine" },
+			Breakpoint = " ",
+			BreakpointCondition = " ",
+			BreakpointRejected = { " ", "DiagnosticError" },
+			LogPoint = ".>",
+		},
+		diagnostics = {
+			Error = " ",
+			Warn = " ",
+			Hint = " ",
+			Info = " ",
+		},
+		git = {
+			added = " ",
+			modified = " ",
+			removed = " ",
+		},
+		kinds = {
+			Array = " ",
+			Boolean = " ",
+			Class = " ",
+			Color = " ",
+			Constant = " ",
+			Constructor = " ",
+			Copilot = " ",
+			Enum = " ",
+			EnumMember = " ",
+			Event = " ",
+			Field = " ",
+			File = " ",
+			Folder = " ",
+			Function = " ",
+			Interface = " ",
+			Key = " ",
+			Keyword = " ",
+			Method = " ",
+			Module = " ",
+			Namespace = " ",
+			Null = " ",
+			Number = " ",
+			Object = " ",
+			Operator = " ",
+			Package = " ",
+			Property = " ",
+			Reference = " ",
+			Snippet = " ",
+			String = " ",
+			Struct = " ",
+			Text = " ",
+			TypeParameter = " ",
+			Unit = " ",
+			Value = " ",
+			Variable = " ",
+		},
+	},
 }
diff --git a/lua/debug.lua b/lua/debug.lua
index e40b4af..63bc743 100644
--- a/lua/debug.lua
+++ b/lua/debug.lua
@@ -1,34 +1,34 @@
 -- Setup nvim-cmp.
-local cmp = require'cmp'
+local cmp = require 'cmp'
 
 cmp.setup({
-  snippet = {
-    expand = function(args)
-      --vim.fn["vsnip#anonymous"](args.body)
-      require('luasnip').lsp_expand(args.body)
-    end,
-  },
-  mapping = {
-    ['<C-d>'] = cmp.mapping.scroll_docs(-4),
-    ['<C-f>'] = cmp.mapping.scroll_docs(4),
-    ['<C-Space>'] = cmp.mapping.complete(),
-    ['<C-e>'] = cmp.mapping.close(),
-    ['<CR>'] = cmp.mapping.confirm({ select = true }),
-  },
-  sources = {
-    { name = 'nvim_lsp' },
+	snippet = {
+		expand = function(args)
+			--vim.fn["vsnip#anonymous"](args.body)
+			require('luasnip').lsp_expand(args.body)
+		end,
+	},
+	mapping = {
+		['<C-d>'] = cmp.mapping.scroll_docs(-4),
+		['<C-f>'] = cmp.mapping.scroll_docs(4),
+		['<C-Space>'] = cmp.mapping.complete(),
+		['<C-e>'] = cmp.mapping.close(),
+		['<CR>'] = cmp.mapping.confirm({ select = true }),
+	},
+	sources = {
+		{ name = 'nvim_lsp' },
 
-    -- For vsnip user.
-    { name = 'vsnip' },
+		-- For vsnip user.
+		{ name = 'vsnip' },
 
-    -- For luasnip user.
-    -- { name = 'luasnip' },
+		-- For luasnip user.
+		-- { name = 'luasnip' },
 
-    -- For ultisnips user.
-    -- { name = 'ultisnips' },
+		-- For ultisnips user.
+		-- { name = 'ultisnips' },
 
-    { name = 'buffer' },
-  }
+		{ name = 'buffer' },
+	}
 })
 
 -- Setup lsp.
diff --git a/lua/plugins/beamer.lua b/lua/plugins/beamer.lua
index b3fa6cd..fb0cf3f 100644
--- a/lua/plugins/beamer.lua
+++ b/lua/plugins/beamer.lua
@@ -1,7 +1,7 @@
 return {
-  'uloco/bluloco.nvim',
-  dependencies = { 'rktjmp/lush.nvim' },
-  opts = {
-    italics = true,
-  },
+	'uloco/bluloco.nvim',
+	dependencies = { 'rktjmp/lush.nvim' },
+	opts = {
+		italics = true,
+	},
 }
diff --git a/lua/plugins/chroma.lua b/lua/plugins/chroma.lua
index 470d7fb..49bd750 100644
--- a/lua/plugins/chroma.lua
+++ b/lua/plugins/chroma.lua
@@ -1,8 +1,8 @@
 return {
-  'crater2150/vim-theme-chroma',
-  dev = true,
-  lazy = false,
-  branch = 'lush',
-  priority = 1000,
-  config = function() vim.cmd.colorscheme("chroma") end
+	'crater2150/vim-theme-chroma',
+	dev = true,
+	lazy = false,
+	branch = 'lush',
+	priority = 1000,
+	config = function() vim.cmd.colorscheme("chroma") end
 }
diff --git a/lua/plugins/deepl.lua b/lua/plugins/deepl.lua
index 0e2c2a6..65d0302 100644
--- a/lua/plugins/deepl.lua
+++ b/lua/plugins/deepl.lua
@@ -1,15 +1,16 @@
-return { 'ryicoh/deepl.vim',
+return {
+	'ryicoh/deepl.vim',
 	keys = {
-
 		{ '<leader><C-e>', function() vim.fn['deepl#v']("EN") end, mode = 'v' },
 		{ '<leader><C-d>', function() vim.fn['deepl#v']("DE") end, mode = 'v' },
 	},
-	dependencies = {{ 'tsuyoshicho/vim-pass',
-		init = function ()
+	dependencies = { {
+		'tsuyoshicho/vim-pass',
+		init = function()
 			vim.g.pass_use_agent = 1
 		end
-	}},
-	config = function ()
+	} },
+	config = function()
 		vim.g['deepl#endpoint'] = "https://api-free.deepl.com/v2/translate"
 		vim.g['deepl#auth_key'] = vim.fn['pass#get']('web/deepl.com', 'apikey')
 	end
diff --git a/lua/plugins/exttools.lua b/lua/plugins/exttools.lua
index 2ac70ac..f288631 100644
--- a/lua/plugins/exttools.lua
+++ b/lua/plugins/exttools.lua
@@ -1,6 +1,5 @@
 return {
 	'mfussenegger/nvim-lint',
-
 	{
 		'mhartington/formatter.nvim',
 		opts = function()
diff --git a/lua/plugins/fugitive.lua b/lua/plugins/fugitive.lua
index db4be56..b986ebf 100644
--- a/lua/plugins/fugitive.lua
+++ b/lua/plugins/fugitive.lua
@@ -1,3 +1 @@
-return {
-  'tpope/vim-fugitive'
-}
+return { 'tpope/vim-fugitive' }
diff --git a/lua/plugins/gen.lua b/lua/plugins/gen.lua
new file mode 100644
index 0000000..6336f72
--- /dev/null
+++ b/lua/plugins/gen.lua
@@ -0,0 +1,7 @@
+return {
+	"David-Kunz/gen.nvim",
+	opts = {
+		model = "mistral", -- The default model to use.
+		init = false,
+	}
+}
diff --git a/lua/plugins/git.lua b/lua/plugins/git.lua
new file mode 100644
index 0000000..1b183d5
--- /dev/null
+++ b/lua/plugins/git.lua
@@ -0,0 +1,14 @@
+return {
+	'lambdalisue/gina.vim',
+	'gisphm/vim-gitignore',
+	'sjl/splice.vim',
+	{
+		'lewis6991/gitsigns.nvim',
+		config = {
+			signs = {
+				add    = { text = '▌' },
+				change = { text = '▐' },
+			},
+		}
+	},
+}
diff --git a/lua/plugins/hover.lua b/lua/plugins/hover.lua
index 111ec84..7cb1652 100644
--- a/lua/plugins/hover.lua
+++ b/lua/plugins/hover.lua
@@ -1,23 +1,23 @@
 return {
-    "lewis6991/hover.nvim",
-    config = function()
-        require("hover").setup {
-            init = function()
-                require("hover.providers.lsp")
-                require('hover.providers.gh')
-                require('hover.providers.man')
-            end,
-            preview_opts = {
-                border = nil
-            },
-            -- Whether the contents of a currently open hover window should be moved
-            -- to a :h preview-window when pressing the hover keymap.
-            preview_window = false,
-            title = true
-        }
+	"lewis6991/hover.nvim",
+	config = function()
+		require("hover").setup {
+			init = function()
+				require("hover.providers.lsp")
+				require('hover.providers.gh')
+				require('hover.providers.man')
+			end,
+			preview_opts = {
+				border = nil
+			},
+			-- Whether the contents of a currently open hover window should be moved
+			-- to a :h preview-window when pressing the hover keymap.
+			preview_window = false,
+			title = true
+		}
 
-        -- Setup keymaps
-        vim.keymap.set("n", "K", require("hover").hover, {desc = "hover.nvim"})
-        vim.keymap.set("n", "gK", require("hover").hover_select, {desc = "hover.nvim (select)"})
-    end
+		-- Setup keymaps
+		vim.keymap.set("n", "K", require("hover").hover, { desc = "hover.nvim" })
+		vim.keymap.set("n", "gK", require("hover").hover_select, { desc = "hover.nvim (select)" })
+	end
 }
diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua
index d5e96e4..e2449dd 100644
--- a/lua/plugins/init.lua
+++ b/lua/plugins/init.lua
@@ -8,21 +8,24 @@ return {
 	'tpope/vim-commentary',
 	'tpope/vim-sleuth',
 
-	{"chrisgrieser/nvim-genghis", dependencies = "stevearc/dressing.nvim"},
+	{ "chrisgrieser/nvim-genghis", dependencies = "stevearc/dressing.nvim" },
 
 	-- ic / ac
-	{'glts/vim-textobj-comment',
+	{
+		'glts/vim-textobj-comment',
 		dependencies = { 'kana/vim-textobj-user' }
 	},
 	-- ii / ai
 	'michaeljsmith/vim-indent-object',
 	'neovim/nvim-lspconfig',
 
-	{ 'nvim-telescope/telescope.nvim',
+	{
+		'nvim-telescope/telescope.nvim',
 		dependencies = { 'nvim-lua/plenary.nvim' }
 	},
 
-	{ 'ray-x/lsp_signature.nvim',
+	{
+		'ray-x/lsp_signature.nvim',
 		config = function()
 			require('lsp_signature').setup({})
 		end
@@ -36,9 +39,10 @@ return {
 	'lambdalisue/suda.vim',
 	'jamessan/vim-gnupg',
 
-	{'lervag/vimtex',
+	{
+		'lervag/vimtex',
 		init = function()
-			vim.g.tex_conceal="agm"
+			vim.g.tex_conceal = "agm"
 			vim.g.vimtex_quickfix_ignorefilters = { 'overfull', 'underfull' }
 			vim.g.vimtex_syntax_enabled = 0
 		end,
diff --git a/lua/plugins/lspconfig.lua b/lua/plugins/lspconfig.lua
index 814cae2..51ce1d2 100644
--- a/lua/plugins/lspconfig.lua
+++ b/lua/plugins/lspconfig.lua
@@ -1,183 +1,185 @@
 return {
-  -- lspconfig
-  {
-    "neovim/nvim-lspconfig",
-    event = { "BufReadPre", "BufNewFile" },
-    dependencies = {
-      { "folke/neoconf.nvim", cmd = "Neoconf", config = true },
-      { "folke/neodev.nvim",  opts = {} },
-      "mason.nvim",
-      "williamboman/mason-lspconfig.nvim",
-      'nvim-lua/lsp-status.nvim',
-      "hrsh7th/cmp-nvim-lsp",
-    },
-    ---@class PluginLspOpts
-    opts = function() return {
-      -- options for vim.diagnostic.config()
-      diagnostics = {
-        underline = true,
-        update_in_insert = false,
-        virtual_text = {
-          spacing = 4,
-          source = "if_many",
-          prefix = "●",
-          -- this will set set the prefix to a function that returns the diagnostics icon based on the severity
-          -- this only works on a recent 0.10.0 build. Will be set to "●" when not supported
-          -- prefix = "icons",
-        },
-        severity_sort = true,
-      },
-      -- add any global capabilities here
-      capabilities = { require'lsp-status'.capabilities },
-      servers = {
-        jsonls = {},
-        lua_ls = {
-          settings = {
-            Lua = {
-              workspace = {
-                checkThirdParty = false,
-              },
-              completion = {
-                callSnippet = "Replace",
-              },
-              telemetry = { enable = false },
-            },
-          },
-        },
-        pylsp = {
-          settings = {
-            pylsp = {
-              plugins = {
-                rope_autoimport = { enabled = true, },
-                isort = { enabled = true, },
-              }
-            }
-          }
-        }
-      },
-      -- you can do any additional lsp server setup here
-      -- return true if you don't want this server to be setup with lspconfig
-      ---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
-      setup = {
-        -- example to setup with typescript.nvim
-        -- tsserver = function(_, opts)
-        --   require("typescript").setup({ server = opts })
-        --   return true
-        -- end,
-        -- Specify * to use this function as a fallback for any server
-        -- ["*"] = function(server, opts) end,
-      },
-    } end,
-    ---@param opts PluginLspOpts
-    config = function(_, opts)
-      -- diagnostics
-      for name, icon in pairs(require("common").icons.diagnostics) do
-        name = "DiagnosticSign" .. name
-        vim.fn.sign_define(name, { text = icon, texthl = name, numhl = "" })
-      end
+	-- lspconfig
+	{
+		"neovim/nvim-lspconfig",
+		event = { "BufReadPre", "BufNewFile" },
+		dependencies = {
+			{ "folke/neoconf.nvim", cmd = "Neoconf", config = true },
+			{ "folke/neodev.nvim",  opts = {} },
+			"mason.nvim",
+			"williamboman/mason-lspconfig.nvim",
+			'nvim-lua/lsp-status.nvim',
+			"hrsh7th/cmp-nvim-lsp",
+		},
+		---@class PluginLspOpts
+		opts = function()
+			return {
+				-- options for vim.diagnostic.config()
+				diagnostics = {
+					underline = true,
+					update_in_insert = false,
+					virtual_text = {
+						spacing = 4,
+						source = "if_many",
+						prefix = "●",
+						-- this will set set the prefix to a function that returns the diagnostics icon based on the severity
+						-- this only works on a recent 0.10.0 build. Will be set to "●" when not supported
+						-- prefix = "icons",
+					},
+					severity_sort = true,
+				},
+				-- add any global capabilities here
+				capabilities = { require 'lsp-status'.capabilities },
+				servers = {
+					jsonls = {},
+					lua_ls = {
+						settings = {
+							Lua = {
+								workspace = {
+									checkThirdParty = false,
+								},
+								completion = {
+									callSnippet = "Replace",
+								},
+								telemetry = { enable = false },
+							},
+						},
+					},
+					pylsp = {
+						settings = {
+							pylsp = {
+								plugins = {
+									rope_autoimport = { enabled = true, },
+									isort = { enabled = true, },
+								}
+							}
+						}
+					}
+				},
+				-- you can do any additional lsp server setup here
+				-- return true if you don't want this server to be setup with lspconfig
+				---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
+				setup = {
+					-- example to setup with typescript.nvim
+					-- tsserver = function(_, opts)
+					--   require("typescript").setup({ server = opts })
+					--   return true
+					-- end,
+					-- Specify * to use this function as a fallback for any server
+					-- ["*"] = function(server, opts) end,
+				},
+			}
+		end,
+		---@param opts PluginLspOpts
+		config = function(_, opts)
+			-- diagnostics
+			for name, icon in pairs(require("common").icons.diagnostics) do
+				name = "DiagnosticSign" .. name
+				vim.fn.sign_define(name, { text = icon, texthl = name, numhl = "" })
+			end
 
-      if type(opts.diagnostics.virtual_text) == "table" and opts.diagnostics.virtual_text.prefix == "icons" then
-        opts.diagnostics.virtual_text.prefix = vim.fn.has("nvim-0.10.0") == 0 and "●"
-            or function(diagnostic)
-              local icons = require("common").icons.diagnostics
-              for d, icon in pairs(icons) do
-                if diagnostic.severity == vim.diagnostic.severity[d:upper()] then
-                  return icon
-                end
-              end
-            end
-      end
+			if type(opts.diagnostics.virtual_text) == "table" and opts.diagnostics.virtual_text.prefix == "icons" then
+				opts.diagnostics.virtual_text.prefix = vim.fn.has("nvim-0.10.0") == 0 and "●"
+						or function(diagnostic)
+							local icons = require("common").icons.diagnostics
+							for d, icon in pairs(icons) do
+								if diagnostic.severity == vim.diagnostic.severity[d:upper()] then
+									return icon
+								end
+							end
+						end
+			end
 
-      vim.diagnostic.config(vim.deepcopy(opts.diagnostics))
+			vim.diagnostic.config(vim.deepcopy(opts.diagnostics))
 
-      local servers = opts.servers
-      local capabilities = vim.tbl_deep_extend(
-        "force",
-        {},
-        vim.lsp.protocol.make_client_capabilities(),
-        require("cmp_nvim_lsp").default_capabilities(),
-        opts.capabilities or {}
-      )
+			local servers = opts.servers
+			local capabilities = vim.tbl_deep_extend(
+				"force",
+				{},
+				vim.lsp.protocol.make_client_capabilities(),
+				require("cmp_nvim_lsp").default_capabilities(),
+				opts.capabilities or {}
+			)
 
-      local function setup(server)
-        local server_opts = vim.tbl_deep_extend("force", {
-          capabilities = vim.deepcopy(capabilities),
-        }, servers[server] or {})
+			local function setup(server)
+				local server_opts = vim.tbl_deep_extend("force", {
+					capabilities = vim.deepcopy(capabilities),
+				}, servers[server] or {})
 
-        if opts.setup[server] then
-          if opts.setup[server](server, server_opts) then
-            return
-          end
-        elseif opts.setup["*"] then
-          if opts.setup["*"](server, server_opts) then
-            return
-          end
-        end
-        require("lspconfig")[server].setup(server_opts)
-      end
+				if opts.setup[server] then
+					if opts.setup[server](server, server_opts) then
+						return
+					end
+				elseif opts.setup["*"] then
+					if opts.setup["*"](server, server_opts) then
+						return
+					end
+				end
+				require("lspconfig")[server].setup(server_opts)
+			end
 
-      -- get all the servers that are available thourgh mason-lspconfig
-      local have_mason, mlsp = pcall(require, "mason-lspconfig")
-      local all_mslp_servers = {}
-      if have_mason then
-        all_mslp_servers = vim.tbl_keys(require("mason-lspconfig.mappings.server").lspconfig_to_package)
-      end
+			-- get all the servers that are available thourgh mason-lspconfig
+			local have_mason, mlsp = pcall(require, "mason-lspconfig")
+			local all_mslp_servers = {}
+			if have_mason then
+				all_mslp_servers = vim.tbl_keys(require("mason-lspconfig.mappings.server").lspconfig_to_package)
+			end
 
-      local ensure_installed = {} ---@type string[]
-      for server, server_opts in pairs(servers) do
-        if server_opts then
-          server_opts = server_opts == true and {} or server_opts
-          -- run manual setup if mason=false or if this is a server that cannot be installed with mason-lspconfig
-          if server_opts.mason == false or not vim.tbl_contains(all_mslp_servers, server) then
-            setup(server)
-          else
-            ensure_installed[#ensure_installed + 1] = server
-          end
-        end
-      end
+			local ensure_installed = {} ---@type string[]
+			for server, server_opts in pairs(servers) do
+				if server_opts then
+					server_opts = server_opts == true and {} or server_opts
+					-- run manual setup if mason=false or if this is a server that cannot be installed with mason-lspconfig
+					if server_opts.mason == false or not vim.tbl_contains(all_mslp_servers, server) then
+						setup(server)
+					else
+						ensure_installed[#ensure_installed + 1] = server
+					end
+				end
+			end
 
-      if have_mason then
-        mlsp.setup({ ensure_installed = ensure_installed, handlers = { setup } })
-      end
-    end,
-  },
+			if have_mason then
+				mlsp.setup({ ensure_installed = ensure_installed, handlers = { setup } })
+			end
+		end,
+	},
 
-  -- formatters
-  -- cmdline tools and lsp servers
-  {
-    "williamboman/mason.nvim",
-    cmd = "Mason",
-    opts = {
-      ensure_installed = {
-        "jdtls",
-        "lua-language-server",
-      },
-    },
-    ---@param opts MasonSettings | {ensure_installed: string[]}
-    config = function(_, opts)
-      require("mason").setup(opts)
-      local mr = require("mason-registry")
-      local function ensure_installed()
-        for _, tool in ipairs(opts.ensure_installed) do
-          local p = mr.get_package(tool)
-          if not p:is_installed() then
-            p:install()
-          end
-        end
-      end
-      if mr.refresh then
-        mr.refresh(ensure_installed)
-      else
-        ensure_installed()
-      end
-    end,
-  },
-  'mfussenegger/nvim-jdtls',
-  {'nvim-lua/lsp-status.nvim',
-    config = function(_, opts)
-      local lsp_status = require('lsp-status')
-      lsp_status.register_progress()
-    end
-  }
+	-- formatters
+	-- cmdline tools and lsp servers
+	{
+		"williamboman/mason.nvim",
+		cmd = "Mason",
+		opts = {
+			ensure_installed = {
+				"jdtls",
+				"lua-language-server",
+			},
+		},
+		---@param opts MasonSettings | {ensure_installed: string[]}
+		config = function(_, opts)
+			require("mason").setup(opts)
+			local mr = require("mason-registry")
+			local function ensure_installed()
+				for _, tool in ipairs(opts.ensure_installed) do
+					local p = mr.get_package(tool)
+					if not p:is_installed() then
+						p:install()
+					end
+				end
+			end
+			if mr.refresh then
+				mr.refresh(ensure_installed)
+			else
+				ensure_installed()
+			end
+		end,
+	},
+	'mfussenegger/nvim-jdtls',
+	{
+		'nvim-lua/lsp-status.nvim',
+		config = function(_, opts)
+			local lsp_status = require('lsp-status')
+			lsp_status.register_progress()
+		end
+	}
 }
-
diff --git a/lua/plugins/lush.lua b/lua/plugins/lush.lua
index c4fcc84..78e3086 100644
--- a/lua/plugins/lush.lua
+++ b/lua/plugins/lush.lua
@@ -1,4 +1,4 @@
 return {
 	'rktjmp/lush.nvim',
-  'rktjmp/shipwright.nvim',
+	'rktjmp/shipwright.nvim',
 }
diff --git a/lua/plugins/markdown.lua b/lua/plugins/markdown.lua
index 77a4522..851d7ef 100644
--- a/lua/plugins/markdown.lua
+++ b/lua/plugins/markdown.lua
@@ -1,4 +1,4 @@
 return {
-  'euclio/vim-markdown-composer',
-  build = 'cargo build --release'
+	'euclio/vim-markdown-composer',
+	build = 'cargo build --release'
 }
diff --git a/lua/plugins/metals.lua b/lua/plugins/metals.lua
index 8d7d25b..5e704e5 100644
--- a/lua/plugins/metals.lua
+++ b/lua/plugins/metals.lua
@@ -1,59 +1,59 @@
 return {
-  'scalameta/nvim-metals',
-  dependencies = {
-    'nvim-lua/plenary.nvim',
-    'mfussenegger/nvim-dap',
-    "hrsh7th/cmp-nvim-lsp",
-  },
-  ft = { 'scala', 'sbt' },
-  config = function()
-    local metals_config = require('metals').bare_config()
-    metals_config.init_options.statusBarProvider = "on"
-    metals_config.settings = {
-      showImplicitArguments = true,
-      superMethodLensesEnabled = true,
-    }
-    metals_config.on_attach = function(client, bufnr)
-      require("metals").setup_dap()
-      require("my_lsp").on_attach(client, bufnr)
-    end
-    metals_config.capabilities = require("cmp_nvim_lsp").default_capabilities()
-    -- Debug settings if you're using nvim-dap
-    local dap = require("dap")
-    dap.configurations.scala = {
-      {
-        type = "scala",
-        request = "launch",
-        name = "RunOrTest",
-        metals = {
-          runType = "runOrTestFile",
-          --args = { "firstArg", "secondArg", "thirdArg" }, -- here just as an example
-        },
-      },
-      {
-        type = "scala",
-        request = "launch",
-        name = "Test Target",
-        metals = {
-          runType = "testTarget",
-        },
-      },
-    }
+	'scalameta/nvim-metals',
+	dependencies = {
+		'nvim-lua/plenary.nvim',
+		'mfussenegger/nvim-dap',
+		"hrsh7th/cmp-nvim-lsp",
+	},
+	ft = { 'scala', 'sbt' },
+	config = function()
+		local metals_config = require('metals').bare_config()
+		metals_config.init_options.statusBarProvider = "on"
+		metals_config.settings = {
+			showImplicitArguments = true,
+			superMethodLensesEnabled = true,
+		}
+		metals_config.on_attach = function(client, bufnr)
+			require("metals").setup_dap()
+			require("my_lsp").on_attach(client, bufnr)
+		end
+		metals_config.capabilities = require("cmp_nvim_lsp").default_capabilities()
+		-- Debug settings if you're using nvim-dap
+		local dap = require("dap")
+		dap.configurations.scala = {
+			{
+				type = "scala",
+				request = "launch",
+				name = "RunOrTest",
+				metals = {
+					runType = "runOrTestFile",
+					--args = { "firstArg", "secondArg", "thirdArg" }, -- here just as an example
+				},
+			},
+			{
+				type = "scala",
+				request = "launch",
+				name = "Test Target",
+				metals = {
+					runType = "testTarget",
+				},
+			},
+		}
 
 
-    -- Autocmd that will actually be in charging of starting the whole thing
-    local nvim_metals_group = vim.api.nvim_create_augroup("nvim-metals", { clear = true })
-    vim.api.nvim_create_autocmd("FileType", {
-      -- NOTE: You may or may not want java included here. You will need it if you
-      -- want basic Java support but it may also conflict if you are using
-      -- something like nvim-jdtls which also works on a java filetype autocmd.
-      pattern = { "scala", "sbt" },
-      callback = function()
-        require("metals").initialize_or_attach(metals_config)
-      end,
-      group = nvim_metals_group,
-    })
+		-- Autocmd that will actually be in charging of starting the whole thing
+		local nvim_metals_group = vim.api.nvim_create_augroup("nvim-metals", { clear = true })
+		vim.api.nvim_create_autocmd("FileType", {
+			-- NOTE: You may or may not want java included here. You will need it if you
+			-- want basic Java support but it may also conflict if you are using
+			-- something like nvim-jdtls which also works on a java filetype autocmd.
+			pattern = { "scala", "sbt" },
+			callback = function()
+				require("metals").initialize_or_attach(metals_config)
+			end,
+			group = nvim_metals_group,
+		})
 
-    return metals_config
-  end
+		return metals_config
+	end
 }
diff --git a/lua/plugins/tabline.lua b/lua/plugins/tabline.lua
index e210668..0365eb1 100644
--- a/lua/plugins/tabline.lua
+++ b/lua/plugins/tabline.lua
@@ -1,57 +1,59 @@
 return {
-  'nvim-lualine/lualine.nvim',
-  dependencies = {
-    { 'kyazdani42/nvim-web-devicons', lazy = true },
-    'nvim-lua/lsp-status.nvim',
-    'crater2150/vim-theme-chroma',
-  },
-  event = "VeryLazy",
-  opts = function(_, opts) return {
-    options = {
-      theme = require('chroma-theme.lualine')
-    },
-    tabline = {
-      lualine_a = { 'branch' },
-      lualine_b = {},
-      lualine_c = { { 'buffers', show_filename_only = false, symbols = { modified = " ✏️]", alternate_file = " 🔃", folder = " 📁"} ,}},
-      lualine_x = {},
-      lualine_y = {},
-      lualine_z = {
-        {'tabs',
-          mode=1,
-          fmt = function(name, context)
-            local buflist = vim.fn.tabpagebuflist(context.tabnr)
-            local mod = not vim.tbl_isempty(vim.tbl_filter(
-              function(bufnr) return vim.fn.getbufvar(bufnr, '&mod') == 1 end,
-              buflist))
+	'nvim-lualine/lualine.nvim',
+	dependencies = {
+		{ 'kyazdani42/nvim-web-devicons', lazy = true },
+		'nvim-lua/lsp-status.nvim',
+		'crater2150/vim-theme-chroma',
+	},
+	event = "VeryLazy",
+	opts = function(_, opts)
+		return {
+			options = {
+				theme = require('chroma-theme.lualine')
+			},
+			tabline = {
+				lualine_a = { 'branch' },
+				lualine_b = {},
+				lualine_c = { { 'buffers', show_filename_only = false, symbols = { modified = " ✏️]", alternate_file = " 🔃", folder = " 📁" }, } },
+				lualine_x = {},
+				lualine_y = {},
+				lualine_z = {
+					{
+						'tabs',
+						mode = 1,
+						fmt = function(name, context)
+							local buflist = vim.fn.tabpagebuflist(context.tabnr)
+							local mod = not vim.tbl_isempty(vim.tbl_filter(
+								function(bufnr) return vim.fn.getbufvar(bufnr, '&mod') == 1 end,
+								buflist))
 
-            local wincount = #vim.tbl_filter(
-              function(i) return i == 'leaf' end,
-              vim.tbl_flatten(vim.fn.winlayout(context.tabnr))
-            )
+							local wincount = #vim.tbl_filter(
+								function(i) return i == 'leaf' end,
+								vim.tbl_flatten(vim.fn.winlayout(context.tabnr))
+							)
 
-            return name .. (wincount > 1 and ' +' .. (wincount - 1) or '') .. (mod and ' [✏️]]' or '')
-          end
-      } }
-    },
-    sections = {
-      lualine_a = { 'filename' },
-      lualine_b = { 'diff', 'diagnostics' },
-      lualine_x = { "require'lsp-status'.status()" },
-      lualine_y = { 'filetype' },
-      lualine_z = { 'searchcount', 'selectioncount', 'location' }
-    },
-    inactive_sections = {
-      lualine_a = {},
-      lualine_b = {},
-      lualine_c = { 'filename' },
-      lualine_x = { 'location' },
-      lualine_y = {},
-      lualine_z = {}
-    },
-    winbar = {},
-    inactive_winbar = {},
-    extensions = {}
-  }
-  end,
+							return name .. (wincount > 1 and ' +' .. (wincount - 1) or '') .. (mod and ' [✏️]]' or '')
+						end
+					} }
+			},
+			sections = {
+				lualine_a = { 'filename' },
+				lualine_b = { 'diff', 'diagnostics' },
+				lualine_x = { "require'lsp-status'.status()" },
+				lualine_y = { 'filetype' },
+				lualine_z = { 'searchcount', 'selectioncount', 'location' }
+			},
+			inactive_sections = {
+				lualine_a = {},
+				lualine_b = {},
+				lualine_c = { 'filename' },
+				lualine_x = { 'location' },
+				lualine_y = {},
+				lualine_z = {}
+			},
+			winbar = {},
+			inactive_winbar = {},
+			extensions = {}
+		}
+	end,
 }
diff --git a/lua/plugins/telescope.lua b/lua/plugins/telescope.lua
index a38dfba..5579eb0 100644
--- a/lua/plugins/telescope.lua
+++ b/lua/plugins/telescope.lua
@@ -1,54 +1,54 @@
 return {
-  "nvim-telescope/telescope.nvim",
-  dependencies = {
-    {
-      'nvim-telescope/telescope-fzf-native.nvim',
-      build =
-      'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build',
-    },
-    'gbrlsnchs/telescope-lsp-handlers.nvim',
-  },
-  cmd = "Telescope",
-  version = false,
-  keys = function()
-    local builtin = require("telescope.builtin")
-    local utils = require("telescope.utils")
-    return {
-      { ',,',        function() builtin.fd { cwd = utils.buffer_dir() } end, desc = "Find files in current file's dir" },
-      { ',ff',       builtin.fd,                                          desc = "Find files" },
-      { ',fg',       builtin.git_files,                                   desc = "Find files (git)" },
-      { ',gs',       builtin.git_status,                                  desc = "Git status" },
-      { ',s',        builtin.lsp_dynamic_workspace_symbols,               desc = "Symbols" },
-      { 'g/',        builtin.live_grep,                                   desc = "Live grep" },
-      { 'g:',        builtin.command_history,                             desc = "Command history" },
-      { '<C-/>',     builtin.current_buffer_fuzzy_find,                   desc = "Fuzzy find" },
-      { '<leader>*', builtin.grep_string,                                 desc = "Find at cursor" },
-      { 'gb',        builtin.buffers,                                     desc = "Switch buffer" },
-      { "<leader>:", builtin.command_history,                             desc = "Command History" },
-      { "<leader>;", builtin.commands,                                    desc = "Commands" },
-    }
-  end,
-  opts = {
-    defaults = {
-      prompt_prefix = " ",
-      selection_caret = " ",
-    },
-    extensions = {
-      fzf = {
-        fuzzy = true,                   -- false will only do exact matching
-        override_generic_sorter = true, -- override the generic sorter
-        override_file_sorter = true,    -- override the file sorter
-        case_mode = "smart_case",       -- or "ignore_case" or "respect_case"
-        -- the default case_mode is "smart_case"
-      },
-      ["ui-select"] = {
-        require("telescope.themes").get_dropdown {}
-      },
-    },
-  },
-  config = function(_, opts)
-    local telescope = require('telescope')
-    telescope.setup(opts)
-    telescope.load_extension('fzf')
-  end,
+	"nvim-telescope/telescope.nvim",
+	dependencies = {
+		{
+			'nvim-telescope/telescope-fzf-native.nvim',
+			build =
+			'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build',
+		},
+		'gbrlsnchs/telescope-lsp-handlers.nvim',
+	},
+	cmd = "Telescope",
+	version = false,
+	keys = function()
+		local builtin = require("telescope.builtin")
+		local utils = require("telescope.utils")
+		return {
+			{ ',,',        function() builtin.fd { cwd = utils.buffer_dir() } end, desc = "Find files in current file's dir" },
+			{ ',ff',       builtin.fd,                                             desc = "Find files" },
+			{ ',fg',       builtin.git_files,                                      desc = "Find files (git)" },
+			{ ',gs',       builtin.git_status,                                     desc = "Git status" },
+			{ ',s',        builtin.lsp_dynamic_workspace_symbols,                  desc = "Symbols" },
+			{ 'g/',        builtin.live_grep,                                      desc = "Live grep" },
+			{ 'g:',        builtin.command_history,                                desc = "Command history" },
+			{ '<C-/>',     builtin.current_buffer_fuzzy_find,                      desc = "Fuzzy find" },
+			{ '<leader>*', builtin.grep_string,                                    desc = "Find at cursor" },
+			{ 'gb',        builtin.buffers,                                        desc = "Switch buffer" },
+			{ "<leader>:", builtin.command_history,                                desc = "Command History" },
+			{ "<leader>;", builtin.commands,                                       desc = "Commands" },
+		}
+	end,
+	opts = {
+		defaults = {
+			prompt_prefix = " ",
+			selection_caret = " ",
+		},
+		extensions = {
+			fzf = {
+				fuzzy = true,                   -- false will only do exact matching
+				override_generic_sorter = true, -- override the generic sorter
+				override_file_sorter = true,    -- override the file sorter
+				case_mode = "smart_case",       -- or "ignore_case" or "respect_case"
+				-- the default case_mode is "smart_case"
+			},
+			["ui-select"] = {
+				require("telescope.themes").get_dropdown {}
+			},
+		},
+	},
+	config = function(_, opts)
+		local telescope = require('telescope')
+		telescope.setup(opts)
+		telescope.load_extension('fzf')
+	end,
 }
diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua
index 5e1d743..ca161a6 100644
--- a/lua/plugins/treesitter.lua
+++ b/lua/plugins/treesitter.lua
@@ -1,111 +1,113 @@
 local function ts_disable(_, bufnr)
-    return vim.api.nvim_buf_line_count(bufnr) > 5000
+	return vim.api.nvim_buf_line_count(bufnr) > 5000
 end
 
 return {
-  {
-    "nvim-treesitter/nvim-treesitter",
-    version = false, -- last release is way too old and doesn't work on Windows
-    build = ":TSUpdate",
-    event = { "BufReadPost", "BufNewFile" },
-    dependencies = {
-      {
-        "nvim-treesitter/nvim-treesitter-textobjects",
-        init = function()
-          -- PERF: no need to load the plugin, if we only need its queries for mini.ai
-          local plugin = require("lazy.core.config").spec.plugins["nvim-treesitter"]
-          local opts = require("lazy.core.plugin").values(plugin, "opts", false)
-          local enabled = false
-          if opts.textobjects then
-            for _, mod in ipairs({ "move", "select", "swap", "lsp_interop" }) do
-              if opts.textobjects[mod] and opts.textobjects[mod].enable then
-                enabled = true
-                break
-              end
-            end
-          end
-          if not enabled then
-            require("lazy.core.loader").disable_rtp_plugin("nvim-treesitter-textobjects")
-          end
-        end,
-      },
-    },
-    keys = {
-      { "<c-space>", desc = "Increment selection" },
-      { "<bs>",      desc = "Decrement selection", mode = "x" },
-    },
-    ---@type TSConfig
-    opts = {
-      highlight = { enable = true, disable = ts_disable },
-      indent = { enable = true },
-      ensure_installed = {
-        "bash",
-        "gitignore",
-        "html",
-        "java",
-        "json",
-        "lua",
-        "luadoc",
-        "luap",
-        "markdown",
-        "markdown_inline",
-        "python",
-        "query",
-        "regex",
-        "scala",
-        "tsx",
-        "typescript",
-        "vim",
-        "vimdoc",
-        "yaml",
-      },
-      incremental_selection = {
-        enable = true,
-        keymaps = {
-          init_selection = "<C-space>",
-          node_incremental = "<C-space>",
-          scope_incremental = false,
-          node_decremental = "<bs>",
-        },
-      },
-    },
-    ---@param opts TSConfig
-    config = function(_, opts)
-      if type(opts.ensure_installed) == "table" then
-        ---@type table<string, boolean>
-        local added = {}
-        opts.ensure_installed = vim.tbl_filter(function(lang)
-          if added[lang] then
-            return false
-          end
-          added[lang] = true
-          return true
-        end, opts.ensure_installed --[[@as string[] ]])
-      end
-      require("nvim-treesitter.configs").setup(opts)
-    end,
-  },
-  { 'nvim-treesitter/playground',
-    dependencies = { "nvim-treesitter/nvim-treesitter" },
-    cmd = {
-      'TSPlaygroundToggle',
-      'TSHighlightCapturesUnderCursor',
-      'TSNodeUnderCursor',
-    }
-  },
-  { "nvim-treesitter/nvim-treesitter-context",
-    event = "VeryLazy",
-    dependencies = { "nvim-treesitter/nvim-treesitter" },
-    cmd = { 'TSContextEnable', 'TSContextDisable', 'TSContextToggle' },
-    keys = {
-      { "[c", function() require("treesitter-context").go_to_context() end, desc = "Go to context start" },
-    },
-    opts = { enable = true },
-    config = function(_, opts)
-      require'treesitter-context'.setup(opts)
-      vim.api.nvim_set_hl(0, 'TreesitterContext', { bg = "#555555" })
-      vim.api.nvim_set_hl(0, 'TreesitterContextLineNumber', { link = "Special" })
-    end,
-  }
+	{
+		"nvim-treesitter/nvim-treesitter",
+		version = false, -- last release is way too old and doesn't work on Windows
+		build = ":TSUpdate",
+		event = { "BufReadPost", "BufNewFile" },
+		dependencies = {
+			{
+				"nvim-treesitter/nvim-treesitter-textobjects",
+				init = function()
+					-- PERF: no need to load the plugin, if we only need its queries for mini.ai
+					local plugin = require("lazy.core.config").spec.plugins["nvim-treesitter"]
+					local opts = require("lazy.core.plugin").values(plugin, "opts", false)
+					local enabled = false
+					if opts.textobjects then
+						for _, mod in ipairs({ "move", "select", "swap", "lsp_interop" }) do
+							if opts.textobjects[mod] and opts.textobjects[mod].enable then
+								enabled = true
+								break
+							end
+						end
+					end
+					if not enabled then
+						require("lazy.core.loader").disable_rtp_plugin("nvim-treesitter-textobjects")
+					end
+				end,
+			},
+		},
+		keys = {
+			{ "<c-space>", desc = "Increment selection" },
+			{ "<bs>",      desc = "Decrement selection", mode = "x" },
+		},
+		---@type TSConfig
+		opts = {
+			highlight = { enable = true, disable = ts_disable },
+			indent = { enable = true },
+			ensure_installed = {
+				"bash",
+				"gitignore",
+				"html",
+				"java",
+				"json",
+				"lua",
+				"luadoc",
+				"luap",
+				"markdown",
+				"markdown_inline",
+				"python",
+				"query",
+				"regex",
+				"scala",
+				"tsx",
+				"typescript",
+				"vim",
+				"vimdoc",
+				"yaml",
+			},
+			incremental_selection = {
+				enable = true,
+				keymaps = {
+					init_selection = "<C-space>",
+					node_incremental = "<C-space>",
+					scope_incremental = false,
+					node_decremental = "<bs>",
+				},
+			},
+		},
+		---@param opts TSConfig
+		config = function(_, opts)
+			if type(opts.ensure_installed) == "table" then
+				---@type table<string, boolean>
+				local added = {}
+				opts.ensure_installed = vim.tbl_filter(function(lang)
+					if added[lang] then
+						return false
+					end
+					added[lang] = true
+					return true
+				end, opts.ensure_installed --[[@as string[] ]])
+			end
+			require("nvim-treesitter.configs").setup(opts)
+		end,
+	},
+	{
+		'nvim-treesitter/playground',
+		dependencies = { "nvim-treesitter/nvim-treesitter" },
+		cmd = {
+			'TSPlaygroundToggle',
+			'TSHighlightCapturesUnderCursor',
+			'TSNodeUnderCursor',
+		}
+	},
+	{
+		"nvim-treesitter/nvim-treesitter-context",
+		event = "VeryLazy",
+		dependencies = { "nvim-treesitter/nvim-treesitter" },
+		cmd = { 'TSContextEnable', 'TSContextDisable', 'TSContextToggle' },
+		keys = {
+			{ "[c", function() require("treesitter-context").go_to_context() end, desc = "Go to context start" },
+		},
+		opts = { enable = true },
+		config = function(_, opts)
+			require 'treesitter-context'.setup(opts)
+			vim.api.nvim_set_hl(0, 'TreesitterContext', { bg = "#555555" })
+			vim.api.nvim_set_hl(0, 'TreesitterContextLineNumber', { link = "Special" })
+		end,
+	}
 
 }
diff --git a/plugin/centerscroll.lua b/plugin/centerscroll.lua
index 860d652..54202a4 100644
--- a/plugin/centerscroll.lua
+++ b/plugin/centerscroll.lua
@@ -6,11 +6,11 @@
 
 vim.api.nvim_create_augroup("KeepCentered", { clear = true })
 vim.api.nvim_create_autocmd("CursorMoved", {
-  group = "KeepCentered",
-  pattern = '*',
-  callback = function() 
-    if vim.o.buftype == '' then
-      vim.cmd([[normal! zz]])
-    end
-  end,
+	group = "KeepCentered",
+	pattern = '*',
+	callback = function()
+		if vim.o.buftype == '' then
+			vim.cmd([[normal! zz]])
+		end
+	end,
 })
diff --git a/plugin/scaladeps.lua b/plugin/scaladeps.lua
index 2291f59..e15cde5 100644
--- a/plugin/scaladeps.lua
+++ b/plugin/scaladeps.lua
@@ -1,7 +1,6 @@
-
 local sbtToScalaCLI = function()
-	vim.cmd[[s/\s*libraryDependencies\s*+=\s*/\/\/> using dep /]]
-	vim.cmd[[s/" \(%\+\) "/\=repeat(":", strlen(submatch(1)))/g]]
+	vim.cmd [[s/\s*libraryDependencies\s*+=\s*/\/\/> using dep /]]
+	vim.cmd [[s/" \(%\+\) "/\=repeat(":", strlen(submatch(1)))/g]]
 end
 
 vim.keymap.set("n", "<leader>dep", sbtToScalaCLI, { noremap = true, silent = true, desc = "Convert sbt dependency to Scala CLI" })