Compare commits
7 Commits
613110fdce
...
30bd9ac528
Author | SHA1 | Date | |
---|---|---|---|
30bd9ac528 | |||
063c2215fb | |||
624b32792c | |||
a077ab060f | |||
348358bd6f | |||
50f54b4a09 | |||
0d3d49ddf4 |
|
@ -4,6 +4,8 @@
|
|||
|
||||
[includeIf "gitdir:~/Projects/ALTEN/"]
|
||||
path = ~/.dotfiles/git/profiles/ALTEN
|
||||
[includeIf "gitdir:~/Projects/vlasman/"]
|
||||
path = ~/.dotfiles/git/profiles/ALTEN
|
||||
[filter "lfs"]
|
||||
process = git-lfs filter-process
|
||||
required = true
|
||||
|
|
|
@ -34,3 +34,24 @@ require("lazy").setup({
|
|||
backdrop = 100,
|
||||
},
|
||||
})
|
||||
|
||||
local lsp = require("tools.lsp")
|
||||
for _, tool in pairs(lsp) do
|
||||
if type(tool) == "table" then
|
||||
local name = tool[1]
|
||||
|
||||
-- Apply additional config if specified
|
||||
local config = tool[2]
|
||||
if config ~= nil then
|
||||
vim.lsp.config(name, config)
|
||||
end
|
||||
|
||||
-- System LSP are not managed by mason and need to be enabled manually
|
||||
if
|
||||
(type(tool.system) == "boolean" and tool.system and vim.fn.executable(name) > 0)
|
||||
or (type(tool.system) == "string" and vim.fn.executable(tool.system) > 0)
|
||||
then
|
||||
vim.lsp.enable(name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
"cmp-path": { "branch": "main", "commit": "c6635aae33a50d6010bf1aa756ac2398a2d54c32" },
|
||||
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
|
||||
"conform.nvim": { "branch": "master", "commit": "6feb2f28f9a9385e401857b21eeac3c1b66dd628" },
|
||||
"document-color.nvim": { "branch": "main", "commit": "74c487f0e5accfaae033755451b9e367220693fd" },
|
||||
"fidget.nvim": { "branch": "main", "commit": "d9ba6b7bfe29b3119a610892af67602641da778e" },
|
||||
"gitsigns.nvim": { "branch": "main", "commit": "8b729e489f1475615dc6c9737da917b3bc163605" },
|
||||
"gruvbox.nvim": { "branch": "main", "commit": "00e38a379bab3389e187b3953566d67d494dfddd" },
|
||||
|
@ -21,6 +20,7 @@
|
|||
"lspkind-nvim": { "branch": "master", "commit": "d79a1c3299ad0ef94e255d045bed9fa26025dab6" },
|
||||
"lualine.nvim": { "branch": "master", "commit": "0c6cca9f2c63dadeb9225c45bc92bb95a151d4af" },
|
||||
"luvit-meta": { "branch": "main", "commit": "1df30b60b1b4aecfebc785aa98943db6c6989716" },
|
||||
"mason-conform.nvim": { "branch": "main", "commit": "f3b96fa2217fcb1513301eefbe10ea0e765e33eb" },
|
||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "d24b3f1612e53f9d54d866b16bedab51813f2bf1" },
|
||||
"mason-tool-installer.nvim": { "branch": "main", "commit": "75d60a8f928decd8b38897f80849768b7c540a5b" },
|
||||
"mason.nvim": { "branch": "main", "commit": "8024d64e1330b86044fed4c8494ef3dcd483a67c" },
|
||||
|
@ -35,9 +35,9 @@
|
|||
"nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "3ea99227e316c5028f57a4d86a1a7fd01dd876d0" },
|
||||
"nvim-surround": { "branch": "main", "commit": "0e62500b98f4513feaaf7425c135472457ea5b7d" },
|
||||
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
|
||||
"nvim-treesitter-context": { "branch": "master", "commit": "938003c79d23912d2cafd56d939346860f78127a" },
|
||||
"nvim-treesitter-textobjects": { "branch": "master", "commit": "0f051e9813a36481f48ca1f833897210dbcfffde" },
|
||||
"nvim-treesitter": { "branch": "main", "commit": "c1dfc39285e4a11983dfbe556fb0be7f2a749977" },
|
||||
"nvim-treesitter-context": { "branch": "master", "commit": "404502e607c3b309e405be9112c438c721153372" },
|
||||
"nvim-treesitter-textobjects": { "branch": "main", "commit": "fa32a45fdbab9c9c3bda9ecec9b12dddb221b927" },
|
||||
"nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" },
|
||||
"peek.nvim": { "branch": "master", "commit": "5820d937d5414baea5f586dc2a3d912a74636e5b" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
local border = require("symbols.window").border
|
||||
|
||||
-- Highlight on yank
|
||||
local highlight_group = vim.api.nvim_create_augroup("YankHighlight", { clear = true })
|
||||
vim.api.nvim_create_autocmd("TextYankPost", {
|
||||
callback = function()
|
||||
vim.highlight.on_yank({ higroup = "YankHighlight" })
|
||||
end,
|
||||
group = highlight_group,
|
||||
pattern = "*",
|
||||
})
|
||||
|
||||
-- show cursor line only in active window
|
||||
local cursor_group = vim.api.nvim_create_augroup("ActiveCursor", { clear = true })
|
||||
vim.api.nvim_create_autocmd({ "InsertLeave", "WinEnter" }, {
|
||||
callback = function()
|
||||
local ok, cl = pcall(vim.api.nvim_win_get_var, 0, "auto-cursorline")
|
||||
|
@ -18,8 +16,6 @@ vim.api.nvim_create_autocmd({ "InsertLeave", "WinEnter" }, {
|
|||
vim.api.nvim_win_del_var(0, "auto-cursorline")
|
||||
end
|
||||
end,
|
||||
group = cursor_group,
|
||||
pattern = "*",
|
||||
})
|
||||
vim.api.nvim_create_autocmd({ "InsertEnter", "WinLeave" }, {
|
||||
callback = function()
|
||||
|
@ -29,6 +25,142 @@ vim.api.nvim_create_autocmd({ "InsertEnter", "WinLeave" }, {
|
|||
vim.wo.cursorline = false
|
||||
end
|
||||
end,
|
||||
group = cursor_group,
|
||||
pattern = "*",
|
||||
})
|
||||
|
||||
-- Setup lsp keybindings
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
callback = function(event)
|
||||
-- Symbols
|
||||
vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Goto definition" })
|
||||
vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "Goto declaration" })
|
||||
vim.keymap.set("n", "<leader>D", vim.lsp.buf.type_definition, { desc = "Type definition" })
|
||||
|
||||
if pcall(require, "telescope") then
|
||||
vim.keymap.set("n", "gr", require("telescope.builtin").lsp_references, { desc = "Goto references" })
|
||||
vim.keymap.set(
|
||||
"n",
|
||||
"gI",
|
||||
require("telescope.builtin").lsp_implementations,
|
||||
{ desc = "Goto implementation" }
|
||||
)
|
||||
vim.keymap.set(
|
||||
"n",
|
||||
"<leader>ds",
|
||||
require("telescope.builtin").lsp_document_symbols,
|
||||
{ desc = "Document symbols" }
|
||||
)
|
||||
vim.keymap.set(
|
||||
"n",
|
||||
"<leader>ws",
|
||||
require("telescope.builtin").lsp_dynamic_workspace_symbols,
|
||||
{ desc = "Workspace symbols" }
|
||||
)
|
||||
end
|
||||
|
||||
-- Diagnostics
|
||||
vim.keymap.set("n", "[d", function()
|
||||
vim.diagnostic.jump({ count = -1 })
|
||||
end, { desc = "Go to previous diagnostic message" })
|
||||
vim.keymap.set("n", "]d", function()
|
||||
vim.diagnostic.jump({ count = 1 })
|
||||
end, { desc = "Go to next diagnostic message" })
|
||||
-- vim.keymap.set("n", "<leader>e", vim.diagnostic.open_float, { desc = "Open floating diagnostic message" })
|
||||
vim.keymap.set("n", "<leader>e", function()
|
||||
if vim.diagnostic.config().virtual_lines then
|
||||
vim.diagnostic.config({ virtual_lines = false })
|
||||
else
|
||||
vim.diagnostic.config({
|
||||
virtual_lines = {
|
||||
current_line = true,
|
||||
format = vim.diagnostic.config().virtual_text.format,
|
||||
},
|
||||
})
|
||||
end
|
||||
end, { desc = "Show virtual diagnostic line" })
|
||||
|
||||
-- Helpers
|
||||
vim.keymap.set("n", "<leader>rn", function()
|
||||
return ":IncRename " .. vim.fn.expand("<cword>")
|
||||
end, { buffer = event.buf, expr = true, desc = "Rename" })
|
||||
vim.keymap.set(
|
||||
"n",
|
||||
"<leader>ca",
|
||||
vim.lsp.buf.code_action,
|
||||
{ buffer = event.buf, desc = "Code actions", remap = true }
|
||||
)
|
||||
|
||||
-- Documentation
|
||||
vim.keymap.set("n", "K", function()
|
||||
vim.lsp.buf.hover({ border = border })
|
||||
end, { desc = "Hover Documentation" })
|
||||
vim.keymap.set("n", "<C-k>", function()
|
||||
vim.lsp.buf.signature_help({ border = border })
|
||||
end, { desc = "Signature Documentation" })
|
||||
end,
|
||||
})
|
||||
|
||||
-- Setup cursor hover symbol highlight
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
callback = function(event)
|
||||
local client = vim.lsp.get_client_by_id(event.data.client_id)
|
||||
if client and client:supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight, event.buf) then
|
||||
local lsp_hover_hl = vim.api.nvim_create_augroup("LspHoverHighlight", { clear = false })
|
||||
vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, {
|
||||
buffer = event.buf,
|
||||
group = lsp_hover_hl,
|
||||
callback = vim.lsp.buf.document_highlight,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, {
|
||||
buffer = event.buf,
|
||||
group = lsp_hover_hl,
|
||||
callback = vim.lsp.buf.clear_references,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd("LspDetach", {
|
||||
group = vim.api.nvim_create_augroup("LspHoverHighlightDetach", { clear = true }),
|
||||
callback = function(event2)
|
||||
vim.lsp.buf.clear_references()
|
||||
vim.api.nvim_clear_autocmds({ group = lsp_hover_hl, buffer = event2.buf })
|
||||
end,
|
||||
})
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Setup cursor hover symbol highlight
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
callback = function(event)
|
||||
local client = vim.lsp.get_client_by_id(event.data.client_id)
|
||||
if client and client.server_capabilities.semanticTokensProvider then
|
||||
client.server_capabilities.semanticTokensProvider = nil
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
--
|
||||
vim.api.nvim_create_autocmd("CursorMoved", {
|
||||
callback = function()
|
||||
vim.diagnostic.config({ virtual_lines = false })
|
||||
end,
|
||||
})
|
||||
|
||||
-- Auto install treesitter parser and start them
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
desc = "Enable Treesitter",
|
||||
group = vim.api.nvim_create_augroup("enable_treesitter", {}),
|
||||
callback = function(event)
|
||||
local has_treesitter, treesitter = pcall(require, "nvim-treesitter")
|
||||
if has_treesitter then
|
||||
local language = vim.treesitter.language.get_lang(event.match)
|
||||
treesitter.install(language):await(function(a)
|
||||
if pcall(vim.treesitter.start) then
|
||||
-- Use Treesitter indentation and folds.
|
||||
vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
||||
vim.wo.foldmethod = "expr"
|
||||
vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()"
|
||||
end
|
||||
end)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
|
|
@ -13,11 +13,6 @@ vim.keymap.set("n", "<S-Down>", "<cmd>resize -2<CR>")
|
|||
vim.keymap.set("n", "<S-Left>", "<cmd>vertical resize -2<CR>")
|
||||
vim.keymap.set("n", "<S-Right>", "<cmd>vertical resize +2<CR>")
|
||||
|
||||
-- Diagnostic keymaps
|
||||
vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, { desc = "Go to previous diagnostic message" })
|
||||
vim.keymap.set("n", "]d", vim.diagnostic.goto_next, { desc = "Go to next diagnostic message" })
|
||||
vim.keymap.set("n", "<leader>e", vim.diagnostic.open_float, { desc = "Open floating diagnostic message" })
|
||||
|
||||
-- Some nice adjustments
|
||||
vim.keymap.set("n", "<C-d>", "<C-d>zz")
|
||||
vim.keymap.set("n", "<C-u>", "<C-u>zz")
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
local diagnostic = require("symbols.diagnostic")
|
||||
local border = require("symbols.window").border
|
||||
|
||||
-- Set highlight on search
|
||||
vim.o.hlsearch = true
|
||||
|
||||
|
@ -39,7 +42,7 @@ vim.o.termguicolors = true
|
|||
|
||||
-- Default tab settings
|
||||
-- Tab settings are automatically detected by vim-sleuth
|
||||
-- Can be overriden by .editorconfig and modeline
|
||||
-- Can be overridden by .editorconfig and modeline
|
||||
vim.o.tabstop = 4
|
||||
vim.o.softtabstop = 4
|
||||
vim.o.shiftwidth = 4
|
||||
|
@ -61,3 +64,25 @@ vim.o.scrolloff = 10
|
|||
-- Highlight tabs and trailing whitespace
|
||||
vim.o.listchars = "trail:~,tab:¦⁃,nbsp:␣"
|
||||
vim.o.list = true
|
||||
|
||||
-- Fold settings
|
||||
vim.o.foldlevelstart = 99
|
||||
|
||||
-- LSP config
|
||||
vim.diagnostic.config({
|
||||
severity_sort = true,
|
||||
signs = {
|
||||
text = {
|
||||
[vim.diagnostic.severity.ERROR] = diagnostic.error,
|
||||
[vim.diagnostic.severity.WARN] = diagnostic.warn,
|
||||
[vim.diagnostic.severity.HINT] = diagnostic.hint,
|
||||
[vim.diagnostic.severity.INFO] = diagnostic.info,
|
||||
},
|
||||
},
|
||||
virtual_text = {
|
||||
virt_text_pos = "eol_right_align",
|
||||
format = function(d)
|
||||
return ("%s [%s]"):format(d.message, d.source)
|
||||
end,
|
||||
},
|
||||
})
|
||||
|
|
|
@ -8,9 +8,6 @@ return {
|
|||
"hrsh7th/cmp-path",
|
||||
"onsails/lspkind-nvim",
|
||||
|
||||
-- Improve sorting order for rust
|
||||
"zjp-CN/nvim-cmp-lsp-rs",
|
||||
|
||||
-- Snippets
|
||||
"L3MON4D3/LuaSnip",
|
||||
"saadparwaiz1/cmp_luasnip",
|
||||
|
@ -21,9 +18,6 @@ return {
|
|||
local lspkind = require("lspkind")
|
||||
local border = require("symbols.window").border
|
||||
|
||||
local cmp_rs = require("cmp_lsp_rs")
|
||||
local comparators = cmp_rs.comparators
|
||||
|
||||
cmp.setup({
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
|
@ -82,12 +76,6 @@ return {
|
|||
end
|
||||
end, { "i", "s" }),
|
||||
}),
|
||||
sorting = {
|
||||
comparators = {
|
||||
comparators.inherent_import_inscope,
|
||||
comparators.sort_by_label_but_underscore_last,
|
||||
},
|
||||
},
|
||||
sources = {
|
||||
{ name = "lazydev", group_index = 0 },
|
||||
{ name = "nvim_lsp" },
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
-- https://github.com/stevearc/conform.nvim
|
||||
|
||||
local slow_format_filetypes = {}
|
||||
return {
|
||||
"stevearc/conform.nvim",
|
||||
|
@ -20,7 +19,7 @@ return {
|
|||
},
|
||||
},
|
||||
opts = {
|
||||
formatters_by_ft = require("tools").formatters,
|
||||
formatters_by_ft = require("tools.format"),
|
||||
notify_on_error = false,
|
||||
format_on_save = function(bufnr)
|
||||
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
|
||||
|
|
|
@ -1,140 +0,0 @@
|
|||
return {
|
||||
-- LSP Configuration & Plugins
|
||||
"neovim/nvim-lspconfig",
|
||||
dependencies = {
|
||||
"williamboman/mason.nvim",
|
||||
"williamboman/mason-lspconfig.nvim",
|
||||
"WhoIsSethDaniel/mason-tool-installer.nvim",
|
||||
|
||||
-- Some of the lsp keybindings rely on telescope
|
||||
"nvim-telescope/telescope.nvim",
|
||||
-- Set capabilities from cmp
|
||||
"hrsh7th/cmp-nvim-lsp",
|
||||
|
||||
-- Add document color
|
||||
"mrshmllow/document-color.nvim",
|
||||
|
||||
"b0o/schemastore.nvim",
|
||||
|
||||
-- Rename with immediate visual feedback
|
||||
},
|
||||
config = function()
|
||||
local border = require("symbols.window").border
|
||||
|
||||
-- Set borders
|
||||
local handlers = {
|
||||
["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { border = border }),
|
||||
["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = border }),
|
||||
}
|
||||
|
||||
require("lspconfig.ui.windows").default_options = {
|
||||
border = border,
|
||||
}
|
||||
|
||||
vim.diagnostic.config({
|
||||
severity_sort = true,
|
||||
})
|
||||
|
||||
-- Create the signs for diagnostic symbols
|
||||
local diagnostic = require("symbols.diagnostic")
|
||||
local signs = {
|
||||
Error = diagnostic.error,
|
||||
Warn = diagnostic.warn,
|
||||
Hint = diagnostic.hint,
|
||||
Info = diagnostic.info,
|
||||
}
|
||||
for type, icon in pairs(signs) do
|
||||
local hl_sign = "DiagnosticSign" .. type
|
||||
local hl_text = "Diagnostic" .. type
|
||||
vim.fn.sign_define(hl_sign, { text = icon, texthl = hl_sign })
|
||||
end
|
||||
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
group = vim.api.nvim_create_augroup("lsp-attach", { clear = true }),
|
||||
callback = function(event)
|
||||
local map = function(keys, func, desc)
|
||||
vim.keymap.set("n", keys, func, { buffer = event.buf, desc = "LSP:" .. desc })
|
||||
end
|
||||
|
||||
map("gd", vim.lsp.buf.definition, "Goto definition")
|
||||
map("gr", require("telescope.builtin").lsp_references, "Goto references")
|
||||
map("gI", require("telescope.builtin").lsp_implementations, "Goto implementation")
|
||||
map("<leader>D", vim.lsp.buf.type_definition, "Type definition")
|
||||
map("<leader>ds", require("telescope.builtin").lsp_document_symbols, "Document symbols")
|
||||
map("<leader>ws", require("telescope.builtin").lsp_dynamic_workspace_symbols, "Workspace symbols")
|
||||
|
||||
vim.keymap.set("n", "<leader>rn", function()
|
||||
return ":IncRename " .. vim.fn.expand("<cword>")
|
||||
end, { buffer = event.buf, expr = true, desc = "Rename" })
|
||||
|
||||
-- TODO: Do we need this to work in visal mode?
|
||||
vim.keymap.set(
|
||||
{ "v", "n" },
|
||||
"<leader>ca",
|
||||
vim.lsp.buf.code_action,
|
||||
{ buffer = event.buf, desc = "Code actions", remap = true }
|
||||
)
|
||||
|
||||
-- Signature help
|
||||
map("K", vim.lsp.buf.hover, "Hover Documentation")
|
||||
map("<C-k>", vim.lsp.buf.signature_help, "Signature Documentation")
|
||||
|
||||
-- Lesser used LSP functionality
|
||||
map("gD", vim.lsp.buf.declaration, "Goto declaration")
|
||||
|
||||
local client = vim.lsp.get_client_by_id(event.data.client_id)
|
||||
-- Turn of lsp based syntax highlighting
|
||||
if client then
|
||||
client.server_capabilities.semanticTokensProvider = nil
|
||||
if client.server_capabilities.documentHighlightProvider then
|
||||
local highlight_augrup = vim.api.nvim_create_augroup("lsp-highlight", { clear = false })
|
||||
vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, {
|
||||
buffer = event.buf,
|
||||
group = highlight_augrup,
|
||||
callback = vim.lsp.buf.document_highlight,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, {
|
||||
buffer = event.buf,
|
||||
group = highlight_augrup,
|
||||
callback = vim.lsp.buf.clear_references,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd("LspDetach", {
|
||||
group = vim.api.nvim_create_augroup("lsp-detach", { clear = true }),
|
||||
callback = function(event2)
|
||||
vim.lsp.buf.clear_references()
|
||||
vim.api.nvim_clear_autocmds({ group = highlight_augrup, buffer = event2.buf })
|
||||
end,
|
||||
})
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
-- TODO: Only do this is cmp_nvim_lsp is enabled
|
||||
capabilities = vim.tbl_deep_extend("force", capabilities, require("cmp_nvim_lsp").default_capabilities())
|
||||
capabilities.textDocument.colorProvider = {
|
||||
dynamicRegistration = true,
|
||||
}
|
||||
|
||||
local handler = function(server_name)
|
||||
local server = require("tools").servers()[server_name] or {}
|
||||
server.capabilities = vim.tbl_deep_extend("force", capabilities, server.capabilities or {})
|
||||
server.handlers = handlers
|
||||
|
||||
require("lspconfig")[server_name].setup(server)
|
||||
end
|
||||
|
||||
for server, config in pairs(require("tools").servers()) do
|
||||
if config.system then
|
||||
handler(server)
|
||||
end
|
||||
end
|
||||
|
||||
require("mason-lspconfig").setup({
|
||||
handlers = { handler },
|
||||
})
|
||||
end,
|
||||
}
|
|
@ -1,30 +1,27 @@
|
|||
return {
|
||||
{
|
||||
"williamboman/mason.nvim",
|
||||
opts = {
|
||||
ui = {
|
||||
border = require("symbols.window").border,
|
||||
height = 0.8,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"WhoIsSethDaniel/mason-tool-installer.nvim",
|
||||
dependencies = {
|
||||
"williamboman/mason.nvim",
|
||||
{ "mason-org/mason.nvim", opts = {} },
|
||||
"mason-org/mason-lspconfig.nvim",
|
||||
},
|
||||
config = function()
|
||||
local tools = require("tools")
|
||||
local ensure_installed = vim.tbl_keys(vim.tbl_map(function(tool)
|
||||
if tool.system then
|
||||
return nil
|
||||
local lsp = require("tools.lsp")
|
||||
|
||||
local ensure_installed = vim.tbl_values(vim.tbl_map(function(tool)
|
||||
if type(tool) == "table" then
|
||||
if not tool.system then
|
||||
return {
|
||||
tool[1],
|
||||
condition = tool.condition,
|
||||
}
|
||||
end
|
||||
else
|
||||
return tool
|
||||
end
|
||||
end, tools.servers()))
|
||||
ensure_installed =
|
||||
vim.list_extend(ensure_installed, require("util.mason").process_formatters(tools.formatters))
|
||||
ensure_installed = vim.list_extend(ensure_installed, tools.extra)
|
||||
|
||||
return nil
|
||||
end, lsp))
|
||||
|
||||
require("mason-tool-installer").setup({
|
||||
ensure_installed = ensure_installed,
|
||||
|
@ -32,4 +29,20 @@ return {
|
|||
})
|
||||
end,
|
||||
},
|
||||
{
|
||||
"mason-org/mason-lspconfig.nvim",
|
||||
opts = {},
|
||||
dependencies = {
|
||||
{ "mason-org/mason.nvim", opts = {} },
|
||||
"neovim/nvim-lspconfig",
|
||||
},
|
||||
},
|
||||
{
|
||||
"zapling/mason-conform.nvim",
|
||||
opts = {},
|
||||
dependencies = {
|
||||
{ "mason-org/mason.nvim", opts = {} },
|
||||
"stevearc/conform.nvim",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
13
nvim/dot-config/nvim/lua/plugins/schemastore.lua
Normal file
13
nvim/dot-config/nvim/lua/plugins/schemastore.lua
Normal file
|
@ -0,0 +1,13 @@
|
|||
return {
|
||||
"b0o/schemastore.nvim",
|
||||
config = function()
|
||||
vim.lsp.config("jsonls", {
|
||||
settings = {
|
||||
json = {
|
||||
validate = { enable = true },
|
||||
schemas = require("schemastore").json.schemas(),
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
}
|
|
@ -4,30 +4,14 @@ return {
|
|||
"nvim-treesitter/nvim-treesitter",
|
||||
dependencies = {
|
||||
"nvim-treesitter/nvim-treesitter-context",
|
||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||
{ "nvim-treesitter/nvim-treesitter-textobjects", branch = "main" },
|
||||
"windwp/nvim-ts-autotag",
|
||||
},
|
||||
lazy = false,
|
||||
branch = "main",
|
||||
build = ":TSUpdate",
|
||||
opts = {
|
||||
-- Add languages to be installed here that you want installed for treesitter
|
||||
ensure_installed = {
|
||||
"c",
|
||||
"cpp",
|
||||
"go",
|
||||
"lua",
|
||||
"python",
|
||||
"rust",
|
||||
"tsx",
|
||||
"typescript",
|
||||
"vimdoc",
|
||||
"vim",
|
||||
"markdown",
|
||||
"markdown_inline",
|
||||
"bash",
|
||||
"sql",
|
||||
},
|
||||
|
||||
-- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!)
|
||||
auto_install = true,
|
||||
ensure_installed = require("tools.highlight"),
|
||||
|
||||
highlight = { enable = true },
|
||||
indent = { enable = true },
|
||||
|
@ -91,17 +75,5 @@ return {
|
|||
enable = true,
|
||||
},
|
||||
},
|
||||
config = function(_, opts)
|
||||
require("nvim-treesitter.configs").setup(opts)
|
||||
require("nvim-treesitter.install").update({ with_sync = true })
|
||||
end,
|
||||
},
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter-context",
|
||||
opts = {
|
||||
multiwindow = true,
|
||||
mode = "topline",
|
||||
separator = require("symbols.window").borderchars[3],
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -1,11 +1,19 @@
|
|||
return {
|
||||
"someone-stole-my-name/yaml-companion.nvim",
|
||||
dependencies = {
|
||||
"neovim/nvim-lspconfig",
|
||||
"nvim-lua/plenary.nvim",
|
||||
"nvim-telescope/telescope.nvim",
|
||||
"nvim-telescope/telescope.nvim",
|
||||
"diogo464/kubernetes.nvim",
|
||||
},
|
||||
config = function()
|
||||
require("telescope").load_extension("yaml_schema")
|
||||
|
||||
vim.lsp.config("yamlls", require("yaml-companion").setup({
|
||||
builtin_matchers = {
|
||||
kubernetes = { enabled = false },
|
||||
kubernetes_custom = { enabled = true },
|
||||
},
|
||||
}))
|
||||
end,
|
||||
}
|
||||
|
|
|
@ -1,79 +0,0 @@
|
|||
local tools = {}
|
||||
|
||||
-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md
|
||||
tools.servers = function()
|
||||
return {
|
||||
clangd = {
|
||||
cmd = { "clangd", "--offset-encoding=utf-16", "--clang-tidy" },
|
||||
},
|
||||
gopls = {},
|
||||
pyright = {},
|
||||
rust_analyzer = {
|
||||
system = true,
|
||||
settings = {
|
||||
["rust-analyzer"] = {
|
||||
check = {
|
||||
command = "clippy",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
lua_ls = {
|
||||
settings = {
|
||||
Lua = {
|
||||
workspace = { checkThirdParty = false },
|
||||
telemetry = { enable = false },
|
||||
},
|
||||
},
|
||||
},
|
||||
jsonls = {
|
||||
settings = {
|
||||
json = {
|
||||
validate = { enable = true },
|
||||
schemas = require("schemastore").json.schemas(),
|
||||
},
|
||||
},
|
||||
},
|
||||
yamlls = require("yaml-companion").setup({
|
||||
builtin_matchers = {
|
||||
kubernetes = { enabled = false },
|
||||
kubernetes_custom = { enabled = true },
|
||||
},
|
||||
}),
|
||||
taplo = {},
|
||||
neocmake = {},
|
||||
nil_ls = {
|
||||
system = true,
|
||||
},
|
||||
typos_lsp = {
|
||||
init_options = {
|
||||
diagnosticSeverity = "Hint",
|
||||
},
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
-- https://github.com/stevearc/conform.nvim
|
||||
tools.formatters = require("util.conform").assign_formatters({
|
||||
{ { "c", "cpp" }, { "clang-format" } },
|
||||
go = { "goimports", "gofmt" },
|
||||
python = { "ruff_format" },
|
||||
rust = { "rustfmt" },
|
||||
{
|
||||
{ "javascript", "typescript", "typescriptreact", "javascriptreact", "css", "markdown", "yaml" },
|
||||
{ "prettierd" },
|
||||
},
|
||||
lua = { "stylua" },
|
||||
json = { "jq" },
|
||||
toml = { "taplo" },
|
||||
nix = { "nixfmt" },
|
||||
-- ["*"] = { "injected" },
|
||||
["_"] = { "trim_whitespace", "trim_newlines" },
|
||||
})
|
||||
|
||||
-- https://mason-registry.dev/registry/list
|
||||
tools.extra = {
|
||||
"cpptools",
|
||||
}
|
||||
|
||||
return tools
|
19
nvim/dot-config/nvim/lua/tools/format.lua
Normal file
19
nvim/dot-config/nvim/lua/tools/format.lua
Normal file
|
@ -0,0 +1,19 @@
|
|||
return {
|
||||
c = { "clang-format" },
|
||||
cpp = { "clang-format" },
|
||||
go = { "goimports", "gofmt" },
|
||||
python = { "ruff_organize_imports", "ruff_format" },
|
||||
rust = { "rustfmt" },
|
||||
javascript = { "prettierd" },
|
||||
javascriptreact = { "prettierd" },
|
||||
typescript = { "prettierd" },
|
||||
typescriptreact = { "prettierd" },
|
||||
css = { "prettierd" },
|
||||
markdown = { "prettierd" },
|
||||
yaml = { "prettierd" },
|
||||
lua = { "stylua" },
|
||||
json = { "jq" },
|
||||
toml = { "taplo" },
|
||||
-- ["*"] = { "injected" },
|
||||
["_"] = { "trim_whitespace", "trim_newlines" },
|
||||
}
|
16
nvim/dot-config/nvim/lua/tools/highlight.lua
Normal file
16
nvim/dot-config/nvim/lua/tools/highlight.lua
Normal file
|
@ -0,0 +1,16 @@
|
|||
return {
|
||||
"c",
|
||||
"cpp",
|
||||
"go",
|
||||
"lua",
|
||||
"python",
|
||||
"rust",
|
||||
"tsx",
|
||||
"typescript",
|
||||
"vimdoc",
|
||||
"vim",
|
||||
"markdown",
|
||||
"markdown_inline",
|
||||
"bash",
|
||||
"sql",
|
||||
}
|
45
nvim/dot-config/nvim/lua/tools/lsp.lua
Normal file
45
nvim/dot-config/nvim/lua/tools/lsp.lua
Normal file
|
@ -0,0 +1,45 @@
|
|||
return {
|
||||
{
|
||||
"rust_analyzer",
|
||||
{
|
||||
settings = {
|
||||
["rust-analyzer"] = {
|
||||
check = {
|
||||
command = "clippy",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
system = "rust-analyzer",
|
||||
},
|
||||
{ "typos_lsp", {
|
||||
init_options = {
|
||||
diagnosticSeverity = "Hint",
|
||||
},
|
||||
} },
|
||||
{ "clangd", {
|
||||
cmd = { "clangd", "--offset-encoding=utf-16", "--clang-tidy" },
|
||||
} },
|
||||
"pyright",
|
||||
{
|
||||
"lua_ls",
|
||||
{
|
||||
settings = {
|
||||
Lua = {
|
||||
workspace = { checkThirdParty = false },
|
||||
telemetry = { enable = false },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"gopls",
|
||||
condition = function()
|
||||
return vim.fn.executable("go") > 0
|
||||
end,
|
||||
},
|
||||
"jsonls",
|
||||
"yamlls",
|
||||
"taplo",
|
||||
"neocmake",
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
-- Helper function for assigning formatters to multiple languages at the same time
|
||||
local M = {}
|
||||
|
||||
function M.assign_formatters(input)
|
||||
local table = {}
|
||||
for k, v in pairs(input) do
|
||||
if type(k) == "number" then
|
||||
for _, lang in pairs(v[1]) do
|
||||
table[lang] = v[2]
|
||||
end
|
||||
else
|
||||
table[k] = v
|
||||
end
|
||||
end
|
||||
return table
|
||||
end
|
||||
|
||||
return M
|
|
@ -1,162 +0,0 @@
|
|||
-- Based on: https://github.com/zapling/mason-conform.nvim
|
||||
-- conform formatter to mason package mapping
|
||||
-- https://mason-registry.dev/registry/list
|
||||
local conform_to_mason = {
|
||||
-- alejandra
|
||||
["asmfmt"] = "asmfmt",
|
||||
["ast-grep"] = "ast-grep",
|
||||
-- astyle
|
||||
-- auto_optional
|
||||
-- autocorrect
|
||||
["autoflake"] = "autoflake",
|
||||
["autopep8"] = "autopep8",
|
||||
-- awk
|
||||
-- bean-format
|
||||
["beautysh"] = "beautysh",
|
||||
["bibtex-tidy"] = "bibtex-tidy",
|
||||
-- biome-check
|
||||
["biome"] = "biome",
|
||||
["black"] = "black",
|
||||
["blade-formatter"] = "blade-formatter",
|
||||
["blue"] = "blue",
|
||||
["buf"] = "buf",
|
||||
["buildifier"] = "buildifier",
|
||||
["cbfmt"] = "cbfmt",
|
||||
["clang-format"] = "clang-format",
|
||||
-- cljstyle
|
||||
["cmake_format"] = "cmakelang",
|
||||
["codespell"] = "codespell",
|
||||
["csharpier"] = "csharpier",
|
||||
-- cue_fmt
|
||||
["darker"] = "darker",
|
||||
-- dart_format
|
||||
["deno_fmt"] = "deno",
|
||||
-- dfmt
|
||||
["djlint"] = "djlint",
|
||||
["dprint"] = "dprint",
|
||||
["easy-coding-standard"] = "easy-coding-standard",
|
||||
["elm_format"] = "elm-format",
|
||||
-- erb_format
|
||||
["eslint_d"] = "eslint_d",
|
||||
["fantomas"] = "fantomas",
|
||||
-- fish_indent
|
||||
["fixjson"] = "fixjson",
|
||||
-- fnlfmt
|
||||
["fourmolu"] = "fourmolu",
|
||||
["gci"] = "gci",
|
||||
["gdformat"] = "gdtoolkit",
|
||||
["gersemi"] = "gersemi",
|
||||
-- gn
|
||||
-- gofmt
|
||||
["gofumpt"] = "gofumpt",
|
||||
["goimports-reviser"] = "goimports-reviser",
|
||||
["goimports"] = "goimports",
|
||||
["golines"] = "golines",
|
||||
["google-java-format"] = "google-java-format",
|
||||
["htmlbeautifier"] = "htmlbeautifier",
|
||||
-- indent
|
||||
-- init
|
||||
-- injected
|
||||
["isort"] = "isort",
|
||||
["joker"] = "joker",
|
||||
["jq"] = "jq",
|
||||
["jsonnetfmt"] = "jsonnetfmt",
|
||||
-- just
|
||||
["ktlint"] = "ktlint",
|
||||
["latexindent"] = "latexindent",
|
||||
["markdown-toc"] = "markdown-toc",
|
||||
["markdownlint-cli2"] = "markdownlint-cli2",
|
||||
["markdownlint"] = "markdownlint",
|
||||
["mdformat"] = "mdformat",
|
||||
["mdslw"] = "mdslw",
|
||||
-- mix
|
||||
-- nixfmt
|
||||
["nixpkgs_fmt"] = "nixpkgs-fmt",
|
||||
["ocamlformat"] = "ocamlformat",
|
||||
-- opa_fmt
|
||||
-- packer_fmt
|
||||
-- pangu
|
||||
-- perlimports
|
||||
-- perltidy
|
||||
-- pg_format
|
||||
["php_cs_fixer"] = "php-cs-fixer",
|
||||
["phpcbf"] = "phpcbf",
|
||||
-- phpinsights
|
||||
["pint"] = "pint",
|
||||
["prettier"] = "prettier",
|
||||
["prettierd"] = "prettierd",
|
||||
["pretty-php"] = "pretty-php",
|
||||
-- puppet-lint
|
||||
["reorder-python-imports"] = "reorder-python-imports",
|
||||
-- rescript-format
|
||||
["rubocop"] = "rubocop",
|
||||
["rubyfmt"] = "rubyfmt",
|
||||
-- ruff
|
||||
["ruff_fix"] = "ruff",
|
||||
["ruff_format"] = "ruff",
|
||||
["rufo"] = "rufo",
|
||||
-- NOTE: Should install through rustup instead
|
||||
-- ["rustfmt"] = "rustfmt",
|
||||
["rustywind"] = "rustywind",
|
||||
-- scalafmt
|
||||
["shellcheck"] = "shellcheck",
|
||||
["shellharden"] = "shellharden",
|
||||
["shfmt"] = "shfmt",
|
||||
["sql_formatter"] = "sql-formatter",
|
||||
["sqlfluff"] = "sqlfluff",
|
||||
["sqlfmt"] = "sqlfmt",
|
||||
-- squeeze_blanks
|
||||
["standardjs"] = "standardjs",
|
||||
["standardrb"] = "standardrb",
|
||||
["stylelint"] = "stylelint",
|
||||
-- styler
|
||||
["stylua"] = "stylua",
|
||||
-- swift_format
|
||||
-- swiftformat
|
||||
["taplo"] = "taplo",
|
||||
["templ"] = "templ",
|
||||
-- terraform_fmt
|
||||
-- terragrunt_hclfmt
|
||||
["tlint"] = "tlint",
|
||||
-- trim_newlines
|
||||
-- trim_whitespace
|
||||
-- twig-cs-fixer
|
||||
["typos"] = "typos",
|
||||
-- typstfmt
|
||||
-- uncrustify
|
||||
["usort"] = "usort",
|
||||
["xmlformat"] = "xmlformatter",
|
||||
-- xmllint
|
||||
["yamlfix"] = "yamlfix",
|
||||
["yamlfmt"] = "yamlfmt",
|
||||
["yapf"] = "yapf",
|
||||
["yq"] = "yq",
|
||||
-- zigfmt
|
||||
["zprint"] = "zprint",
|
||||
}
|
||||
|
||||
local M = {}
|
||||
|
||||
function M.process_formatters(formatters_by_ft)
|
||||
local formatters_to_install = {}
|
||||
for _, formatters in pairs(formatters_by_ft) do
|
||||
for _, formatter in pairs(formatters) do
|
||||
if type(formatter) == "table" then
|
||||
for _, f in pairs(formatter) do
|
||||
local package = conform_to_mason[f]
|
||||
if package ~= nil then
|
||||
formatters_to_install[package] = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
local package = conform_to_mason[formatter]
|
||||
if package ~= nil then
|
||||
formatters_to_install[package] = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return vim.tbl_keys(formatters_to_install)
|
||||
end
|
||||
|
||||
return M
|
Loading…
Reference in New Issue
Block a user