{pkgs, ...}: { config.vim = { viAlias = true; vimAlias = true; lineNumberMode = "relNumber"; options = { tabstop = 4; shiftwidth = 4; softtabstop = 4; 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 = "fg"; mode = "n"; silent = true; action = ":Telescope live_grep"; } { key = "fb"; mode = "n"; silent = true; action = ":Telescope buffers"; } { key = ""; mode = "n"; silent = true; action = "zz"; } { key = ""; mode = "n"; silent = true; action = "zz"; } { key = "n"; mode = "n"; silent = true; action = ":noh"; } { key = "e"; mode = "n"; action = ":Oil"; desc = "Open Oil File Explorer"; } ]; lsp = { enable = true; formatOnSave = true; }; languages = { enableTreesitter = true; nix = { enable = true; lsp.enable = true; lsp.servers = ["nixd"]; format = { enable = true; type = ["alejandra"]; }; }; clang.enable = true; rust.enable = true; ruby.enable = true; java.enable = true; }; autocomplete.nvim-cmp.enable = true; treesitter = { enable = true; # context.enable = true; highlight.enable = true; }; telescope.enable = true; clipboard = { enable = true; providers.wl-copy.enable = true; }; utility = { # nvim-biscuits.enable = true; motion = { precognition.enable = true; }; oil-nvim = { enable = true; setupOpts = { view_options.show_hidden = true; }; gitStatus.enable = true; }; }; visuals = { rainbow-delimiters.enable = true; }; ui = { colorizer = { enable = true; setupOpts.filetypes."*" = {}; }; }; mini.statusline.enable = true; mini.starter.enable = true; git.gitsigns.enable = true; comments.comment-nvim.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") ''; }; mini-cmdline = { package = pkgs.vimPlugins.mini-nvim; setup = "require('mini.cmdline').setup()"; }; }; autocmds = [ { event = ["InsertEnter"]; command = "set norelativenumber"; } { event = ["InsertLeave"]; command = "set relativenumber"; } { event = ["FileType"]; pattern = ["nix"]; command = "setlocal tabstop=2 shiftwidth=2 softtabstop=2"; } ]; }; }