{ lib, ... }: { programs.nixvim = { keymaps = let normal = lib.mapAttrsToList ( key: action: { mode = "n"; inherit action key; } ) { "" = ""; "" = ":noh"; "Y" = "y$"; "" = ":b#"; "" = ":close"; "s" = ":w"; "" = ":w"; "h" = "h"; "l" = "l"; "L" = "$"; "H" = "^"; "" = ":resize -2"; "" = ":resize +2"; "" = ":vertical resize +2"; "" = ":vertical resize -2"; "" = ":move-2"; "" = ":move+"; # Metals (Scala) keybindings "ws" = "lua require('metals').hover_worksheet()"; "sm" = "lua require('telescope').extensions.metals.commands()"; "tt" = "lua require('metals.tvp').toggle_tree_view()"; "tr" = "lua require('metals.tvp').reveal_in_tree()"; }; visual = lib.mapAttrsToList ( key: action: { mode = "v"; inherit action key; } ) { # Removed gv to allow dot-repeat ">" = ">"; "<" = "<"; # TAB keeps gv for convenience "" = ">gv"; "" = "