{...}: { programs.nixvim = { # This just enables NixVim. # If all you have is this, then there will be little visible difference # when compared to just installing NeoVim. enable = true; maps.normal = { # Equivalent to nnoremap ; : ";" = ":"; # Equivalent to nmap gg Man "gg" = { silent = true; buffer = true; remap = false; action = "Man" # Etc... }; # We can set the leader key: leader = ","; # We can create maps for every mode! # There is .normal, .insert, .visual and .operator # These are aliased to .n, .i, .v and .o # We can also set options: options = { tabstop = 4; shiftwidth = 4; noexpandtab = true; mouse = "a"; # etc... } # Of course, we can still use comfy vimscript: extraConfigVim = builtins.readFile ./init.vim; # Or lua! extraConfigLua = builtins.readFile ./init.lua; # One of the big advantages of NixVim is how it provides modules for # popular vim plugins # Enabling a plugin this way skips all the boring configuration that # some plugins tend to require. plugins = { lightline = { enable = true; # This is optional - it will default to your enabled colorscheme colorscheme = "wombat"; # This is one of lightline's example configurations active = { left = [ [ "mode", "paste" ] [ "redaonly", "filename", "modified", "helloworld" ] ]; }; component = { helloworld = "Hello, world!"; }; }; # Of course, there are a lot more plugins available. # You can find an up-to-date list here: # https://nixvim.pta2002.com/plugins }; # There is a separate namespace for colorschemes: colorschemes.gruvbox.enable = true; # What about plugins not available as a module? # Use extraPlugins: extraPlugins = with pkgs.vimPlugins; [ vim-toml ]; }; }