2023-09-21 10:20:40 -03:00
|
|
|
vim.loader.enable()
|
2021-06-13 16:20:42 -04:00
|
|
|
---- General Config ----
|
2023-09-24 23:56:39 -03:00
|
|
|
vim.opt.mouse = "a"
|
|
|
|
|
vim.opt.tabstop = 2
|
|
|
|
|
vim.opt.shiftwidth = 2
|
|
|
|
|
vim.opt.number = true
|
|
|
|
|
vim.opt.breakindent = true
|
|
|
|
|
vim.opt.showmatch = true
|
|
|
|
|
vim.opt.ignorecase = true
|
|
|
|
|
vim.opt.smartcase = true
|
|
|
|
|
vim.opt.joinspaces = false
|
|
|
|
|
vim.opt.showmode = false
|
|
|
|
|
vim.opt.hidden = true
|
|
|
|
|
vim.opt.backup = false
|
|
|
|
|
vim.opt.writebackup = false
|
|
|
|
|
vim.opt.swapfile = false
|
|
|
|
|
vim.opt.shortmess:append({ I = true })
|
2021-06-13 16:20:42 -04:00
|
|
|
-- whichwrap -- left/right keys can traverse up/down
|
2023-09-24 23:56:39 -03:00
|
|
|
vim.opt.whichwrap:append("<,>,[,]")
|
|
|
|
|
vim.opt.cmdheight = 2
|
|
|
|
|
vim.opt.showcmd = true
|
|
|
|
|
vim.opt.splitright = true
|
|
|
|
|
vim.opt.splitbelow = true
|
|
|
|
|
vim.g.mapleader = " "
|
2021-06-13 16:20:42 -04:00
|
|
|
|
|
|
|
|
---- Terminal ----
|
2023-03-27 16:09:35 -03:00
|
|
|
vim.api.nvim_create_autocmd({ "TermOpen" }, {
|
|
|
|
|
callback = function()
|
2023-09-24 23:56:39 -03:00
|
|
|
vim.opt_local.number = false
|
2023-03-27 16:09:35 -03:00
|
|
|
end,
|
|
|
|
|
})
|
2021-06-13 16:20:42 -04:00
|
|
|
|
|
|
|
|
---- Theming ----
|
2023-09-24 23:56:39 -03:00
|
|
|
vim.opt.termguicolors = true
|
|
|
|
|
vim.opt.background = "dark"
|
|
|
|
|
vim.g.gruvbox_italic = true
|
|
|
|
|
vim.cmd.colorscheme("gruvbox")
|
|
|
|
|
vim.opt.listchars = {
|
2023-04-14 19:38:59 -04:00
|
|
|
eol = "↲",
|
|
|
|
|
tab = "▶▹",
|
|
|
|
|
nbsp = "␣",
|
|
|
|
|
extends = "…",
|
|
|
|
|
trail = "•",
|
|
|
|
|
}
|
2023-06-25 23:45:35 -04:00
|
|
|
---- lualine.nvim ----
|
2023-09-27 00:12:43 -03:00
|
|
|
local lualine = require("lualine")
|
|
|
|
|
local theme = require("lualine.themes.gruvbox")
|
2023-06-29 22:55:24 -04:00
|
|
|
theme.terminal = theme.insert
|
2023-06-28 00:24:41 -04:00
|
|
|
lualine.setup({
|
2023-06-25 23:45:35 -04:00
|
|
|
options = {
|
2023-09-27 00:12:43 -03:00
|
|
|
component_separators = { left = "│", right = "│" },
|
|
|
|
|
section_separators = { left = "", right = "" },
|
2023-06-29 22:55:24 -04:00
|
|
|
theme = theme,
|
2023-06-25 23:45:35 -04:00
|
|
|
},
|
|
|
|
|
sections = {
|
2023-09-27 00:12:43 -03:00
|
|
|
lualine_a = { "mode" },
|
|
|
|
|
lualine_b = { "diagnostics" },
|
2023-06-29 22:34:45 -04:00
|
|
|
lualine_c = {
|
|
|
|
|
{
|
2023-09-27 00:12:43 -03:00
|
|
|
"filename",
|
2023-06-29 22:34:45 -04:00
|
|
|
path = 1,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
lualine_x = {
|
|
|
|
|
{
|
2023-09-27 00:12:43 -03:00
|
|
|
"fileformat",
|
2023-06-29 22:34:45 -04:00
|
|
|
cond = function()
|
2023-09-27 00:12:43 -03:00
|
|
|
return vim.bo.fileformat ~= "unix"
|
2023-06-29 22:34:45 -04:00
|
|
|
end,
|
|
|
|
|
},
|
|
|
|
|
{
|
2023-09-27 00:12:43 -03:00
|
|
|
"encoding",
|
2023-06-29 22:34:45 -04:00
|
|
|
cond = function()
|
2023-09-27 00:12:43 -03:00
|
|
|
return vim.bo.fileencoding ~= "utf-8"
|
2023-06-29 22:34:45 -04:00
|
|
|
end,
|
|
|
|
|
},
|
|
|
|
|
},
|
2023-06-27 23:35:00 -04:00
|
|
|
lualine_y = {
|
|
|
|
|
{
|
2023-09-27 00:12:43 -03:00
|
|
|
"filetype",
|
2023-06-27 23:35:00 -04:00
|
|
|
icons_enabled = false,
|
2023-06-29 22:34:45 -04:00
|
|
|
symbols = {
|
2023-09-27 00:12:43 -03:00
|
|
|
modified = "",
|
|
|
|
|
readonly = "",
|
|
|
|
|
unnamed = "",
|
|
|
|
|
new = "",
|
2023-06-29 22:34:45 -04:00
|
|
|
},
|
2023-09-27 00:12:43 -03:00
|
|
|
},
|
2023-06-27 23:35:00 -04:00
|
|
|
},
|
2023-09-27 00:12:43 -03:00
|
|
|
lualine_z = { "searchcount", "progress", "location" },
|
2023-06-28 00:24:41 -04:00
|
|
|
},
|
2023-09-01 15:34:07 -04:00
|
|
|
tabline = {
|
|
|
|
|
lualine_a = {
|
|
|
|
|
{
|
2023-09-27 00:12:43 -03:00
|
|
|
"buffers",
|
2023-09-01 15:34:07 -04:00
|
|
|
show_filename_only = false,
|
|
|
|
|
max_length = function()
|
|
|
|
|
return math.max(math.ceil(vim.o.columns * 2 / 3), vim.o.columns - 6)
|
2023-09-27 00:12:43 -03:00
|
|
|
end,
|
2023-09-01 15:34:07 -04:00
|
|
|
},
|
|
|
|
|
},
|
2023-09-27 00:12:43 -03:00
|
|
|
lualine_z = { "tabs" },
|
2023-06-28 00:24:41 -04:00
|
|
|
},
|
2023-06-25 23:45:35 -04:00
|
|
|
})
|
2021-06-13 16:20:42 -04:00
|
|
|
|
|
|
|
|
---- Maps ----
|
2023-04-14 19:38:59 -04:00
|
|
|
vim.keymap.set("!", "<C-BS>", "<C-w>")
|
|
|
|
|
vim.keymap.set("v", ">", ">gv")
|
|
|
|
|
vim.keymap.set("v", "<", "<gv")
|
|
|
|
|
vim.keymap.set("n", "<C-L>", ":nohlsearch<CR>")
|
2021-06-13 16:20:42 -04:00
|
|
|
|
|
|
|
|
---- Treesitter ----
|
2023-09-21 10:20:40 -03:00
|
|
|
require("nvim-treesitter.configs").setup({
|
2023-08-02 01:32:45 -04:00
|
|
|
auto_install = true,
|
|
|
|
|
sync_install = false,
|
|
|
|
|
ignore_install = {},
|
2023-08-02 20:08:25 -04:00
|
|
|
modules = {}, -- not used, but it will silence lua_ls
|
2023-08-09 23:06:03 -04:00
|
|
|
incremental_selection = {
|
|
|
|
|
enable = true,
|
|
|
|
|
keymaps = {
|
2023-08-19 23:48:10 -04:00
|
|
|
init_selection = "<Leader><Enter>",
|
2023-08-09 23:06:03 -04:00
|
|
|
node_incremental = "<Enter>",
|
|
|
|
|
node_decremental = "<BS>",
|
|
|
|
|
},
|
|
|
|
|
},
|
2022-06-08 20:16:56 -04:00
|
|
|
ensure_installed = {
|
2023-04-14 19:38:59 -04:00
|
|
|
"bash",
|
|
|
|
|
"c",
|
|
|
|
|
"cmake",
|
|
|
|
|
"comment",
|
|
|
|
|
"cpp",
|
|
|
|
|
"css",
|
2023-09-11 12:38:48 -03:00
|
|
|
"csv",
|
2023-04-14 19:38:59 -04:00
|
|
|
"diff",
|
2023-09-11 12:38:48 -03:00
|
|
|
"dockerfile",
|
2023-04-14 19:38:59 -04:00
|
|
|
"dot",
|
|
|
|
|
"git_config",
|
|
|
|
|
"git_rebase",
|
|
|
|
|
"gitattributes",
|
|
|
|
|
"gitcommit",
|
|
|
|
|
"gitignore",
|
|
|
|
|
"go",
|
|
|
|
|
"html",
|
2023-08-02 01:32:45 -04:00
|
|
|
"htmldjango",
|
2023-04-14 19:38:59 -04:00
|
|
|
"http",
|
|
|
|
|
"ini",
|
|
|
|
|
"javascript",
|
|
|
|
|
"json",
|
|
|
|
|
"kdl",
|
|
|
|
|
"kotlin",
|
|
|
|
|
"latex",
|
|
|
|
|
"lua",
|
|
|
|
|
"make",
|
|
|
|
|
"markdown",
|
|
|
|
|
"markdown_inline",
|
2023-09-11 12:38:48 -03:00
|
|
|
"mermaid",
|
2023-04-14 19:38:59 -04:00
|
|
|
"passwd",
|
|
|
|
|
"perl",
|
|
|
|
|
"php",
|
2023-10-23 14:32:58 -03:00
|
|
|
"proto",
|
2023-04-14 19:38:59 -04:00
|
|
|
"python",
|
|
|
|
|
"regex",
|
2023-09-11 12:38:48 -03:00
|
|
|
"ron",
|
|
|
|
|
"rst",
|
2023-04-14 19:38:59 -04:00
|
|
|
"rust",
|
|
|
|
|
"scss",
|
|
|
|
|
"sql",
|
|
|
|
|
"terraform",
|
|
|
|
|
"toml",
|
|
|
|
|
"typescript",
|
|
|
|
|
"vim",
|
2023-08-04 00:16:59 -04:00
|
|
|
"vimdoc",
|
2023-09-11 12:38:48 -03:00
|
|
|
"xml",
|
2023-04-14 19:38:59 -04:00
|
|
|
"yaml",
|
2022-06-08 20:16:56 -04:00
|
|
|
},
|
2023-04-14 19:38:59 -04:00
|
|
|
highlight = { enable = true, indent = true },
|
|
|
|
|
})
|
2023-03-27 01:12:15 -03:00
|
|
|
|
2023-03-27 01:03:04 -03:00
|
|
|
---- Filetypes ---
|
2023-06-25 21:54:28 -04:00
|
|
|
-- KDL --
|
2023-04-14 19:38:59 -04:00
|
|
|
vim.filetype.add({ extension = { kdl = "kdl" } })
|
2023-07-19 21:46:54 -04:00
|
|
|
-- Markdown --
|
|
|
|
|
vim.api.nvim_create_autocmd({ "FileType" }, {
|
|
|
|
|
pattern = "markdown",
|
|
|
|
|
callback = function()
|
2023-09-24 23:56:39 -03:00
|
|
|
vim.opt_local.textwidth = 85
|
|
|
|
|
vim.opt_local.spell = true
|
2023-07-19 21:46:54 -04:00
|
|
|
end,
|
|
|
|
|
})
|
2023-06-25 21:54:28 -04:00
|
|
|
-- YAML --
|
|
|
|
|
vim.api.nvim_create_autocmd({ "FileType" }, {
|
2023-11-09 16:22:54 -03:00
|
|
|
pattern = { "yaml", "helm", },
|
2023-06-25 21:54:28 -04:00
|
|
|
callback = function()
|
2023-09-24 23:56:39 -03:00
|
|
|
vim.opt_local.softtabstop = 2
|
|
|
|
|
vim.opt_local.expandtab = true
|
|
|
|
|
vim.opt_local.foldmethod = "indent"
|
2023-06-25 21:54:28 -04:00
|
|
|
end,
|
|
|
|
|
})
|
|
|
|
|
|
2023-04-14 22:08:41 -04:00
|
|
|
---- formatter.nvim ----
|
2023-09-21 10:20:40 -03:00
|
|
|
require("formatter").setup({
|
2023-04-14 22:08:41 -04:00
|
|
|
filetype = {
|
2023-08-02 01:31:15 -04:00
|
|
|
terraform = {
|
|
|
|
|
require("formatter.filetypes.terraform").terraformfmt,
|
2023-09-27 00:12:43 -03:00
|
|
|
},
|
2023-04-14 22:08:41 -04:00
|
|
|
},
|
2023-06-25 21:54:59 -04:00
|
|
|
["*"] = {
|
|
|
|
|
-- "formatter.filetypes.any" defines default configurations for any
|
|
|
|
|
-- filetype
|
2023-09-27 00:12:43 -03:00
|
|
|
require("formatter.filetypes.any").remove_trailing_whitespace,
|
|
|
|
|
},
|
2023-04-14 22:08:41 -04:00
|
|
|
})
|
2023-06-25 21:54:59 -04:00
|
|
|
|
2023-09-21 10:20:40 -03:00
|
|
|
---- LuaSnip
|
|
|
|
|
local luasnip = require("luasnip")
|
|
|
|
|
require("luasnip.loaders.from_lua").lazy_load()
|
|
|
|
|
luasnip.config.set_config({
|
|
|
|
|
store_selection_keys = "<c-s>",
|
|
|
|
|
})
|
|
|
|
|
vim.keymap.set({ "i", "s" }, "<Tab>", function()
|
|
|
|
|
if luasnip.expand_or_jumpable() then
|
|
|
|
|
luasnip.expand_or_jump()
|
|
|
|
|
else
|
|
|
|
|
vim.api.nvim_feedkeys(
|
|
|
|
|
vim.api.nvim_replace_termcodes("<Tab>", true, false, true),
|
|
|
|
|
"n", -- noremap to avoid infinite recursion
|
|
|
|
|
true
|
|
|
|
|
)
|
|
|
|
|
end
|
|
|
|
|
end, { silent = true })
|
|
|
|
|
vim.keymap.set({ "i", "s" }, "<S-Tab>", function()
|
|
|
|
|
if luasnip.jumpable(-1) then
|
|
|
|
|
luasnip.jump(-1)
|
|
|
|
|
end
|
|
|
|
|
end, { silent = true })
|
|
|
|
|
|
|
|
|
|
---- completion-nvim
|
|
|
|
|
local cmp = require("cmp")
|
|
|
|
|
cmp.setup({
|
|
|
|
|
snippet = {
|
|
|
|
|
expand = function(args)
|
|
|
|
|
luasnip.lsp_expand(args.body)
|
|
|
|
|
end,
|
|
|
|
|
},
|
|
|
|
|
window = {
|
|
|
|
|
-- completion = cmp.config.window.bordered(),
|
|
|
|
|
-- documentation = cmp.config.window.bordered(),
|
|
|
|
|
},
|
|
|
|
|
mapping = cmp.mapping.preset.insert({
|
|
|
|
|
["<C-b>"] = cmp.mapping.scroll_docs(-4),
|
|
|
|
|
["<C-f>"] = cmp.mapping.scroll_docs(4),
|
|
|
|
|
["<C-Space>"] = cmp.mapping.complete(),
|
|
|
|
|
["<C-e>"] = cmp.mapping.abort(),
|
|
|
|
|
-- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
|
|
|
|
|
["<CR>"] = cmp.mapping.confirm({ select = false }),
|
|
|
|
|
}),
|
|
|
|
|
sources = cmp.config.sources({
|
|
|
|
|
{ name = "nvim_lsp" },
|
|
|
|
|
{ name = "luasnip" },
|
|
|
|
|
{ name = "path" },
|
|
|
|
|
{ name = "buffer" },
|
|
|
|
|
{ name = "crates" },
|
|
|
|
|
}),
|
|
|
|
|
})
|
2021-06-13 16:20:42 -04:00
|
|
|
---- LSP ----
|
2023-09-24 23:56:39 -03:00
|
|
|
vim.g.lsp_loaded = false
|
|
|
|
|
vim.api.nvim_create_autocmd({ "FileType" }, {
|
|
|
|
|
pattern = {
|
|
|
|
|
"c",
|
|
|
|
|
"cpp",
|
|
|
|
|
"dot",
|
|
|
|
|
"go",
|
|
|
|
|
"javascript",
|
|
|
|
|
"json",
|
|
|
|
|
"latex",
|
|
|
|
|
"lua",
|
|
|
|
|
"python",
|
|
|
|
|
"rust",
|
|
|
|
|
"terraform",
|
|
|
|
|
"tex",
|
|
|
|
|
"toml",
|
|
|
|
|
"typescript",
|
2023-11-10 02:04:44 -03:00
|
|
|
"typst",
|
2023-09-24 23:56:39 -03:00
|
|
|
},
|
|
|
|
|
callback = function()
|
|
|
|
|
if vim.g.lsp_loaded == true then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
vim.g.lsp_loaded = true
|
|
|
|
|
vim.cmd("packadd nvim-lspconfig")
|
|
|
|
|
vim.cmd("packadd lsp_lines.nvim")
|
2023-11-06 22:44:28 -03:00
|
|
|
-- vim.cmd("packadd lsp-timeout.nvim")
|
2021-12-13 22:04:05 -03:00
|
|
|
|
2023-09-24 23:56:39 -03:00
|
|
|
local lsp = require("lspconfig")
|
|
|
|
|
-- Use an on_attach function to only map the following keys
|
|
|
|
|
-- after the language server attaches to the current buffer
|
|
|
|
|
local on_lsp_attach = function(_client, _bufnr)
|
|
|
|
|
vim.keymap.set("n", "gD", vim.lsp.buf.declaration)
|
|
|
|
|
vim.keymap.set("n", "gd", vim.lsp.buf.definition)
|
|
|
|
|
vim.keymap.set("n", "K", vim.lsp.buf.hover)
|
|
|
|
|
vim.keymap.set("n", "gi", vim.lsp.buf.implementation)
|
|
|
|
|
vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help)
|
|
|
|
|
vim.keymap.set("n", "<Leader>D", vim.lsp.buf.type_definition)
|
|
|
|
|
vim.keymap.set("n", "<Leader>rn", vim.lsp.buf.rename)
|
|
|
|
|
vim.keymap.set("n", "<Leader>ca", vim.lsp.buf.code_action)
|
|
|
|
|
vim.keymap.set("n", "gr", vim.lsp.buf.references)
|
|
|
|
|
vim.keymap.set("n", "<Leader>e", vim.diagnostic.open_float)
|
|
|
|
|
vim.keymap.set("n", "[d", vim.diagnostic.goto_prev)
|
|
|
|
|
vim.keymap.set("n", "]d", vim.diagnostic.goto_next)
|
|
|
|
|
vim.keymap.set("n", "<Leader>q", vim.diagnostic.setloclist)
|
|
|
|
|
vim.keymap.set("n", "<F3>", function()
|
|
|
|
|
vim.lsp.buf.format({ async = true })
|
|
|
|
|
end)
|
|
|
|
|
end
|
2021-12-13 22:04:05 -03:00
|
|
|
|
2023-09-24 23:56:39 -03:00
|
|
|
-- Use a loop to conveniently call 'setup' on multiple servers and
|
|
|
|
|
-- map buffer local keybindings when the language server attaches
|
|
|
|
|
local servers = {
|
2023-10-23 14:32:58 -03:00
|
|
|
clangd = {
|
|
|
|
|
filetypes = { "c", "cpp" }
|
|
|
|
|
},
|
2023-09-24 23:56:39 -03:00
|
|
|
dotls = {},
|
|
|
|
|
eslint = {},
|
|
|
|
|
gopls = {},
|
|
|
|
|
jsonls = {},
|
|
|
|
|
kotlin_language_server = {},
|
|
|
|
|
lua_ls = {
|
|
|
|
|
settings = {
|
|
|
|
|
Lua = {
|
|
|
|
|
runtime = { version = "LuaJIT" },
|
|
|
|
|
diagnostics = {
|
|
|
|
|
globals = { "vim" },
|
|
|
|
|
unusedLocalExclude = { "_*" },
|
|
|
|
|
},
|
|
|
|
|
workspace = {
|
|
|
|
|
checkThirdParty = false,
|
|
|
|
|
library = vim.api.nvim_get_runtime_file("", true),
|
|
|
|
|
},
|
|
|
|
|
telemetry = { enable = false },
|
|
|
|
|
},
|
2023-08-02 14:41:24 -04:00
|
|
|
},
|
2023-04-18 01:46:22 -04:00
|
|
|
},
|
2023-09-24 23:56:39 -03:00
|
|
|
pylsp = {},
|
2023-11-01 21:49:22 -03:00
|
|
|
rust_analyzer = {
|
|
|
|
|
settings = {
|
|
|
|
|
['rust-analyzer'] = {
|
|
|
|
|
cargo = {
|
|
|
|
|
features = "all"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2023-09-24 23:56:39 -03:00
|
|
|
taplo = {},
|
|
|
|
|
texlab = {},
|
|
|
|
|
tflint = {},
|
|
|
|
|
tsserver = {},
|
2023-11-10 02:04:44 -03:00
|
|
|
typst_lsp = {},
|
2023-09-24 23:56:39 -03:00
|
|
|
}
|
2023-09-21 10:20:40 -03:00
|
|
|
|
2023-09-27 00:12:43 -03:00
|
|
|
local capabilities = require("cmp_nvim_lsp").default_capabilities()
|
2023-09-24 23:56:39 -03:00
|
|
|
lsp.util.default_config = vim.tbl_deep_extend("force", lsp.util.default_config, { capabilities = capabilities })
|
|
|
|
|
for server, add_to_config in pairs(servers) do
|
|
|
|
|
local config = {
|
|
|
|
|
on_attach = on_lsp_attach,
|
|
|
|
|
flags = {
|
|
|
|
|
debounce_text_changes = 150,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
for k, v in pairs(add_to_config) do
|
|
|
|
|
config[k] = v
|
|
|
|
|
end
|
|
|
|
|
lsp[server].setup(config)
|
|
|
|
|
end
|
2023-09-27 00:12:43 -03:00
|
|
|
vim.cmd("LspStart")
|
2023-09-24 23:56:39 -03:00
|
|
|
|
|
|
|
|
---- lsp_lines
|
|
|
|
|
require("lsp_lines").setup()
|
|
|
|
|
-- Disable virtual_text since it's redundant due to lsp_lines.
|
|
|
|
|
vim.diagnostic.config({
|
|
|
|
|
virtual_text = false,
|
|
|
|
|
})
|
2023-10-16 15:42:42 -03:00
|
|
|
|
|
|
|
|
---- lsp-timeout
|
2023-11-06 22:44:28 -03:00
|
|
|
-- vim.g["lsp-timeout-config"] = {
|
|
|
|
|
-- stopTimeout = 1000 * 60 * 5, -- ms, timeout before stopping all LSP servers
|
|
|
|
|
-- startTimeout = 1000 * 2, -- ms, timeout before restart
|
|
|
|
|
-- silent = false -- true to suppress notifications
|
|
|
|
|
-- }
|
2023-09-27 00:12:43 -03:00
|
|
|
end,
|
2023-09-24 23:56:39 -03:00
|
|
|
})
|
2021-06-13 16:20:42 -04:00
|
|
|
|
2022-06-07 12:55:56 -04:00
|
|
|
-- Auto format on save
|
2023-03-27 16:09:35 -03:00
|
|
|
vim.api.nvim_create_autocmd({ "BufWritePre" }, {
|
|
|
|
|
callback = function()
|
2023-04-18 01:46:22 -04:00
|
|
|
local lsp_format = false
|
2023-06-25 21:54:59 -04:00
|
|
|
for _, client in pairs(vim.lsp.buf_get_clients()) do
|
2023-04-18 01:46:22 -04:00
|
|
|
if client.server_capabilities.documentFormattingProvider then
|
|
|
|
|
lsp_format = true
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if lsp_format then
|
2023-04-17 22:40:25 -04:00
|
|
|
vim.lsp.buf.format({ async = false })
|
2023-04-18 01:46:22 -04:00
|
|
|
else
|
2023-09-24 23:56:39 -03:00
|
|
|
vim.cmd("Format")
|
2023-04-17 22:40:25 -04:00
|
|
|
end
|
2023-04-17 18:50:56 -04:00
|
|
|
end,
|
|
|
|
|
})
|
2022-06-07 12:55:56 -04:00
|
|
|
|
2023-03-27 16:09:35 -03:00
|
|
|
---- nvim-lint ----
|
2023-04-14 19:38:59 -04:00
|
|
|
local lint = require("lint")
|
|
|
|
|
local clippy_format = "%E%f:%l:%c: %\\d%#:%\\d%# %.%\\{-}"
|
2023-04-18 01:46:22 -04:00
|
|
|
.. "error:%.%\\{-} %m,%W%f:%l:%c: %\\d%#:%\\d%# %.%\\{-}"
|
|
|
|
|
.. "warning:%.%\\{-} %m,%C%f:%l %m,%-G,%-G"
|
|
|
|
|
.. "error: aborting %.%#,%-G"
|
|
|
|
|
.. "error: Could not compile %.%#,%E"
|
|
|
|
|
.. "error: %m,%Eerror[E%n]: %m,%-G"
|
|
|
|
|
.. "warning: the option `Z` is unstable %.%#,%W"
|
|
|
|
|
.. "warning: %m,%Inote: %m,%C %#--> %f:%l:%c"
|
2023-04-07 23:10:00 -04:00
|
|
|
|
2023-04-17 23:53:58 -04:00
|
|
|
-- clippy --
|
2023-04-07 23:10:00 -04:00
|
|
|
lint.linters.clippy = {
|
2023-08-02 01:31:51 -04:00
|
|
|
name = "clippy",
|
2023-08-02 15:59:28 -04:00
|
|
|
cmd = "cargo",
|
2023-04-07 23:10:00 -04:00
|
|
|
stdin = false,
|
2023-08-02 15:59:28 -04:00
|
|
|
append_fname = false,
|
|
|
|
|
args = { "clippy" },
|
2023-04-14 19:38:59 -04:00
|
|
|
stream = "stdout",
|
2023-08-04 01:08:21 -04:00
|
|
|
ignore_exitcode = true,
|
2023-04-07 23:10:00 -04:00
|
|
|
env = nil,
|
2023-04-14 19:38:59 -04:00
|
|
|
parser = require("lint.parser").from_errorformat(clippy_format),
|
2023-04-07 23:10:00 -04:00
|
|
|
}
|
|
|
|
|
|
2023-04-17 23:53:58 -04:00
|
|
|
-- sqlfluff --
|
2023-04-17 23:10:56 -04:00
|
|
|
lint.linters.sqlfluff.args = {
|
|
|
|
|
"lint",
|
|
|
|
|
"--format=json",
|
2023-08-02 01:31:51 -04:00
|
|
|
"--dialect=postgres",
|
2023-04-17 23:10:56 -04:00
|
|
|
}
|
|
|
|
|
|
2023-04-17 23:53:58 -04:00
|
|
|
-- yamllint --
|
|
|
|
|
lint.linters.yamllint.args = {
|
|
|
|
|
args = { "--format=parsable", "-d relaxed" },
|
|
|
|
|
}
|
|
|
|
|
|
2023-04-18 01:46:22 -04:00
|
|
|
local linters = {
|
2023-04-14 19:38:59 -04:00
|
|
|
bash = { "shellcheck" },
|
2023-04-17 15:52:33 -04:00
|
|
|
dockerfile = { "hadolint" },
|
2023-04-14 19:38:59 -04:00
|
|
|
go = { "golangcilint" },
|
|
|
|
|
python = { "flake8" },
|
2023-08-29 16:37:38 -04:00
|
|
|
-- rust = { "clippy" },
|
2023-04-17 15:52:33 -04:00
|
|
|
sql = { "sqlfluff" },
|
2023-04-14 19:38:59 -04:00
|
|
|
yaml = { "yamllint" },
|
2023-03-27 16:09:35 -03:00
|
|
|
}
|
|
|
|
|
-- set linters --
|
|
|
|
|
lint.linters_by_ft = linters
|
|
|
|
|
-- set autocommands --
|
2023-04-07 23:10:00 -04:00
|
|
|
for ft, ft_linters in pairs(linters) do
|
|
|
|
|
local on_change = false
|
|
|
|
|
local on_write = false
|
2023-04-17 22:16:23 -04:00
|
|
|
for _, l in ipairs(ft_linters) do
|
|
|
|
|
if lint.linters[l].stdin then
|
2023-04-07 23:10:00 -04:00
|
|
|
on_change = true
|
|
|
|
|
else
|
|
|
|
|
on_write = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if on_change then
|
2023-04-14 19:38:59 -04:00
|
|
|
vim.api.nvim_create_autocmd({ "FileType" }, {
|
|
|
|
|
pattern = ft,
|
|
|
|
|
callback = function()
|
|
|
|
|
vim.api.nvim_create_autocmd({ "TextChanged" }, {
|
|
|
|
|
callback = function()
|
|
|
|
|
lint.try_lint(nil, { ignore_errors = true })
|
|
|
|
|
end,
|
|
|
|
|
})
|
|
|
|
|
end,
|
|
|
|
|
})
|
2023-04-07 23:10:00 -04:00
|
|
|
end
|
|
|
|
|
if on_write then
|
2023-04-14 19:38:59 -04:00
|
|
|
vim.api.nvim_create_autocmd({ "FileType" }, {
|
|
|
|
|
pattern = ft,
|
|
|
|
|
callback = function()
|
|
|
|
|
vim.api.nvim_create_autocmd({ "BufWritePost" }, {
|
|
|
|
|
callback = function()
|
|
|
|
|
lint.try_lint(nil, { ignore_errors = true })
|
|
|
|
|
end,
|
|
|
|
|
})
|
2023-08-02 15:59:28 -04:00
|
|
|
-- we want to also call linters here so we don't wait
|
|
|
|
|
-- for the first write to happen
|
|
|
|
|
lint.try_lint(nil, { ignore_errors = true })
|
2023-04-14 19:38:59 -04:00
|
|
|
end,
|
|
|
|
|
})
|
2023-04-07 23:10:00 -04:00
|
|
|
end
|
|
|
|
|
end
|
2023-03-27 12:59:11 -03:00
|
|
|
|
2023-08-20 00:50:37 -04:00
|
|
|
---- gitblame
|
|
|
|
|
local gitblame = require("gitblame")
|
|
|
|
|
gitblame.setup({
|
|
|
|
|
enabled = false,
|
|
|
|
|
})
|
2023-09-29 14:01:51 -03:00
|
|
|
vim.keymap.set({ "n" }, "<leader>oc", gitblame.open_commit_url)
|
|
|
|
|
vim.keymap.set({ "n" }, "<leader>tb", ":GitBlameToggle<CR>")
|
2022-06-20 20:42:48 -04:00
|
|
|
---- gitsigns.nvim
|
2023-04-14 19:38:59 -04:00
|
|
|
require("gitsigns").setup({
|
2023-08-02 14:41:24 -04:00
|
|
|
on_attach = function(_bufnr)
|
2022-06-20 20:42:48 -04:00
|
|
|
local gs = package.loaded.gitsigns
|
|
|
|
|
|
|
|
|
|
-- Navigation
|
2023-04-14 19:38:59 -04:00
|
|
|
vim.keymap.set("n", "]c", function()
|
|
|
|
|
if vim.wo.diff then
|
|
|
|
|
return "]c"
|
|
|
|
|
end
|
|
|
|
|
vim.schedule(function()
|
|
|
|
|
gs.next_hunk()
|
|
|
|
|
end)
|
|
|
|
|
return "<Ignore>"
|
|
|
|
|
end, { expr = true })
|
2022-06-20 20:42:48 -04:00
|
|
|
|
2023-04-14 19:38:59 -04:00
|
|
|
vim.keymap.set("n", "[c", function()
|
|
|
|
|
if vim.wo.diff then
|
|
|
|
|
return "[c"
|
|
|
|
|
end
|
|
|
|
|
vim.schedule(function()
|
|
|
|
|
gs.prev_hunk()
|
|
|
|
|
end)
|
|
|
|
|
return "<Ignore>"
|
|
|
|
|
end, { expr = true })
|
|
|
|
|
end,
|
|
|
|
|
})
|
2022-06-21 20:53:24 -04:00
|
|
|
---- Comment.nvim
|
2023-04-14 19:38:59 -04:00
|
|
|
require("Comment").setup()
|
2021-06-13 16:20:42 -04:00
|
|
|
---- Telescope
|
2023-04-14 19:38:59 -04:00
|
|
|
local telescope = require("telescope")
|
|
|
|
|
telescope.setup({
|
2021-09-21 12:26:07 -03:00
|
|
|
defaults = {
|
2023-04-14 19:38:59 -04:00
|
|
|
file_ignore_patterns = { "%.avif", "%.jpg", "%.pdf", "%.png", "%.webp" },
|
2023-04-12 23:37:22 -04:00
|
|
|
},
|
|
|
|
|
pickers = {
|
|
|
|
|
find_files = {
|
2023-09-12 01:28:42 -03:00
|
|
|
find_command = { "fd", "--type", "f", "--hidden", "--exclude", ".git", "--exclude", ".gitmodules" },
|
2023-04-14 19:38:59 -04:00
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
telescope.load_extension("fzy_native")
|
|
|
|
|
telescope.load_extension("luasnip")
|
|
|
|
|
local builtin = require("telescope.builtin")
|
2023-09-12 01:28:42 -03:00
|
|
|
vim.keymap.set("n", "<Leader>f", builtin.find_files)
|
2023-04-14 19:38:59 -04:00
|
|
|
vim.keymap.set("n", "<Leader>b", builtin.buffers)
|
|
|
|
|
vim.keymap.set("n", "<Leader>/", builtin.current_buffer_fuzzy_find)
|
|
|
|
|
vim.keymap.set("n", "<Leader>g", builtin.live_grep)
|
|
|
|
|
vim.keymap.set("n", "<Leader>cg", builtin.grep_string)
|
|
|
|
|
vim.keymap.set("n", "<Leader>:", builtin.commands)
|
|
|
|
|
vim.keymap.set("n", "<Leader>s", telescope.extensions.luasnip.luasnip)
|
2023-03-05 01:21:04 -03:00
|
|
|
---- nvim-dap
|
2023-09-21 10:20:40 -03:00
|
|
|
vim.g.dap_loaded = false
|
|
|
|
|
vim.api.nvim_create_autocmd({ "FileType" }, {
|
|
|
|
|
pattern = { "go" },
|
|
|
|
|
callback = function()
|
|
|
|
|
vim.g.dap_loaded = true
|
|
|
|
|
vim.cmd("packadd nvim-dap")
|
|
|
|
|
vim.cmd("packadd nvim-dap-ui")
|
2023-10-19 20:07:37 -03:00
|
|
|
vim.cmd("packadd nvim-dap-go")
|
2023-09-21 10:20:40 -03:00
|
|
|
|
|
|
|
|
local dap = require("dap")
|
|
|
|
|
vim.fn.sign_define("DapBreakpoint", { text = "🟥", texthl = "", linehl = "", numhl = "" })
|
|
|
|
|
vim.fn.sign_define("DapStopped", { text = "▶️", texthl = "", linehl = "", numhl = "" })
|
|
|
|
|
-- Set keymaps to control the debugger
|
|
|
|
|
vim.keymap.set("n", "<leader>dc", dap.continue)
|
|
|
|
|
vim.keymap.set("n", "<leader>do", dap.step_over)
|
|
|
|
|
vim.keymap.set("n", "<leader>di", dap.step_into)
|
|
|
|
|
vim.keymap.set("n", "<leader>dO", dap.step_out)
|
|
|
|
|
vim.keymap.set("n", "<leader>db", dap.toggle_breakpoint)
|
|
|
|
|
vim.keymap.set("n", "<leader>dB", function()
|
|
|
|
|
dap.set_breakpoint(vim.fn.input("Breakpoint condition: "))
|
|
|
|
|
end)
|
|
|
|
|
local dapui = require("dapui")
|
|
|
|
|
dap.listeners.after.event_initialized["dapui_config"] = function()
|
|
|
|
|
dapui.open()
|
|
|
|
|
end
|
|
|
|
|
dap.listeners.before.event_terminated["dapui_config"] = function()
|
|
|
|
|
dapui.close()
|
|
|
|
|
end
|
|
|
|
|
dap.listeners.before.event_exited["dapui_config"] = function()
|
|
|
|
|
dapui.close()
|
|
|
|
|
end
|
|
|
|
|
-- nvim-dap-go
|
|
|
|
|
require("dap-go").setup()
|
|
|
|
|
end,
|
|
|
|
|
})
|
2023-04-12 23:37:22 -04:00
|
|
|
|
|
|
|
|
---- web-devicons
|
2023-04-14 19:38:59 -04:00
|
|
|
require("nvim-web-devicons").setup()
|
2023-08-18 23:06:43 -04:00
|
|
|
|
|
|
|
|
---- nvim-osc52
|
2023-09-27 00:12:43 -03:00
|
|
|
vim.keymap.set("n", "<leader>y", require("osc52").copy_operator, { expr = true })
|
|
|
|
|
vim.keymap.set("n", "<leader>yy", "<leader>y_", { remap = true })
|
|
|
|
|
vim.keymap.set("v", "<leader>y", require("osc52").copy_visual)
|
2023-08-19 23:48:10 -04:00
|
|
|
|
|
|
|
|
---- crates
|
2023-09-21 10:20:40 -03:00
|
|
|
vim.g.crates_loaded = false
|
|
|
|
|
vim.api.nvim_create_autocmd({ "BufEnter" }, {
|
|
|
|
|
pattern = { "Cargo.toml" },
|
|
|
|
|
callback = function()
|
|
|
|
|
if vim.g.crates_loaded then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
vim.g.crates_loaded = true
|
|
|
|
|
vim.cmd("packadd crates.nvim")
|
|
|
|
|
|
2023-09-27 00:12:43 -03:00
|
|
|
local crates = require("crates")
|
2023-09-21 10:20:40 -03:00
|
|
|
crates.setup()
|
2023-09-27 00:12:43 -03:00
|
|
|
vim.keymap.set("n", "<leader>cv", crates.show_versions_popup)
|
|
|
|
|
vim.keymap.set("n", "<leader>cf", crates.show_features_popup)
|
|
|
|
|
vim.keymap.set("n", "<leader>cd", crates.show_dependencies_popup)
|
|
|
|
|
vim.keymap.set("n", "<leader>cu", crates.update_crate)
|
|
|
|
|
vim.keymap.set("v", "<leader>cu", crates.update_crates)
|
2023-10-23 16:17:26 -03:00
|
|
|
vim.keymap.set("n", "<leader>cA", crates.update_all_crates)
|
2023-09-27 00:12:43 -03:00
|
|
|
vim.keymap.set("n", "<leader>cD", crates.open_documentation)
|
2023-09-21 10:20:40 -03:00
|
|
|
end,
|
|
|
|
|
})
|
2023-08-20 00:49:23 -04:00
|
|
|
|
|
|
|
|
---- neotest
|
2023-09-21 10:20:40 -03:00
|
|
|
vim.g.neotest_loaded = false
|
|
|
|
|
vim.api.nvim_create_autocmd({ "FileType" }, {
|
|
|
|
|
pattern = { "rust" },
|
|
|
|
|
callback = function()
|
|
|
|
|
if vim.g.neotest_loaded then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
vim.g.neotest_loaded = true
|
|
|
|
|
vim.cmd("packadd neotest")
|
|
|
|
|
vim.cmd("packadd neotest-rust")
|
|
|
|
|
|
|
|
|
|
local neotest = require("neotest")
|
|
|
|
|
neotest.setup({
|
|
|
|
|
adapters = {
|
2023-09-27 00:12:43 -03:00
|
|
|
require("neotest-rust"),
|
|
|
|
|
},
|
2023-09-21 10:20:40 -03:00
|
|
|
})
|
2023-09-27 00:12:43 -03:00
|
|
|
vim.keymap.set("n", "<leader>tr", function()
|
|
|
|
|
neotest.run.run()
|
|
|
|
|
end)
|
|
|
|
|
vim.keymap.set("n", "<leader>tf", function()
|
|
|
|
|
neotest.run.run(vim.fn.expand("%"))
|
|
|
|
|
end)
|
|
|
|
|
vim.keymap.set("n", "<leader>ts", function()
|
|
|
|
|
neotest.run.stop()
|
|
|
|
|
end)
|
|
|
|
|
vim.keymap.set("n", "<leader>tt", function()
|
|
|
|
|
neotest.summary.toggle()
|
|
|
|
|
end)
|
|
|
|
|
end,
|
2023-08-20 00:49:23 -04:00
|
|
|
})
|
2023-09-21 10:20:40 -03:00
|
|
|
|
2023-09-22 22:57:02 -03:00
|
|
|
---- nvim-surround
|
|
|
|
|
require("nvim-surround").setup()
|
2023-09-22 23:16:35 -03:00
|
|
|
|
2023-11-10 01:11:22 -03:00
|
|
|
---- nvim-spider
|
2023-09-22 23:16:35 -03:00
|
|
|
-- we need to use the ex-command version to cal the commands to allow dot repeatability
|
|
|
|
|
-- see: https://github.com/chrisgrieser/nvim-spider#installation
|
|
|
|
|
vim.keymap.set({ "n", "o", "x" }, "w", "<cmd>lua require('spider').motion('w')<CR>", { desc = "Spider-w" })
|
|
|
|
|
vim.keymap.set({ "n", "o", "x" }, "e", "<cmd>lua require('spider').motion('e')<CR>", { desc = "Spider-e" })
|
|
|
|
|
vim.keymap.set({ "n", "o", "x" }, "b", "<cmd>lua require('spider').motion('b')<CR>", { desc = "Spider-b" })
|
|
|
|
|
vim.keymap.set({ "n", "o", "x" }, "ge", "<cmd>lua require('spider').motion('ge')<CR>", { desc = "Spider-ge" })
|
2023-11-10 01:11:22 -03:00
|
|
|
|
|
|
|
|
---- colorizer
|
2023-11-10 00:58:38 -03:00
|
|
|
require 'colorizer'.setup({
|
|
|
|
|
user_default_options = {
|
|
|
|
|
names = false,
|
|
|
|
|
css_fn = true,
|
|
|
|
|
}
|
|
|
|
|
})
|
2023-11-10 01:11:22 -03:00
|
|
|
|
|
|
|
|
---- ferris.nvim
|
|
|
|
|
vim.g.ferris_loaded = false
|
|
|
|
|
vim.api.nvim_create_autocmd({ "FileType" }, {
|
|
|
|
|
pattern = { "rust" },
|
|
|
|
|
callback = function()
|
|
|
|
|
if vim.g.ferris_loaded then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
vim.g.ferris_loaded = true
|
|
|
|
|
vim.cmd("packadd ferris.nvim")
|
|
|
|
|
|
|
|
|
|
require("ferris").setup()
|
|
|
|
|
vim.keymap.set("n", "<leader>od", require("ferris.methods.open_documentation"))
|
|
|
|
|
end,
|
|
|
|
|
})
|
2023-11-10 02:04:44 -03:00
|
|
|
|
|
|
|
|
---- typst-preview
|
|
|
|
|
vim.g.typst_loaded = false
|
|
|
|
|
vim.api.nvim_create_autocmd({ "FileType" }, {
|
|
|
|
|
pattern = { "typst" },
|
|
|
|
|
callback = function()
|
|
|
|
|
if vim.g.typst_loaded then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
vim.g.typst_loaded = true
|
|
|
|
|
vim.cmd("packadd core.nvim")
|
|
|
|
|
vim.cmd("packadd typst-preview.nvim")
|
|
|
|
|
|
|
|
|
|
local typst_preview = require("typst-preview")
|
|
|
|
|
typst_preview.setup({
|
|
|
|
|
preview = function(output_file)
|
|
|
|
|
require("core").job.spawn("xdg-open", {
|
|
|
|
|
output_file,
|
|
|
|
|
}, {}, function() end, function() end, function() end)
|
|
|
|
|
end,
|
|
|
|
|
})
|
|
|
|
|
typst_preview.preview()
|
|
|
|
|
end,
|
|
|
|
|
})
|