{ pkgs, lib, ... }: { config.vim = { viAlias = true; vimAlias = true; lineNumberMode = "relNumber"; options = { tabstop = lib.mkDefault 2; shiftwidth = 0; termguicolors = true; }; keymaps = [ { key = "w"; mode = "n"; silent = true; action = ":w"; } { key = "x"; mode = "n"; silent = true; action = ":wq"; } { key = "q"; mode = "n"; silent = true; action = ":q"; } { key = "Q"; mode = "n"; silent = true; action = ":q!"; } { key = "ff"; mode = "n"; silent = true; action = ":Telescope find_files"; } { key = ""; mode = "n"; silent = true; action = "zz"; } { key = ""; mode = "n"; silent = true; action = "zz"; } { key = "n"; mode = "n"; silent = true; action = ":noh"; } ]; lsp = { enable = true; servers.nixd.settings.nil.nix.autoArchive = true; }; languages = { enableTreesitter = true; nix.enable = true; clang.enable = true; rust.enable = true; ruby.enable = true; java.enable = true; }; treesitter = { enable = true; # context.enable = true; highlight.enable = true; }; telescope.enable = true; utility = { motion = { # hop.enable = true; # leap.enable = true; precognition.enable = true; }; }; visuals = { rainbow-delimiters.enable = true; }; extraPlugins = { gruvbox-material = { package = pkgs.vimPlugins.gruvbox-material; setup = '' vim.o.background = "dark" vim.g.gruvbox_material_background = "hard" vim.cmd("colorscheme gruvbox-material") ''; }; }; autocmds = [ { event = [ "InsertEnter" ]; command = "set norelativenumber"; } { event = [ "InsertLeave" ]; command = "set relativenumber"; } ]; }; }