{lib, ...}: { programs.nixvim = { globals = { mapleader = " "; maplocalleader = " "; }; keymaps = [ { mode = ["n" "i"]; key = "<Esc>"; action = "<cmd>noh<CR><Esc>"; options.desc = "Disable the search highlighting and send Escape"; } { key = "hh"; mode = ["i"]; 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; options.desc = "completion trigger/ forward in completen menu"; } { key = "uu"; mode = ["i"]; action = '' function() local cmp = require('cmp'); cmp.confirm() end ''; lua = true; options.desc = "confirm the selected item"; } # FIXME: Add the below keymappings, when alacritty gets support for the kitty # keyboard protocol <2023-08-29> { # "<C-Tab>" key = "ztn"; action = "<cmd>tabnext<CR>"; options.desc = "cycle to the next tab"; } { # "<S-C-Tab>" key = "ztp"; action = "<cmd>tabprevious<CR>"; options.desc = "cycle to the previous tab"; } # yank/ cut to the system clipboard { key = "<leader>y"; action = "\"+y"; options.desc = "yank to the system clipboard"; } { key = "<leader>Y"; action = "\"+Y"; options.desc = "yank until the end of the line to the system clipboard"; } # Unmap some old keys #{key = "s"; action = "'<Nop>'";} #{key = "t"; action = "'<Nop>'";} { key = "<Up>"; action = "<Nop>"; } { key = "<Down>"; action = "<Nop>"; } { key = "<Left>"; action = "<Nop>"; } { key = "<Right>"; action = "<Nop>"; } # 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 = "<left>"; options.desc = "go left"; } { key = "t"; action = "g<down>"; options.desc = "go down, with displaylines"; } { key = "n"; action = "g<up>"; options.desc = "go up, with displaylines"; } { key = "s"; action = "<right>"; 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 = "<Enter>"; action = "gf"; options.desc = "open file/url under cursor"; } { mode = ["n"]; key = "<Tab>"; action = ":"; options.desc = "jump to command line"; } { mode = ["n"]; key = "\\f"; action = "function() require('lf').start() end"; lua = true; options.desc = "open lf in a floating window"; } # Splits { mode = ["n"]; key = "<C-t>"; action = "<C-w>p"; options.desc = "go to previous split"; } { mode = ["n"]; key = "<C-n>"; action = "<C-w>w"; options.desc = "go to next split"; } { mode = ["n"]; key = "<leader>-"; action = "<C-W>s"; options.desc = "New horizontal split"; } { mode = ["n"]; key = "<leader>|"; action = "<C-W>v"; options.desc = "New vertical split"; } { mode = ["n"]; key = "<leader>p"; action = "\"_dP"; options.desc = "keep the cut thing in the base register"; } { mode = ["n"]; key = "<leader>c"; action = "\"_c"; options.desc = "change without saving to register"; } { mode = ["n"]; key = "<leader>d"; action = "\"_d"; options.desc = "delete without saving to register"; } { key = "dd"; mode = ["n"]; action = '' function() if vim.api.nvim_get_current_line():match("^%s*$") then return '"_dd' else return "dd" end end ''; lua = true; options = { desc = "Pipe all blank line deletions to the blackhole register"; expr = true; silent = true; }; } { mode = ["n"]; key = "<leader>s"; action = ":%s/\\<<C-r><C-w>\\>/<C-r><C-w>/gI<Left><Left><Left>"; options.desc = "replace for the word under the cursor"; } { mode = ["n"]; key = "<C-s>"; action = "<cmd>mksession! <CR>"; options.desc = "overwrite/create a session"; } { mode = ["n"]; key = "<leader>X"; action = "!!$SHELL <CR>"; 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 = "<Esc><Esc>"; action = "<C-\\><C-n>"; options.desc = "Exit terminal mode with <Esc><Esc>"; } # move selected lines in visual mode { mode = ["v"]; key = "T"; action = ":m '>+1<CR>gv=gv"; options.desc = "move selected lines in visual mode down"; } { mode = ["v"]; key = "N"; action = ":m '<-2<CR>gv=gv"; options.desc = "move selected lines in visual mode up"; } ]; }; }