{ pkgs, ... }: { 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; keymaps = [ # Equivalent to nnoremap ; : { key = ";"; action = ":"; } # Equivalent to nmap gg Man { key = "gg"; action = "Man"; options = { silent = true; remap = false; }; } # Etc... ]; # We can set the leader key: globals.mapleader = ","; # We can create maps for every mode! # There is .normal, .insert, .visual, .operator, etc! # We can also set options: opts = { tabstop = 4; shiftwidth = 4; expandtab = false; 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 settings = { colorscheme = "wombat"; # This is one of lightline's example configurations active = { left = [ [ "mode" "paste" ] [ "readonly" "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 ]; }; }