Make nvim great again

This commit is contained in:
Krzysiek Wyka 2026-02-06 12:49:40 +01:00
parent 6cf3d0015e
commit d5f881f96a
3 changed files with 119 additions and 55 deletions

View File

@ -861,30 +861,20 @@ require('lazy').setup({
-- Check out: https://github.com/echasnovski/mini.nvim
end,
},
{ -- Highlight, edit, and navigate code
'nvim-treesitter/nvim-treesitter',
build = ':TSUpdate',
main = 'nvim-treesitter.configs', -- Sets main module to use for opts
-- [[ Configure Treesitter ]] See `:help nvim-treesitter`
opts = {
ensure_installed = { 'bash', 'c', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'markdown_inline', 'query', 'vim', 'vimdoc', 'typescript', 'javascript' },
-- Autoinstall languages that are not installed
auto_install = true,
highlight = {
enable = true,
-- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules.
-- If you are experiencing weird indenting issues, add the language to
-- the list of additional_vim_regex_highlighting and disabled languages for indent.
additional_vim_regex_highlighting = { 'ruby' },
},
indent = { enable = true, disable = { 'ruby' } },
},
-- There are additional nvim-treesitter modules that you can use to interact
-- with nvim-treesitter. You should go explore a few and see what interests you:
--
-- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod`
-- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context
-- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects
config = function()
local filetypes =
{ 'bash', 'c', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'markdown_inline', 'query', 'vim', 'vimdoc', 'typescript', 'javascript', 'graphql' }
require('nvim-treesitter').install(filetypes)
vim.api.nvim_create_autocmd('FileType', {
pattern = filetypes,
callback = function()
vim.treesitter.start()
end,
})
end,
},
-- The following comments only work if you have downloaded the kickstart repo, not just copy pasted the

View File

@ -1,11 +0,0 @@
return {
{
'CopilotC-Nvim/CopilotChat.nvim',
dependencies = {
{ 'github/copilot.vim' },
{ 'nvim-lua/plenary.nvim', branch = 'master' },
},
build = 'make tiktoken',
opts = {},
},
}

View File

@ -23,10 +23,12 @@ return {
-- Add your own debuggers here
'leoluz/nvim-dap-go',
'mxsdev/nvim-dap-vscode-js',
-- Virtual text
'theHamsta/nvim-dap-virtual-text',
-- JSON5 parser for .vscode/launch.json (supports comments and trailing commas)
'Joakker/lua-json5',
},
keys = {
-- Basic debugging keymaps, feel free to change to your liking!
@ -37,6 +39,19 @@ return {
end,
desc = 'Debug: Start/Continue',
},
{
'<S-F5>',
function()
local dap = require('dap')
dap.terminate()
vim.defer_fn(function()
if dap.session() then
dap.close()
end
end, 500)
end,
desc = 'Debug: Stop/Terminate',
},
{
'<F1>',
function()
@ -80,6 +95,18 @@ return {
end,
desc = 'Debug: See last session result.',
},
{
'<leader>dt',
function()
require('dap').terminate()
vim.defer_fn(function()
if require('dap').session() then
require('dap').close()
end
end, 500)
end,
desc = 'Debug: Terminate Session',
},
},
config = function()
local dap = require 'dap'
@ -103,8 +130,13 @@ return {
},
}
-- Read .vscode/launch.json
require('dap.ext.vscode').load_launchjs(nil, {})
-- Enable JSON5 parser for .vscode/launch.json to support comments and trailing commas
-- nvim-dap will automatically load .vscode/launch.json configurations via dap.launch.json provider
-- This allows you to use VSCode-style launch.json files with JavaScript-style comments
local ok, json5 = pcall(require, 'json5')
if ok then
require('dap.ext.vscode').json_decode = json5.parse
end
-- Basic debugging keymaps, feel free to change to your liking!
vim.keymap.set('n', '<F5>', dap.continue, { desc = 'Debug: Start/Continue' })
@ -116,6 +148,16 @@ return {
dap.set_breakpoint(vim.fn.input 'Breakpoint condition: ')
end, { desc = 'Debug: Set Breakpoint' })
-- Terminate session (with force close after timeout)
vim.keymap.set('n', '<leader>dt', function()
dap.terminate()
vim.defer_fn(function()
if dap.session() then
dap.close()
end
end, 500)
end, { desc = 'Debug: Terminate Session' })
-- Dap virtual text setup
require('nvim-dap-virtual-text').setup()
@ -192,37 +234,80 @@ return {
-- end
dap.listeners.after.event_initialized['dapui_config'] = dapui.open
dap.listeners.before.event_terminated['dapui_config'] = dapui.close
dap.listeners.before.event_exited['dapui_config'] = dapui.close
dap.listeners.after.event_terminated['dapui_config'] = dapui.close
dap.listeners.after.event_exited['dapui_config'] = dapui.close
-- Configure vscode-js-debug adapter (installed via Mason as js-debug-adapter)
-- NOTE: We configure this manually instead of using nvim-dap-vscode-js plugin
-- because that plugin is unmaintained. Direct configuration is the recommended
-- approach in 2026 and provides better control.
-- This adapter supports Node.js debugging
dap.adapters['pwa-node'] = {
type = 'server',
host = '::1',
host = 'localhost',
port = '${port}',
executable = {
command = 'js-debug-adapter',
command = vim.fn.stdpath 'data' .. '/mason/bin/js-debug-adapter',
args = { '${port}' },
},
options = {
disconnect_on_terminate = true,
},
}
local js_based_languages = { 'typescript', 'javascript' }
-- Configure debugging for JavaScript/TypeScript
local js_based_languages = { 'typescript', 'javascript', 'typescriptreact', 'javascriptreact' }
for _, language in ipairs(js_based_languages) do
dap.configurations[language] = {
-- {
-- type = 'pwa-node',
-- request = 'launch',
-- name = 'Launch file',
-- program = '${file}',
-- cwd = '${workspaceFolder}',
-- },
-- {
-- type = 'pwa-node',
-- request = 'attach',
-- name = 'Attach',
-- processId = require('dap.utils').pick_process,
-- cwd = '${workspaceFolder}',
-- }
{
type = 'pwa-node',
request = 'launch',
name = 'Launch Current File (Node)',
program = '${file}',
cwd = '${workspaceFolder}',
sourceMaps = true,
protocol = 'inspector',
console = 'integratedTerminal',
},
{
type = 'pwa-node',
request = 'launch',
name = 'Launch Program',
program = '${workspaceFolder}/dist/index.js',
cwd = '${workspaceFolder}',
sourceMaps = true,
protocol = 'inspector',
console = 'integratedTerminal',
preLaunchTask = 'npm: build',
},
{
type = 'pwa-node',
request = 'attach',
name = 'Attach to Process',
processId = require('dap.utils').pick_process,
cwd = '${workspaceFolder}',
sourceMaps = true,
protocol = 'inspector',
},
{
type = 'pwa-node',
request = 'launch',
name = 'Debug Jest Tests',
runtimeExecutable = 'node',
runtimeArgs = {
'./node_modules/jest/bin/jest.js',
'--runInBand',
'--no-coverage',
'--no-cache',
'--watchAll=false',
},
rootPath = '${workspaceFolder}',
cwd = '${workspaceFolder}',
console = 'integratedTerminal',
internalConsoleOptions = 'neverOpen',
sourceMaps = true,
},
}
end
end,