NeoVim / NVchad customization
Completely changed my NeoVim setup. I tried LunarVim for awhile and settled on nvchad
The installation is installed straight to ~/.config/nvim and can be updated with a git pull.
I modified the installation to add debugging, linting and formating for node.js
.config/nvim/lua/custom/chadrc.lua
---@type ChadrcConfig
local M = {}
M.ui = { theme = 'catppuccin' }
M.plugins = "custom.plugins"
M.mappings = require "custom.mappings"
return M
.config/nvim/lua/custom/mappings.lua
local M = {}
M.dap = {
plugin = true,
n = {
["<leader>db"] = {
"<cmd> DapToggleBreakpoint <CR>",
"Add breakpoint at line"
},
["<leader>dr"] = {
"<cmd> DapContinue <CR>",
"Run or continue the debugger"
}
},
}
return M
.config/nvim/lua/custom/plugins.lua
❯ cat .config/nvim/lua/custom/plugins.lua
local plugins = {
{
"rcarriga/nvim-dap-ui",
event = "VeryLazy",
dependencies = "mfussenegger/nvim-dap",
config = function()
local dap = require("dap")
local dapui = require("dapui")
require("dapui").setup()
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
end
},
{
"mfussenegger/nvim-dap",
event = "VeryLazy",
ft = { "javascript", "typescript" },
config = function()
require "custom.configs.dap"
require("core.utils").load_mappings("dap")
end
},
-- {
-- "jose-elias-alvarez/null-ls.nvim",
-- event = "VeryLazy",
-- opts = function()
-- return require "custom.configs.null-ls"
-- end,
-- },
{
"mhartington/formatter.nvim",
event = "VeryLazy",
opts = function()
return require "custom.configs.formatter"
end
},
{
"mfussenegger/nvim-lint",
event = "VeryLazy",
config = function()
require "custom.configs.lint"
end
},
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"eslint-lsp",
"js-debug-adapter",
"prettier",
"typescript-language-server"
}
}
},
{
"neovim/nvim-lspconfig",
config = function()
require "plugins.configs.lspconfig"
require "custom.configs.lspconfig"
end,
},
}
return plugins
~/.config/nvim/lua/custom/config/dap.lua
local dap = require("dap")
dap.set_log_level 'debug'
dap.adapters["pwa-node"] = {
type = "server",
host = "::1",
port = 8123,
executable = {
command = "js-debug-adapter",
}
}
for _, language in ipairs { "typescript", "javascript" } do
dap.configurations[language] = {
{
type = "pwa-node",
request = "launch",
name = "Launch file",
program = "${file}",
cwd = "${workspaceFolder}",
runtimeExecutable = "node",
},
}
end
~/.config/nvim/lua/custom/config/formatter.lua
local M = {
filetype = {
javascript = {
require("formatter.filetypes.javascript").prettier
},
typescript = {
require("formatter.filetypes.typescript").prettier
},
["*"] = {
require("formatter.filetypes.any").remove_trailing_whitespace
}
}
}
vim.api.nvim_create_autocmd({ "BufWritePost" }, {
command = "FormatWriteLock"
})
return M
~/.config/nvim/lua/custom/config/lint.lua
require('lint').linters_by_ft = {
javascript = {"eslint"},
typescript = {"eslint"},
}
vim.api.nvim_create_autocmd({ "BufWritePost" }, {
callback = function()
require("lint").try_lint()
end,
})
~/.config/nvim/lua/custom/config/lint.lua
local config = require("plugins.configs.lspconfig")
local on_attach = config.on_attach
local capabilities = config.capabilities
local lspconfig = require("lspconfig")
local function organize_imports()
local params = {
command = "_typescript.organizeImports",
arguments = {vim.api.nvim_buf_get_name(0)},
}
vim.lsp.buf.execute_command(params)
end
lspconfig.tsserver.setup {
on_attach = on_attach,
capabilities = capabilities,
init_options = {
preferences = {
disableSuggestions = true,
}
},
commands = {
OrganizeImports = {
organize_imports,
description = "Organize Imports",
}
}
}
~/.config/nvim/lua/custom/config/null-ls.lua
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
local null_ls = require("null-ls")
local opts = {
sources = {
null_ls.builtins.diagnostics.eslint,
null_ls.builtins.formatting.prettier,
},
on_attach = function(client, bufnr)
if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({
group = augroup,
buffer = bufnr,
})
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = function()
vim.lsp.buf.format({ bufnr = bufnr })
end,
})
end
end,
}
return opts