From c494611b05469a2021502508592a7c88f51b1318 Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 22 Jun 2025 19:58:50 +0200 Subject: [PATCH] Take steps to a more IDE experience with neovim --- nix/user/nvim.nix | 24 ++++++++++- nvim/base.lua | 37 +++++++++++++++++ nvim/keymaps.lua | 22 ++++++++-- nvim/plugins.lua | 101 +++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 176 insertions(+), 8 deletions(-) diff --git a/nix/user/nvim.nix b/nix/user/nvim.nix index 4bc8d24..0ad8696 100644 --- a/nix/user/nvim.nix +++ b/nix/user/nvim.nix @@ -10,12 +10,26 @@ plugins = with pkgs.vimPlugins; [ aerial-nvim zen-mode-nvim - vim-commentary + # vim-commentary + ts-comments-nvim + vim-fugitive + gitsigns-nvim vim-repeat vim-surround nvim-tree-lua targets-vim - delimitMate + # delimitMate + mini-pairs + mini-align + mini-bracketed + mini-splitjoin + mini-move + mini-ai + flash-nvim + trouble-nvim + conform-nvim + nvim-lint + todo-comments-nvim # vim-startify vim-windowswap vim-nix @@ -44,6 +58,12 @@ markdown-preview-nvim vim-markdown bullets-vim + obsidian-nvim + nvim-dap + nvim-nio + nvim-dap-ui + nvim-dap-go + nvim-dap-python (nvim-treesitter.withPlugins (p: [ p.awk p.bash p.c p.c_sharp p.cpp p.css p.diff p.dockerfile p.doxygen p.git_config p.gitcommit p.go p.gomod p.gosum p.gotmpl p.helm p.haskell p.html p.http p.java p.javascript p.json p.latex p.lua p.markdown p.markdown_inline p.matlab p.nix p.printf p.python p.regex p.rust p.sql p.strace p.supercollider p.svelte p.swift p.terraform p.tmux p.toml p.typescript p.vim p.xml p.yaml p.zig ])) ]; diff --git a/nvim/base.lua b/nvim/base.lua index 62501f6..f58af01 100644 --- a/nvim/base.lua +++ b/nvim/base.lua @@ -131,3 +131,40 @@ vim.api.nvim_create_user_command('TrimWhiteSpace', function() vim.cmd('%s/\\s\\+$//e') end, {}) + +--------------------------- +------- DIAGNOSTICS ------- +--------------------------- + +vim.diagnostic.config({ + update_in_insert = true, + signs = true, + virtual_text = { + prefix = '● ', + current_line = false, + severity = { + -- min = vim.diagnostic.severity.INFO, + max = vim.diagnostic.severity.INFO, + }, + }, + virtual_lines = { + current_line = false, + severity = { + min = vim.diagnostic.severity.WARN, + -- max = vim.diagnostic.severity.WARN, + }, + }, + float = { + prefix = '', + focusable = false, + style = "minimal", + border = "rounded", + source = "always", + header = "", + }, +}) + +vim.cmd([[highlight DiagnosticUnderlineError gui=undercurl guifg=Red]]) +vim.cmd([[highlight DiagnosticUnderlineWarn gui=undercurl guifg=Yellow]]) +vim.cmd([[highlight DiagnosticUnderlineInfo gui=undercurl guifg=Blue]]) +vim.cmd([[highlight DiagnosticUnderlineHint gui=undercurl guifg=Cyan]]) diff --git a/nvim/keymaps.lua b/nvim/keymaps.lua index 6d97167..b704489 100644 --- a/nvim/keymaps.lua +++ b/nvim/keymaps.lua @@ -6,10 +6,18 @@ vim.keymap.set('n', 'k', 'gk', {}) vim.keymap.set('v', 'j', 'gj', {}) vim.keymap.set('v', 'k', 'gk', {}) -vim.keymap.set('n', '', 'h', {}) -vim.keymap.set('n', '', 'j', {}) -vim.keymap.set('n', '', 'k', {}) -vim.keymap.set('n', '', 'l', {}) +-- vim.keymap.set('n', '', 'h', {}) +-- vim.keymap.set('n', '', 'j', {}) +-- vim.keymap.set('n', '', 'k', {}) +-- vim.keymap.set('n', '', 'l', {}) +vim.keymap.set('n', '', 'h', {}) +vim.keymap.set('n', '', 'j', {}) +vim.keymap.set('n', '', 'k', {}) +vim.keymap.set('n', '', 'l', {}) +vim.keymap.set('t', '', 'h', {}) +vim.keymap.set('t', '', 'j', {}) +vim.keymap.set('t', '', 'k', {}) +vim.keymap.set('t', '', 'l', {}) vim.keymap.set('n', 's', ':call WindowSwap#EasyWindowSwap()', {}) @@ -26,6 +34,12 @@ vim.keymap.set('n', 'fs', telebuiltin.grep_string, { silent = true }) vim.keymap.set('n', 'o', telebuiltin.buffers, { silent = true }) vim.keymap.set('n', 'fh', telebuiltin.help_tags, { silent = true }) +-- Trouble +vim.keymap.set('n', 'cs', 'Trouble symbols toggle focus=true win.position=right') +vim.keymap.set('n', 'cl', 'Trouble lsp toggle focus=true win.position=right') +vim.keymap.set('n', 'cd', 'Trouble diagnostics toggle focus=true win.position=bottom') +vim.keymap.set('n', 'cq', 'Trouble quickfix toggle focus=true win.position=bottom') + -- Yanky vim.keymap.set({"n","x"}, "p", "(YankyPutAfter)") vim.keymap.set({"n","x"}, "P", "(YankyPutBefore)") diff --git a/nvim/plugins.lua b/nvim/plugins.lua index 96a927d..5ee7ba7 100644 --- a/nvim/plugins.lua +++ b/nvim/plugins.lua @@ -1,5 +1,14 @@ -vim.g.delimitMate_expand_space=1 -vim.g.delimitMate_expand_cr = 1 +-- vim.g.delimitMate_expand_space=1 +-- vim.g.delimitMate_expand_cr = 1 + +require('mini.pairs').setup() +require('mini.align').setup() +require('mini.bracketed').setup() +require('mini.splitjoin').setup() +require('mini.move').setup() +require('mini.move').setup() +require('flash').setup() +require('ts-comments').setup() vim.g.tagbar_left=1 vim.g.tagbar_autoclose=1 @@ -210,3 +219,91 @@ require("nvim-tree").setup({ -- dotfiles = true, -- }, }) + +require('gitsigns').setup { + signs = { + add = { text = '┃' }, + change = { text = '┃' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + untracked = { text = '┆' }, + }, + signs_staged = { + add = { text = '┃' }, + change = { text = '┃' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + untracked = { text = '┆' }, + }, + signs_staged_enable = true, + signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` + numhl = false, -- Toggle with `:Gitsigns toggle_numhl` + linehl = false, -- Toggle with `:Gitsigns toggle_linehl` + word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff` + watch_gitdir = { + follow_files = true + }, + auto_attach = true, + attach_to_untracked = false, + current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame` + current_line_blame_opts = { + virt_text = true, + virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align' + delay = 1000, + ignore_whitespace = false, + virt_text_priority = 100, + use_focus = true, + }, + current_line_blame_formatter = ', - ', + sign_priority = 6, + update_debounce = 100, + status_formatter = nil, -- Use default + max_file_length = 40000, -- Disable if file is longer than this (in lines) + preview_config = { + -- Options passed to nvim_open_win + style = 'minimal', + relative = 'cursor', + row = 0, + col = 1 + }, +} + +require("obsidian").setup({ + workspaces = { + { + name = "privat", + path = "~/Documents/notes/privat", + }, + { + name = "joplin", + path = "~/Documents/notes/fromjoplin", + }, + }, +}) + +require("conform").setup({ + python = {"black"}, + rust = {"rustfmt"}, + go = {"gofmt"}, +}) + +require("trouble").setup() +require("todo-comments").setup() + +require("dapui").setup() + +local dap, dapui = require("dap"), require("dapui") +dap.listeners.before.attach.dapui_config = function() + dapui.open() +end +dap.listeners.before.launch.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