DEV Community

Cover image for Switching Configs in Neovim
Michael Uloth
Michael Uloth

Posted on • Originally published at michaeluloth.com on

Switching Configs in Neovim

Learning how to configure Neovim can be overwhelming. One way to get started is to install a few pre-built configurations (like LazyVim, NvChad, AstroNvim, LunarVim or the official Neovim Kickstart) and see what you like.

Most installation instructions will tell you to replace everything in your ~/.config/nvim directory with the new configuration. But once you do, you lose the ability to launch Neovim with your previous config.

With that approach, you can only have one Neovim config installed at a time.

But what if you want to compare two configs? Or maintain different configs for different purposes (e.g. one for work and one for personal projects)?

Install each config in its own directory

To be able to use more than one config, you'll need to make a couple changes to your setup:

  1. Instead of installing a new configuration in ~/.config/nvim, install it in a custom ~/.config subdirectory
  2. Each time you open Neovim, specify which config you want by setting the NVIM_APPNAME environment variable in your launch command

For example, assuming you've installed LazyVim in ~/.config/nvim-lazyvim, you'd launch it with this command:

$ NVIM_APPNAME=nvim-lazyvim nvim
Enter fullscreen mode Exit fullscreen mode

Neovim uses NVIM_APPNAME to determine which config directory to load. If you don't include it (or set it to an invalid value), Neovim will use the default config in ~/.config/nvim.

Switching configs using alias, select or fzf

Lets assume your ~/.config directory includes these subdirectories:

~/.config
├── nvim-astrovim
│ └── init.lua
├── nvim-kickstart
│ ├── init.lua
│ └── lua
│ ├── custom
│ └── kickstart
├── nvim-lazyvim
│ ├── init.lua
│ └── lua
│ ├── config
│ └── plugins
├── nvim-lunarvim
│ └── config.lua
└── nvim-nvchad
│ ├── init.lua
│ └── lua
│ ├── core
│ ├── custom
│ └── plugins
└── nvim
Enter fullscreen mode Exit fullscreen mode

To quickly open Neovim using each config, you could create an alias for each launch command:

alias v='nvim' # default Neovim config
alias vz='NVIM_APPNAME=nvim-lazyvim nvim' # LazyVim
alias vc='NVIM_APPNAME=nvim-nvchad nvim' # NvChad
alias vk='NVIM_APPNAME=nvim-kickstart nvim' # Kickstart
alias va='NVIM_APPNAME=nvim-astrovim nvim' # AstroVim
alias vl='NVIM_APPNAME=nvim-lunarvim nvim' # LunarVim
Enter fullscreen mode Exit fullscreen mode

Or use select to list your configs so you can choose one:

vv() {
  select config in lazyvim kickstart nvchad astrovim lunarvim
  do NVIM_APPNAME=nvim-$config nvim; break; done
}
Enter fullscreen mode Exit fullscreen mode

Which would produce a menu like this:

A terminal after running the command "vv", showing the options "1) lazyvim 2) kickstart 3) nvchad 4) astrovim 5) lunarvim".

Or you could get fancy and use a fuzzy finder like fzf to do the same thing:

vv() {
  # Assumes all configs exist in directories named ~/.config/nvim-*
  local config=$(fd --max-depth 1 --glob 'nvim-*' ~/.config | fzf --prompt="Neovim Configs > " --height=~50% --layout=reverse --border --exit-0)

  # If I exit fzf without selecting a config, don't open Neovim
  [[ -z $config ]] && echo "No config selected" && return

  # Open Neovim with the selected config
  NVIM_APPNAME=$(basename $config) nvim
}
Enter fullscreen mode Exit fullscreen mode

Here's what that fzf menu would look like:

A terminal after running the command "vv", showing a menu with the options "nvim-lazyvim", "nvim-kickstart", "nvim-nvchad", "nvim-astrovim" and "nvim-lunarvim".

Conclusion

Configuring Neovim can be daunting, but being able to install a few configs and compare them is a great way to gather inspiration for your own custom config.

Good luck!

Further Reading

Top comments (1)

Collapse
 
voyeg3r profile image
Sérgio Araújo

I have a lazyvim alias:

alias lv='(){(export NVIM_APPNAME=lv;export MYVIMRC=~/.config/lv/init.lua;nvim "$@")}'
Enter fullscreen mode Exit fullscreen mode

Note that the alias function runs in a subshell, so once you quit neovim the environment gets back to default. For those who do not know subshell is started whith ().