diff --git a/modules/home/nixvim/keymaps.nix b/modules/home/nixvim/keymaps.nix index aaefaa0..c791995 100644 --- a/modules/home/nixvim/keymaps.nix +++ b/modules/home/nixvim/keymaps.nix @@ -1,79 +1,71 @@ [ - # cursor navigation { - # scroll down, recenter + options.desc = "scroll down, recenter"; key = ""; action = "zz"; mode = "n"; } { - # scroll up, recenter + options.desc = "scroll up, recenter"; key = ""; action = "zz"; mode = "n"; } - - # searching { - # center cursor after search next + options.desc = "center cursor after search next"; key = "n"; action = "nzzzv"; mode = "n"; } { - # center cursor after search previous + options.desc = "center cursor after search previous"; key = "N"; action = "Nzzzv"; mode = "n"; } { - # ex command + options.desc = "ex command"; key = "pv"; action = "Ex"; mode = "n"; } - - # search and replace { - # search and replace word under cursor + options.desc = "search and replace word under cursor"; key = "s"; action = ":%s///gI"; mode = "n"; } - # search and replace selected text { key = "s"; action = "y:%s/0/0/gI"; mode = "v"; } - - # clipboard operations { - # copy to system clipboard in visual mode + options.desc = "copy to system clipboard in visual mode"; key = ""; action = ''"+y ''; mode = "v"; } { - # paste from system clipboard in visual mode + options.desc = "paste from system clipboard in visual mode"; key = ""; action = ''"+p ''; mode = "v"; } { - # yank to system clipboard + options.desc = "yank to system clipboard"; key = "Y"; action = "+Y"; mode = "n"; } { - # replace selected text with clipboard content + options.desc = "replace selected text with clipboard content"; key = "p"; action = "_dP"; mode = "x"; } { - # delete without copying to clipboard + options.desc = "delete without copying to clipboard"; key = "d"; action = "_d"; mode = [ @@ -81,267 +73,184 @@ "v" ]; } - - # line operations { - # move lines down in visual mode + options.desc = "move lines down in visual mode"; key = "J"; action = ":m '>+1gv=gv"; mode = "v"; } { - # move lines up in visual mode + options.desc = "move lines up in visual mode"; key = "K"; action = ":m '<-2gv=gv"; mode = "v"; } { - # join lines + options.desc = "join lines"; key = "J"; action = "mzJ`z"; mode = "n"; } - - # quickfix { - # Run make command + options.desc = "Run make command"; key = "m"; action = ":make"; mode = "n"; } { - # previous quickfix item + options.desc = "previous quickfix item"; key = ""; action = "cprevzz"; mode = "n"; } { - # next quickfix item + options.desc = "next quickfix item"; key = ""; action = "cnextzz"; mode = "n"; } - - # location list navigation { - # previous location list item + options.desc = "previous location list item"; key = "j"; action = "lprevzz"; mode = "n"; } { - # next location list item + options.desc = "next location list item"; key = "k"; action = "lnextzz"; mode = "n"; } - - # disabling keys { - # disable the 'Q' key + options.desc = "disable the 'Q' key"; key = "Q"; action = ""; mode = "n"; } - - # text selection { - # select whole buffer + options.desc = "select whole buffer"; key = ""; action = "ggVG"; mode = "n"; } - - # window operations { - # focus next window + options.desc = "focus next window"; key = ""; action = ":wincmd W"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } { - # focus previous window + options.desc = "focus next window"; + key = ""; + action = ":wincmd W"; + mode = "n"; + } + { + options.desc = "focus previous window"; key = ""; action = ":wincmd w"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } - - # window size adjustments { - # increase window width + options.desc = "focus previous window"; + key = ""; + action = ":wincmd w"; + mode = "n"; + } + { + options.desc = "increase window width"; key = ""; action = ":vertical resize +5"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } { - # decrease window width + options.desc = "decrease window width"; key = ""; action = ":vertical resize -5"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } - - # window closing and opening { - # close current window + options.desc = "close current window"; key = "c"; action = ":q"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } { - # new vertical split at $HOME + options.desc = "new vertical split at $HOME"; key = "n"; action = ":vsp $HOME"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } - - # window split orientation toggling { - # toggle split orientation + options.desc = "toggle split orientation"; key = "t"; action = ":wincmd T"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } - - # spell checking { - # toggle spell checking + options.desc = "toggle spell checking"; key = "ss"; action = ":setlocal spell!"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } { - # switch to english spell checking + options.desc = "switch to english spell checking"; key = "se"; action = ":setlocal spelllang=en_us"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } { - # switch to german spell checking + options.desc = "switch to german spell checking"; key = "sg"; action = ":setlocal spelllang=de_20"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } { - # move to next misspelling + options.desc = "move to next misspelling"; key = "]s"; action = "]szz"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } { - # move to previous misspelling + options.desc = "move to previous misspelling"; key = "[s"; action = "[szz"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } { - # correction suggestions for a misspelled word + options.desc = "correction suggestions for a misspelled word"; key = "z="; action = "z="; - options = { - noremap = true; - silent = true; - }; mode = "n"; } { - # adding words to the dictionary + options.desc = "adding words to the dictionary"; key = "zg"; action = "zg"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } - - # buffer navigation { - # next buffer + options.desc = "next buffer"; key = ""; action = ":bnext"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } { - # previous buffer + options.desc = "previous buffer"; key = ""; action = ":bprevious"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } { - # close current buffer + options.desc = "close current buffer"; key = "bd"; action = ":bdelete"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } - { - # apply code action + options.desc = "apply code action"; key = "ca"; action = ":lua vim.lsp.buf.code_action()"; - options = { - noremap = true; - silent = true; - }; mode = "n"; } ] diff --git a/modules/home/nixvim/plugins/default.nix b/modules/home/nixvim/plugins/default.nix index 1941f43..508d3c7 100644 --- a/modules/home/nixvim/plugins/default.nix +++ b/modules/home/nixvim/plugins/default.nix @@ -3,14 +3,17 @@ { imports = [ ./cmp.nix + ./diffview.nix ./lsp.nix + ./gitsigns.nix ./lualine.nix ./telescope.nix - # ./treesitter.nix # HOTFIX: does not build + ./treesitter.nix ./trouble.nix ]; config.programs.nixvim.plugins = { + which-key.enable = lib.mkDefault true; markdown-preview.enable = lib.mkDefault true; # warning: Nixvim: `plugins.web-devicons` was enabled automatically because the following plugins are enabled. This behaviour is deprecated. Please explicitly define `plugins.web-devicons.enable` web-devicons.enable = true; diff --git a/modules/home/nixvim/plugins/diffview.nix b/modules/home/nixvim/plugins/diffview.nix new file mode 100644 index 0000000..e405578 --- /dev/null +++ b/modules/home/nixvim/plugins/diffview.nix @@ -0,0 +1,59 @@ +{ config, lib, ... }: + +let + cfg = config.programs.nixvim; + plugin = cfg.plugins.diffview; + + inherit (lib) mkDefault mkIf; +in +{ + config = { + programs.nixvim = { + plugins.diffview = { + enable = mkDefault true; + }; + + # highlight = mkIf plugin.enable { + # DiffAdd = { + # bg = "#2d4a2d"; + # fg = "NONE"; + # }; + # DiffDelete = { + # bg = "#4a2d2d"; + # fg = "NONE"; + # }; + # DiffChange = { + # bg = "#2d3a4a"; + # fg = "NONE"; + # }; + # DiffText = { + # bg = "#1a5a1a"; + # fg = "NONE"; + # }; + # }; + + keymaps = mkIf plugin.enable [ + { + mode = "n"; + key = "gd"; + action.__raw = '' + function() + local lib = require("diffview.lib") + local view = lib.get_current_view() + if view then + vim.cmd("DiffviewClose") + else + vim.cmd("DiffviewOpen") + end + end + ''; + options = { + noremap = true; + silent = true; + desc = "toggle git diff"; + }; + } + ]; + }; + }; +} diff --git a/modules/home/nixvim/plugins/gitsigns.nix b/modules/home/nixvim/plugins/gitsigns.nix new file mode 100644 index 0000000..a58d625 --- /dev/null +++ b/modules/home/nixvim/plugins/gitsigns.nix @@ -0,0 +1,48 @@ +{ config, lib, ... }: + +let + cfg = config.programs.nixvim; + plugin = cfg.plugins.fugitive; + + inherit (lib) mkDefault mkIf; +in +{ + config = { + programs.nixvim = { + plugins.gitsigns = { + enable = mkDefault true; + settings = { + current_line_blame = mkDefault false; + current_line_blame_opts = mkDefault { + virt_text = mkDefault true; + virt_text_pos = mkDefault "eol"; + }; + signcolumn = mkDefault true; + signs = { + add = { + text = mkDefault "+"; + }; + change = { + text = mkDefault "│"; + }; + changedelete = { + text = mkDefault "~"; + }; + delete = { + text = mkDefault "-"; + }; + topdelete = { + text = mkDefault "-"; + }; + untracked = { + text = mkDefault "?"; + }; + }; + watch_gitdir = { + follow_files = mkDefault true; + }; + }; + }; + }; + }; +}