From 6eb4b228ff03a9d2c1691570ba67e4b1b9e08f73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Tue, 8 Apr 2025 12:16:13 +0200 Subject: [PATCH] feat: improve nvim --- .../home-manager/programs/nixvim/default.nix | 2 + .../programs/nixvim/presets/aerial.nix | 64 ++++++++++++ .../programs/nixvim/presets/base/coverage.nix | 99 +++++++++++++++++++ .../programs/nixvim/presets/base/find.nix | 34 ++++--- .../programs/nixvim/presets/base/tree.nix | 22 ++--- .../programs/nixvim/presets/default.nix | 2 + modules/home-manager/theme/nvim.vim | 5 + 7 files changed, 203 insertions(+), 25 deletions(-) create mode 100644 modules/home-manager/programs/nixvim/presets/aerial.nix create mode 100644 modules/home-manager/programs/nixvim/presets/base/coverage.nix diff --git a/modules/home-manager/programs/nixvim/default.nix b/modules/home-manager/programs/nixvim/default.nix index 123ae3e..c5268e1 100644 --- a/modules/home-manager/programs/nixvim/default.nix +++ b/modules/home-manager/programs/nixvim/default.nix @@ -38,9 +38,11 @@ mergetool.enable = true; trouble.enable = true; undotree.enable = true; + aerial.enable = true; base = { completion.enable = true; diagnostics.enable = true; + coverage.enable = true; find.enable = true; formatting = { enable = true; diff --git a/modules/home-manager/programs/nixvim/presets/aerial.nix b/modules/home-manager/programs/nixvim/presets/aerial.nix new file mode 100644 index 0000000..68c1e08 --- /dev/null +++ b/modules/home-manager/programs/nixvim/presets/aerial.nix @@ -0,0 +1,64 @@ +{ + lib, + config, + ... +}: +let + cfg = config.presets.aerial; +in +{ + options.presets.aerial = { + enable = lib.mkEnableOption "aerial"; + }; + + config = lib.mkIf cfg.enable { + keymaps = [ + { + key = ""; + action = # vim + ":AerialPrev"; + } + { + key = ""; + action = # vim + ":AerialNext"; + } + { + key = "fs"; + mode = "n"; + action = # vim + ":Telescope aerial"; + } + ]; + plugins = { + aerial = { + enable = true; + settings = { + autojump = true; + highlight_on_jump = false; + filter_kind = false; + open_automatic = true; + show_guides = true; + backends = [ + "lsp" + "treesitter" + "markdown" + "asciidoc" + "man" + ]; + layout = { + placement = "edge"; + direction = "right"; + }; + }; + }; + which-key.settings.spec = [ + { + __unkeyed-1 = "fs"; + group = "Symbols"; + icon = "󰡱"; + } + ]; + }; + }; +} diff --git a/modules/home-manager/programs/nixvim/presets/base/coverage.nix b/modules/home-manager/programs/nixvim/presets/base/coverage.nix new file mode 100644 index 0000000..46f8c41 --- /dev/null +++ b/modules/home-manager/programs/nixvim/presets/base/coverage.nix @@ -0,0 +1,99 @@ +{ + lib, + config, + ... +}: +let + cfg = config.presets.base.coverage; +in +{ + options.presets.base.coverage = { + enable = lib.mkEnableOption "coverage"; + }; + + config = lib.mkIf cfg.enable { + keymaps = [ + { + key = "cs"; + action = # vim + ":CoverageSummary"; + } + { + key = "cr"; + action = # vim + ":CoverageClear:CoverageLoad:CoverageShow"; + } + { + key = "ch"; + action = # vim + ":CoverageHide"; + } + { + key = "cc"; + action = # vim + ":CoverageShow"; + } + ]; + autoCmd = [ + { + event = [ "BufEnter" ]; + callback.__raw = # lua + '' + function() + local ftype = vim.bo.filetype + local ok, lang = pcall(require, "coverage.languages." .. ftype) + if not ok then + return + end + local config = require("coverage.config") + local util = require("coverage.util") + local Path = require("plenary.path") + local ft_config = config.opts.lang[ftype] + if ft_config == nil then + return + end + local p = Path:new(util.get_coverage_file(ft_config.coverage_file)) + if not p:exists() then + return + end + + require("coverage").load(true) + end + ''; + } + ]; + plugins = { + coverage = { + enable = true; + autoReload = true; + }; + which-key.settings.spec = [ + { + __unkeyed-1 = "c"; + desc = "Coverage"; + icon = "󰠞"; + } + { + __unkeyed-1 = "cs"; + desc = "Summary"; + icon = ""; + } + { + __unkeyed-1 = "cr"; + desc = "Reload"; + icon = "󰑓"; + } + { + __unkeyed-1 = "ch"; + desc = "Hide"; + icon = "󱨃"; + } + { + __unkeyed-1 = "cc"; + desc = "Show"; + icon = "󱨂"; + } + ]; + }; + }; +} diff --git a/modules/home-manager/programs/nixvim/presets/base/find.nix b/modules/home-manager/programs/nixvim/presets/base/find.nix index b7d9e0b..25675a8 100644 --- a/modules/home-manager/programs/nixvim/presets/base/find.nix +++ b/modules/home-manager/programs/nixvim/presets/base/find.nix @@ -13,36 +13,48 @@ in telescope = { enable = true; keymaps = { - "ff" = "git_files"; - "fa" = "find_files"; - "fg" = "live_grep"; - "fb" = "buffers"; + "ff" = { + action = "git_files"; + mode = "n"; + }; + "fa" = { + action = "find_files"; + mode = "n"; + }; + "fg" = { + action = "live_grep"; + mode = "n"; + }; + "fc" = { + action = "buffers"; + mode = "n"; + }; }; }; which-key.settings.spec = [ { - __unkeyed-1 = "f"; + __unkeyed-1 = "f"; group = "Find"; icon = "󰍉"; } { - __unkeyed-1 = "ff"; + __unkeyed-1 = "ff"; desc = "File"; icon = "󰈢"; } { - __unkeyed-1 = "fa"; - desc = "Untracked Files"; + __unkeyed-1 = "fa"; + desc = "All Files"; icon = "󱪡"; } { - __unkeyed-1 = "fg"; + __unkeyed-1 = "fg"; desc = "Grep"; icon = "󰑑"; } { - __unkeyed-1 = "fb"; - desc = "Buffer"; + __unkeyed-1 = "fc"; + desc = "Current"; icon = "󰈙"; } ]; diff --git a/modules/home-manager/programs/nixvim/presets/base/tree.nix b/modules/home-manager/programs/nixvim/presets/base/tree.nix index 6f0349d..665cf7d 100644 --- a/modules/home-manager/programs/nixvim/presets/base/tree.nix +++ b/modules/home-manager/programs/nixvim/presets/base/tree.nix @@ -10,12 +10,10 @@ in config = lib.mkIf cfg.enable { keymaps = [ { - key = "ft"; - action = ":Neotree toggle"; - } - { - key = "ss"; - action = ":Neotree document_symbols right toggle"; + key = "ft"; + mode = "n"; + action = # vim + ":Neotree toggle"; } ]; plugins = { @@ -27,8 +25,9 @@ in followCurrentFile.enabled = true; filteredItems.visible = true; }; - extraSources = [ "document_symbols" ]; - popupBorderStyle = "solid"; + popupBorderStyle = "rounded"; + filesystem.window.mappings.f = "noop"; + window.mappings.f = "noop"; eventHandlers.neo_tree_buffer_leave = # lua '' function() @@ -38,15 +37,10 @@ in }; which-key.settings.spec = [ { - __unkeyed-1 = "ft"; + __unkeyed-1 = "ft"; desc = "Tree"; icon = "󰙅"; } - { - __unkeyed-1 = "ss"; - desc = "Document Symbols"; - icon = "󱏒"; - } ]; }; }; diff --git a/modules/home-manager/programs/nixvim/presets/default.nix b/modules/home-manager/programs/nixvim/presets/default.nix index 14bfc60..22ab889 100644 --- a/modules/home-manager/programs/nixvim/presets/default.nix +++ b/modules/home-manager/programs/nixvim/presets/default.nix @@ -6,6 +6,7 @@ inherit pkgs; }; modules = [ + ./aerial.nix ./auto-save.nix ./auto-format.nix ./harpoon.nix @@ -15,6 +16,7 @@ ./undotree.nix ./base/completion.nix + ./base/coverage.nix ./base/diagnostics.nix ./base/find.nix ./base/formatting.nix diff --git a/modules/home-manager/theme/nvim.vim b/modules/home-manager/theme/nvim.vim index 3665283..1137d3f 100644 --- a/modules/home-manager/theme/nvim.vim +++ b/modules/home-manager/theme/nvim.vim @@ -82,6 +82,10 @@ hi! ErrorMsg guibg={{colors.danger_container.default.hex}} guifg={{colors.on_dan hi! WarningMsg guibg={{colors.warning_container.default.hex}} guifg={{colors.on_warning_container.default.hex}} hi! NvimInternalError guibg={{colors.danger.default.hex}} guifg={{colors.on_danger.default.hex}} +hi! CoverageCovered guifg={{colors.success.default.hex}} +hi! CoverageUncovered guifg={{colors.danger.default.hex}} +hi! CoveragePartial guifg={{colors.warning.default.hex}} + hi! DiagnosticError guifg={{colors.danger.default.hex}} hi! DiagnosticWarn guifg={{colors.warning.default.hex}} hi! DiagnosticInfo guifg={{colors.info.default.hex}} @@ -204,6 +208,7 @@ hi! link @keyword.import.cpp PreProc hi! Type gui=none guifg={{colors.types.default.hex}} hi! link @lsp.type.interface Type +hi! link AerialLine CursorLine hi! IlluminatedWordText gui=none guibg={{colors.surface_container_highest.default.hex}} hi! IlluminatedWordRead gui=none guibg={{colors.surface_container_highest.default.hex}} hi! IlluminatedWordWrite gui=none guibg={{colors.surface_container_highest.default.hex}}