{ lib, ... }: { programs.nixvim = { globals.mapleader = " "; keymaps = let normalVisual = lib.mapAttrsToList (key: action: { mode = [ "n" "v" ]; inherit action key; }) { # show terminal "" = "ToggleTerm"; # hop! "f" = "HopWord"; # Setup for custom keybinds ";" = ""; "" = ""; # Telescope "f" = "Telescope find_files"; "b" = "Telescope buffers"; "d" = "Telescope lsp_definitions"; "R" = "Telescope lsp_references"; "e" = "Telescope file_browser"; "c" = "Telescope git_bcommits"; "g" = "Telescope git_status"; # Lsp "a" = "lua vim.lsp.buf.code_action()"; "D" = "lua vim.lsp.buf.declaration()"; "h" = "lua vim.lsp.buf.hover()"; "r" = "lua vim.lsp.buf.rename()"; "o" = "lua vim.diagnostic.open_float()"; "l" = "lua require('lsp_lines').toggle()"; # Debugger "" = "lua require('dap').continue()"; "" = "lua require('dap').terminate()"; "" = "lua require('dap').step_over()"; "" = "lua require('dap').step_into()"; "" = "lua require('dap').step_out()"; ";d" = "lua require('dap').toggle_breakpoint()"; ";s" = "lua require('dap').set_breakpoint(vim.fn.input('Breakpoint condition: '))"; # Competitest ";r" = "CompetiTest receive problem"; ";t" = "CompetiTest run"; ";a" = "CompetiTest add_testcase"; ";e" = "CompetiTest edit_testcase"; ";l" = "CompetiTest delete_testcase"; ";c" = "CompetiTest convert auto"; # resize windows with arrows "" = "resize -2"; "" = "resize +2"; "" = "vertical resize +2"; "" = "vertical resize -2"; # TODO: make shortcuts for diffview # or use telescope to view git stuff }; vni = lib.mapAttrsToList (key: action: { mode = [ "n" "v" "i" ]; inherit action key; }) { # copy, cut, paste # TODO: why does pasting work but not copying in visual mode??? "" = "\\\"+y"; "" = "\\\"+c"; "" = "\\\"+p"; # saving "" = "w"; }; in normalVisual ++ vni; }; }