{lib, ...}: { programs.nixvim = { globals = { mapleader = " "; maplocalleader = " "; }; keymaps = [ { mode = ["n" "i"]; key = ""; action = "noh"; options.desc = "Disable the search highlighting and send Escape"; } { key = "hh"; mode = ["i"]; action.__raw = '' 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 ''; options.desc = "completion trigger/ forward in completen menu"; } { key = "uu"; mode = ["i"]; action.__raw = '' function() local cmp = require('cmp'); cmp.confirm() end ''; options.desc = "confirm the selected item"; } { key = ""; action = "tabnext"; options.desc = "cycle to the next tab"; } { key = ""; action = "tabprevious"; options.desc = "cycle to the previous tab"; } # yank/ cut to the system clipboard { key = "y"; action = "\"+y"; options.desc = "yank to the system clipboard"; } { key = "Y"; action = "\"+Y"; options.desc = "yank until the end of the line to the system clipboard"; } # Unmap some old keys #{key = "s"; action = "''";} #{key = "t"; action = "''";} { key = ""; action = ""; } { key = ""; action = ""; } { key = ""; action = ""; } { key = ""; action = ""; } # Center the cursor vertically when moving to the next word during a search. { key = "l"; action = "nzzzv"; options.desc = "Center the cursor vertically when moving to the next word during a search."; } { key = "L"; action = "Nzzzv"; options.desc = "Center the cursor vertically when moving to the next word during a search."; } # remap the other keys to dvorak { key = "k"; action = "t"; options.desc = "go the the right on char"; } { key = "K"; action = "T"; options.desc = "go to the left on char"; } { key = "j"; action = "k"; options.desc = "go to the right before the char"; } { key = "J"; action = "K"; options.desc = "go to the left before the char"; } # Change Vim-keys { key = "h"; action = ""; options.desc = "go left"; } { key = "t"; action = "g"; options.desc = "go down, with displaylines"; } { key = "n"; action = "g"; options.desc = "go up, with displaylines"; } { key = "s"; action = ""; options.desc = "go right"; } # Move display lines { key = "0"; action = "g0"; options.desc = "go to the leftmost character in the screen line"; } { key = "$"; action = "g$"; options.desc = "go to the rightmost character in the screen line"; } { mode = ["n"]; key = ""; action = "gf"; options.desc = "open file/url under cursor"; } { mode = ["n"]; key = ""; action = ":"; options.desc = "jump to command line"; } { mode = ["n"]; key = "\\f"; action.__raw = "function() require('lf').start() end"; options.desc = "open lf in a floating window"; } # Splits { mode = ["n"]; key = ""; action = "p"; options.desc = "go to previous split"; } { mode = ["n"]; key = ""; action = "w"; options.desc = "go to next split"; } { mode = ["n"]; key = "-"; action = "s"; options.desc = "New horizontal split"; } { mode = ["n"]; key = "|"; action = "v"; options.desc = "New vertical split"; } { mode = ["n"]; key = "p"; action = "\"_dP"; options.desc = "keep the cut thing in the base register"; } { mode = ["n"]; key = "c"; action = "\"_c"; options.desc = "change without saving to register"; } { mode = ["n"]; key = "d"; action = "\"_d"; options.desc = "delete without saving to register"; } { key = "x"; mode = ["n"]; action.__raw = '' function() local col = vim.api.nvim_win_get_cursor(0)[2] local char = vim.api.nvim_get_current_line():sub(col+1,col+1) if char:match("%s") then return '"_x' else return "x" end end ''; options = { desc = "Pipe all space only deletions to the blackhole register"; expr = true; silent = true; }; } { key = "dd"; mode = ["n"]; action.__raw = '' function() if vim.api.nvim_get_current_line():match("^%s*$") then return '"_dd' else return "dd" end end ''; options = { desc = "Pipe all blank line deletions to the blackhole register"; expr = true; silent = true; }; } { mode = ["n"]; key = "s"; action = ":%s/\\<\\>//gI"; options.desc = "replace for the word under the cursor"; } { mode = ["n"]; key = ""; action = "mksession! "; options.desc = "overwrite/create a session"; } { mode = ["n"]; key = "X"; action = "!!$SHELL "; options.desc = "Read the current line and execute that line in your $SHELL. The resulting output will replace the curent line that was being executed."; } { mode = ["t"]; key = ""; action = ""; options.desc = "Exit terminal mode with "; } # move selected lines in visual mode { mode = ["v"]; key = "T"; action = ":m '>+1gv=gv"; options.desc = "move selected lines in visual mode down"; } { mode = ["v"]; key = "N"; action = ":m '<-2gv=gv"; options.desc = "move selected lines in visual mode up"; } ]; }; }