{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 = ":lua MiniFiles.open()"; } ]; 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; }; }; visuals = { rainbow-delimiters.enable = true; }; ui = { colorizer = { enable = true; setupOpts.filetypes."*" = {}; }; }; mini.comment.enable = true; mini.statusline.enable = true; mini.starter.enable = true; mini.icons.enable = true; mini.files = { enable = true; setupOpts = { windows = { preview = true; }; }; }; git.gitsigns.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"; } ]; luaConfigPost = '' vim.api.nvim_create_autocmd('User', { pattern = 'MiniFilesBufferCreate', callback = function(args) local buf_id = args.data.buf_id local set_cwd_to_pane = function() local entry = MiniFiles.get_fs_entry() if entry == nil then return end local pane_dir = vim.fn.fnamemodify(entry.path, ':h') local success, err = pcall(vim.api.nvim_set_current_dir, pane_dir) if success then print("CWD set to: " .. pane_dir) else print("Could not set CWD.") end end vim.keymap.set('n', '`', set_cwd_to_pane, { buffer = buf_id, desc = "Set CWD to pane directory" }) end, }) ''; }; }