{lib, ...}: { programs.nixvim = { globals = { mapleader = " "; maplocalleader = " "; }; maps = let normal_and_insert = { "" = { action = "noh"; desc = "Disable the search highlighting and send Escape"; }; }; in { insert = lib.recursiveUpdate { "hh" = { action = '' function() local cmp = require('cmp'); local luasnip = require('luasnip'); if cmp.visible() then cmp.select_next_item() elseif luasnip.expand_or_locally_jumpable() then luasnip.expand_or_jump() end end ''; lua = true; desc = "completion trigger/ forward in completen menu"; }; "" = { action = '' function() local cmp = require('cmp'); cmp.confirm() end ''; lua = true; desc = "confirm the selected item"; }; } normal_and_insert; normalVisualOp = { # yank/ cut to the system clipboard "y" = "\"+y"; "Y" = "\"+Y"; # Unmap some old keys #"s" = "''"; #"t" = "''"; "" = ""; "" = ""; "" = ""; "" = ""; # Center the cursor vertically when moving to the next word during a search. "l" = "nzzzv"; "L" = "Nzzzv"; # remap the other keys to dvorak "k" = "t"; "K" = "T"; "j" = "k"; "J" = "K"; # Change Vim-keys "h" = ""; "t" = "g"; "n" = "g"; "s" = ""; # Move display lines "0" = "g0"; "$" = "g$"; }; normal = lib.recursiveUpdate { "" = { action = ":"; desc = "jump to command line"; }; "\\f" = { action = "function() require('lf').start() end"; lua = true; desc = "open lf in a floating window"; }; # Splits "" = { action = "p"; desc = "go to previous split"; }; "" = { action = "w"; desc = "go to next split"; }; "-" = { action = "s"; desc = "New horizontal split"; }; "|" = { action = "v"; desc = "New vertical split"; }; # Exit insert mode after creating a new line above or below the current line."; "o" = "o"; "O" = "O"; "p" = { action = "\"_dP"; desc = "keep the cut thing in the base register"; }; "d" = { action = "\"_d"; desc = "delete without saving to register"; }; "dd" = { action = '' function() if vim.api.nvim_get_current_line():match("^%s*$") then return '"_dd' else return "dd" end end ''; lua = true; desc = "Pipe all blank line deletions to the blackhole register"; expr = true; silent = true; }; "s" = { action = ":%s/\\<\\>//gI"; desc = "replace for the word under the cursor"; }; "" = { action = "mksession! "; desc = "to overwrite/create a session"; }; "X" = { action = "[[!!$SHELL ]]"; desc = "Read the current line and execute that line in your $SHELL. The resulting output will replace the curent line that was being executed."; }; } normal_and_insert; terminal = { "" = { action = ""; desc = "Exit terminal mode with "; }; }; visual = { # move selected lines in visual mode "T" = ":m '>+1gv=gv"; "N" = ":m '<-2gv=gv"; }; }; }; }