feat(nvim): some devops stuff, additions and optimizations for nvim
This commit is contained in:
@@ -3,4 +3,3 @@ require("config.keymaps")
|
||||
require("config.autocmds")
|
||||
require("config.diagnostics")
|
||||
require("config.lazy")
|
||||
|
||||
|
||||
@@ -9,4 +9,3 @@ vim.api.nvim_create_autocmd("TextYankPost", {
|
||||
})
|
||||
|
||||
-- optional: auto format on save (handled by conform too, but this is a safe place for extra logic later)
|
||||
|
||||
|
||||
@@ -18,4 +18,3 @@ vim.diagnostic.config({
|
||||
severity_sort = true,
|
||||
float = { border = "rounded", source = "if_many" },
|
||||
})
|
||||
|
||||
|
||||
@@ -20,3 +20,13 @@ map("n", "<leader>fg", "<cmd>Telescope live_grep<cr>", { desc = "Live grep" })
|
||||
map("n", "<leader>fb", "<cmd>Telescope buffers<cr>", { desc = "Buffers" })
|
||||
map("n", "<leader>fh", "<cmd>Telescope help_tags<cr>", { desc = "Help" })
|
||||
|
||||
-- file tree
|
||||
map("n", "<leader>tt", "<cmd>Neotree toggle<cr>", { desc = "Toggle file tree" })
|
||||
map("n", "<leader>tf", "<cmd>Neotree reveal<cr>", { desc = "Reveal file in tree" })
|
||||
|
||||
-- Git
|
||||
map("n", "<leader>gs", "<cmd>Git<cr>", { desc = "Git status" })
|
||||
map("n", "<leader>gg", "<cmd>LazyGit<cr>", { desc = "LazyGit" })
|
||||
map("n", "<leader>gd", "<cmd>DiffviewOpen<cr>", { desc = "Diffview open" })
|
||||
map("n", "<leader>gD", "<cmd>DiffviewClose<cr>", { desc = "Diffview close" })
|
||||
map("n", "<leader>gh", "<cmd>DiffviewFileHistory<cr>", { desc = "Diffview file history" })
|
||||
|
||||
@@ -19,4 +19,3 @@ require("lazy").setup({
|
||||
checker = { enabled = true },
|
||||
ui = { border = "rounded" },
|
||||
})
|
||||
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
vim.g.mapleader = " "
|
||||
vim.g.maplocalleader = " "
|
||||
|
||||
local mason_bin = vim.fn.stdpath("data") .. "/mason/bin"
|
||||
local path = vim.env.PATH or ""
|
||||
if not string.find(path, mason_bin, 1, true) then
|
||||
vim.env.PATH = mason_bin .. ":" .. path
|
||||
end
|
||||
|
||||
local opt = vim.opt
|
||||
opt.number = true
|
||||
opt.relativenumber = true
|
||||
@@ -28,4 +34,3 @@ opt.timeoutlen = 400
|
||||
|
||||
opt.clipboard = "unnamedplus"
|
||||
opt.undofile = true
|
||||
|
||||
|
||||
@@ -65,4 +65,3 @@ return {
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,13 @@
|
||||
return {
|
||||
{ "nvim-lua/plenary.nvim", lazy = true },
|
||||
{ "nvim-lua/plenary.nvim", lazy = true },
|
||||
|
||||
{ "folke/which-key.nvim", event = "VeryLazy", opts = {} },
|
||||
{ "folke/which-key.nvim", event = "VeryLazy", opts = {} },
|
||||
|
||||
{ "numToStr/Comment.nvim", event = "VeryLazy", opts = {} },
|
||||
{ "numToStr/Comment.nvim", event = "VeryLazy", opts = {} },
|
||||
|
||||
{ "kylechui/nvim-surround", event = "VeryLazy", opts = {} },
|
||||
{ "kylechui/nvim-surround", event = "VeryLazy", opts = {} },
|
||||
|
||||
{ "windwp/nvim-autopairs", event = "InsertEnter", opts = {} },
|
||||
{ "windwp/nvim-autopairs", event = "InsertEnter", opts = {} },
|
||||
|
||||
{ "lewis6991/gitsigns.nvim", event = "VeryLazy", opts = {} },
|
||||
|
||||
{ 'wakatime/vim-wakatime', lazy = false },
|
||||
{ "wakatime/vim-wakatime", lazy = false },
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
return {
|
||||
{
|
||||
"towolf/vim-helm",
|
||||
lazy = false,
|
||||
},
|
||||
{
|
||||
"hashivim/vim-terraform",
|
||||
ft = { "terraform", "hcl" },
|
||||
},
|
||||
{
|
||||
"ekalinin/Dockerfile.vim",
|
||||
ft = { "dockerfile" },
|
||||
},
|
||||
{
|
||||
"pearofducks/ansible-vim",
|
||||
lazy = false,
|
||||
},
|
||||
{
|
||||
"b0o/schemastore.nvim",
|
||||
lazy = true,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
return {
|
||||
{
|
||||
"nvim-neo-tree/neo-tree.nvim",
|
||||
branch = "v3.x",
|
||||
cmd = "Neotree",
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
"nvim-tree/nvim-web-devicons",
|
||||
"MunifTanjim/nui.nvim",
|
||||
},
|
||||
opts = {
|
||||
sources = { "filesystem", "buffers", "git_status" },
|
||||
close_if_last_window = true,
|
||||
filesystem = {
|
||||
follow_current_file = { enabled = true },
|
||||
hijack_netrw_behavior = "open_default",
|
||||
use_libuv_file_watcher = true,
|
||||
},
|
||||
window = { width = 32 },
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
return {
|
||||
{
|
||||
"lewis6991/gitsigns.nvim",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
opts = {
|
||||
on_attach = function(bufnr)
|
||||
local gs = package.loaded.gitsigns
|
||||
local map = function(mode, lhs, rhs, desc)
|
||||
vim.keymap.set(mode, lhs, rhs, { buffer = bufnr, desc = desc })
|
||||
end
|
||||
|
||||
map("n", "]h", gs.next_hunk, "Next hunk")
|
||||
map("n", "[h", gs.prev_hunk, "Prev hunk")
|
||||
map("n", "<leader>hs", gs.stage_hunk, "Stage hunk")
|
||||
map("n", "<leader>hS", gs.stage_buffer, "Stage buffer")
|
||||
map("n", "<leader>hr", gs.reset_hunk, "Reset hunk")
|
||||
map("n", "<leader>hR", gs.reset_buffer, "Reset buffer")
|
||||
map("n", "<leader>hp", gs.preview_hunk, "Preview hunk")
|
||||
map("n", "<leader>hb", gs.blame_line, "Blame line")
|
||||
map("n", "<leader>hd", gs.diffthis, "Diff this")
|
||||
map("n", "<leader>hD", function() gs.diffthis("~") end, "Diff this ~")
|
||||
map("n", "<leader>ht", gs.toggle_current_line_blame, "Toggle line blame")
|
||||
end,
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
"tpope/vim-fugitive",
|
||||
cmd = { "Git", "G", "Gdiffsplit", "Gvdiffsplit", "Gedit" },
|
||||
},
|
||||
|
||||
{
|
||||
"sindrets/diffview.nvim",
|
||||
cmd = { "DiffviewOpen", "DiffviewClose", "DiffviewFileHistory" },
|
||||
},
|
||||
|
||||
{
|
||||
"kdheepak/lazygit.nvim",
|
||||
cmd = {
|
||||
"LazyGit",
|
||||
"LazyGitConfig",
|
||||
"LazyGitCurrentFile",
|
||||
"LazyGitFilter",
|
||||
"LazyGitFilterCurrentFile",
|
||||
},
|
||||
dependencies = { "nvim-lua/plenary.nvim" },
|
||||
},
|
||||
}
|
||||
@@ -1,79 +1,172 @@
|
||||
local function lsp_keymaps(ev)
|
||||
local buf = ev.buf
|
||||
local map = function(mode, lhs, rhs, desc)
|
||||
vim.keymap.set(mode, lhs, rhs, { buffer = buf, desc = desc })
|
||||
end
|
||||
local buf = ev.buf
|
||||
local map = function(mode, lhs, rhs, desc)
|
||||
vim.keymap.set(mode, lhs, rhs, { buffer = buf, desc = desc })
|
||||
end
|
||||
|
||||
map("n", "K", vim.lsp.buf.hover, "Hover")
|
||||
map("n", "gd", vim.lsp.buf.definition, "Go to definition")
|
||||
map("n", "gD", vim.lsp.buf.declaration, "Go to declaration")
|
||||
map("n", "gr", vim.lsp.buf.references, "References")
|
||||
map("n", "gi", vim.lsp.buf.implementation, "Implementation")
|
||||
map("n", "<leader>rn", vim.lsp.buf.rename, "Rename")
|
||||
map("n", "<leader>ca", vim.lsp.buf.code_action, "Code action")
|
||||
map("n", "K", vim.lsp.buf.hover, "Hover")
|
||||
map("n", "gd", vim.lsp.buf.definition, "Go to definition")
|
||||
map("n", "gD", vim.lsp.buf.declaration, "Go to declaration")
|
||||
map("n", "gr", vim.lsp.buf.references, "References")
|
||||
map("n", "gi", vim.lsp.buf.implementation, "Implementation")
|
||||
map("n", "<leader>rn", vim.lsp.buf.rename, "Rename")
|
||||
map("n", "<leader>ca", vim.lsp.buf.code_action, "Code action")
|
||||
|
||||
if vim.lsp.inlay_hint then
|
||||
pcall(vim.lsp.inlay_hint.enable, true, { bufnr = buf })
|
||||
end
|
||||
if vim.lsp.inlay_hint then
|
||||
pcall(vim.lsp.inlay_hint.enable, true, { bufnr = buf })
|
||||
end
|
||||
end
|
||||
|
||||
return {
|
||||
{ "williamboman/mason.nvim", cmd = "Mason", opts = {} },
|
||||
{ "williamboman/mason.nvim", cmd = "Mason", opts = {} },
|
||||
|
||||
{
|
||||
"williamboman/mason-lspconfig.nvim",
|
||||
event = "VeryLazy",
|
||||
dependencies = { "mason.nvim" },
|
||||
opts = {
|
||||
ensure_installed = { "clangd", "gopls", "pyright", "lua_ls" },
|
||||
automatic_installation = true,
|
||||
{
|
||||
"williamboman/mason-lspconfig.nvim",
|
||||
event = "VeryLazy",
|
||||
dependencies = { "mason.nvim" },
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"clangd",
|
||||
"gopls",
|
||||
"pyright",
|
||||
"lua_ls",
|
||||
"rust_analyzer",
|
||||
"asm_lsp",
|
||||
"terraformls",
|
||||
"ansiblels",
|
||||
"dockerls",
|
||||
"yamlls",
|
||||
"jsonls",
|
||||
"helm_ls",
|
||||
},
|
||||
automatic_installation = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Keep nvim-lspconfig installed (it provides server definitions),
|
||||
-- but DO NOT call require("lspconfig") anymore.
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
dependencies = { "hrsh7th/cmp-nvim-lsp" },
|
||||
config = function()
|
||||
vim.api.nvim_create_autocmd("LspAttach", { callback = lsp_keymaps })
|
||||
-- Keep nvim-lspconfig installed (it provides server definitions),
|
||||
-- but DO NOT call require("lspconfig") anymore.
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
dependencies = { "hrsh7th/cmp-nvim-lsp", "b0o/schemastore.nvim" },
|
||||
config = function()
|
||||
vim.api.nvim_create_autocmd("LspAttach", { callback = lsp_keymaps })
|
||||
|
||||
local caps = vim.lsp.protocol.make_client_capabilities()
|
||||
local ok, cmp_lsp = pcall(require, "cmp_nvim_lsp")
|
||||
if ok then
|
||||
caps = cmp_lsp.default_capabilities(caps)
|
||||
end
|
||||
local caps = vim.lsp.protocol.make_client_capabilities()
|
||||
local ok, cmp_lsp = pcall(require, "cmp_nvim_lsp")
|
||||
if ok then
|
||||
caps = cmp_lsp.default_capabilities(caps)
|
||||
end
|
||||
|
||||
vim.lsp.config("clangd", {
|
||||
capabilities = caps,
|
||||
cmd = { "clangd", "--background-index", "--clang-tidy", "--header-insertion=iwyu" },
|
||||
})
|
||||
vim.lsp.config("clangd", {
|
||||
capabilities = caps,
|
||||
cmd = { "clangd", "--background-index", "--clang-tidy", "--header-insertion=iwyu" },
|
||||
})
|
||||
|
||||
vim.lsp.config("gopls", {
|
||||
capabilities = caps,
|
||||
settings = {
|
||||
gopls = {
|
||||
staticcheck = true,
|
||||
analyses = { unusedparams = true, nilness = true, shadow = true },
|
||||
},
|
||||
},
|
||||
})
|
||||
vim.lsp.config("gopls", {
|
||||
capabilities = caps,
|
||||
settings = {
|
||||
gopls = {
|
||||
staticcheck = true,
|
||||
analyses = { unusedparams = true, nilness = true, shadow = true },
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
vim.lsp.config("pyright", { capabilities = caps })
|
||||
vim.lsp.config("pyright", { capabilities = caps })
|
||||
|
||||
vim.lsp.config("lua_ls", {
|
||||
capabilities = caps,
|
||||
settings = {
|
||||
Lua = {
|
||||
diagnostics = { globals = { "vim" } },
|
||||
workspace = { checkThirdParty = false },
|
||||
},
|
||||
},
|
||||
})
|
||||
vim.lsp.config("lua_ls", {
|
||||
capabilities = caps,
|
||||
settings = {
|
||||
Lua = {
|
||||
diagnostics = { globals = { "vim" } },
|
||||
workspace = { checkThirdParty = false },
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
vim.lsp.enable({ "clangd", "gopls", "pyright", "lua_ls" })
|
||||
end,
|
||||
},
|
||||
vim.lsp.config("rust_analyzer", {
|
||||
capabilities = caps,
|
||||
settings = {
|
||||
["rust-analyzer"] = {
|
||||
cargo = { allFeatures = true },
|
||||
checkOnSave = { command = "clippy" },
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
vim.lsp.config("asm_lsp", {
|
||||
capabilities = caps,
|
||||
filetypes = { "asm", "nasm" },
|
||||
})
|
||||
|
||||
vim.lsp.config("terraformls", { capabilities = caps })
|
||||
vim.lsp.config("ansiblels", { capabilities = caps })
|
||||
vim.lsp.config("dockerls", { capabilities = caps })
|
||||
|
||||
local k8s_schema = "https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/v1.27.0-standalone-strict/all.json"
|
||||
local schemastore_ok, schemastore = pcall(require, "schemastore")
|
||||
local yaml_schemas = {}
|
||||
local json_schemas = {}
|
||||
|
||||
if schemastore_ok then
|
||||
yaml_schemas = schemastore.yaml.schemas()
|
||||
json_schemas = schemastore.json.schemas()
|
||||
end
|
||||
|
||||
yaml_schemas[k8s_schema] = {
|
||||
"k8s/**/*.yaml",
|
||||
"k8s/**/*.yml",
|
||||
"kubernetes/**/*.yaml",
|
||||
"kubernetes/**/*.yml",
|
||||
"*.k8s.yaml",
|
||||
"*.k8s.yml",
|
||||
}
|
||||
|
||||
yaml_schemas["https://json.schemastore.org/kustomization.json"] = {
|
||||
"kustomization.yaml",
|
||||
"kustomization.yml",
|
||||
}
|
||||
|
||||
vim.lsp.config("yamlls", {
|
||||
capabilities = caps,
|
||||
settings = {
|
||||
yaml = {
|
||||
validate = true,
|
||||
format = { enable = true },
|
||||
schemaStore = { enable = false, url = "" },
|
||||
schemas = yaml_schemas,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
vim.lsp.config("jsonls", {
|
||||
capabilities = caps,
|
||||
settings = {
|
||||
json = {
|
||||
validate = { enable = true },
|
||||
schemaStore = { enable = false, url = "" },
|
||||
schemas = json_schemas,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
vim.lsp.config("helm_ls", { capabilities = caps })
|
||||
|
||||
vim.lsp.enable({
|
||||
"clangd",
|
||||
"gopls",
|
||||
"pyright",
|
||||
"lua_ls",
|
||||
"rust_analyzer",
|
||||
"asm_lsp",
|
||||
"terraformls",
|
||||
"ansiblels",
|
||||
"dockerls",
|
||||
"yamlls",
|
||||
"jsonls",
|
||||
"helm_ls",
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -1,46 +1,47 @@
|
||||
return {
|
||||
-- formatting
|
||||
{
|
||||
"stevearc/conform.nvim",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
opts = {
|
||||
format_on_save = { timeout_ms = 1500, lsp_fallback = true },
|
||||
formatters_by_ft = {
|
||||
c = { "clang_format" },
|
||||
cpp = { "clang_format" },
|
||||
go = { "gofmt", "goimports" },
|
||||
python = { "isort", "black" },
|
||||
lua = { "stylua" },
|
||||
json = { "prettier" },
|
||||
yaml = { "prettier" },
|
||||
markdown = { "prettier" },
|
||||
},
|
||||
},
|
||||
config = function(_, opts)
|
||||
require("conform").setup(opts)
|
||||
vim.keymap.set("n", "<leader>f", function()
|
||||
require("conform").format({ lsp_fallback = true })
|
||||
end, { desc = "Format buffer" })
|
||||
end,
|
||||
},
|
||||
|
||||
-- linting (optional but nice)
|
||||
{
|
||||
"mfussenegger/nvim-lint",
|
||||
event = { "BufReadPost", "BufNewFile" },
|
||||
config = function()
|
||||
local lint = require("lint")
|
||||
lint.linters_by_ft = {
|
||||
python = { "flake8" },
|
||||
go = { "golangcilint" },
|
||||
}
|
||||
|
||||
vim.api.nvim_create_autocmd({ "BufWritePost", "InsertLeave" }, {
|
||||
callback = function()
|
||||
lint.try_lint()
|
||||
-- formatting
|
||||
{
|
||||
"stevearc/conform.nvim",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
opts = {
|
||||
format_on_save = { timeout_ms = 1500, lsp_fallback = true },
|
||||
formatters_by_ft = {
|
||||
c = { "clang_format" },
|
||||
cpp = { "clang_format" },
|
||||
go = { "gofmt", "goimports" },
|
||||
terraform = { "terraform_fmt" },
|
||||
rust = { "rustfmt" },
|
||||
python = { "isort", "black" },
|
||||
lua = { "stylua" },
|
||||
json = { "prettier" },
|
||||
yaml = { "prettier" },
|
||||
markdown = { "prettier" },
|
||||
},
|
||||
},
|
||||
config = function(_, opts)
|
||||
require("conform").setup(opts)
|
||||
vim.keymap.set("n", "<leader>f", function()
|
||||
require("conform").format({ lsp_fallback = true })
|
||||
end, { desc = "Format buffer" })
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
-- linting (optional but nice)
|
||||
{
|
||||
"mfussenegger/nvim-lint",
|
||||
event = { "BufReadPost", "BufNewFile" },
|
||||
config = function()
|
||||
local lint = require("lint")
|
||||
lint.linters_by_ft = {
|
||||
python = { "flake8" },
|
||||
go = { "golangcilint" },
|
||||
}
|
||||
|
||||
vim.api.nvim_create_autocmd({ "BufWritePost", "InsertLeave" }, {
|
||||
callback = function()
|
||||
lint.try_lint()
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
return {
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
build = ":TSUpdate",
|
||||
event = { "BufReadPost", "BufNewFile" },
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"c", "cpp", "go", "python", "lua",
|
||||
"bash", "json", "yaml", "toml",
|
||||
"markdown", "markdown_inline",
|
||||
"regex", "vim", "vimdoc",
|
||||
},
|
||||
auto_install = true,
|
||||
sync_install = false,
|
||||
highlight = { enable = true },
|
||||
indent = { enable = true },
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
build = ":TSUpdate",
|
||||
event = { "BufReadPost", "BufNewFile" },
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"c", "cpp", "go", "rust", "python", "lua", "asm", "nasm",
|
||||
"terraform", "hcl", "dockerfile",
|
||||
"bash", "json", "yaml", "toml",
|
||||
"markdown", "markdown_inline",
|
||||
"regex", "vim", "vimdoc",
|
||||
},
|
||||
auto_install = true,
|
||||
sync_install = false,
|
||||
highlight = { enable = true },
|
||||
indent = { enable = true },
|
||||
},
|
||||
config = function(_, opts)
|
||||
require("nvim-treesitter").setup(opts)
|
||||
end,
|
||||
},
|
||||
config = function(_, opts)
|
||||
require("nvim-treesitter").setup(opts)
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -38,4 +38,3 @@ return {
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
/Users/itq/dotfiles/.config/nvim
|
||||
Reference in New Issue
Block a user