NOTE I have updated this repo to use a flake approach so that it can easily be incorporated into any setup.
I apologize that this change is not backwards compatible as nixvim standalone requires a specific folder structure. I have moved all plugins under the
/configdirectory and have simplified the plugins directory structure. The settinghave_nerd_fonthas been renamed toenable_nerds_fontsIf you are looking for the previous implementation it can be found here
This repo is a personal project to learn Nix & Nixvim within NixOS while also learning/setting up kickstart.nvim. I have attempted to be as true to kickstart as possible while adding new and updated comments to help those learning Nix.
- Nix does not lend itself to the same separation paradigms used by kickstart.nvim. The idea of keeping the configuration as a single file similar to kickstart.nvim was originally planned but as I translated more of the init.lua over I found Nix lended itself better to a more modular implementation. This means most plugins have their own .nix files that are imported into the base nixvim.nix file.
- I used as little lua code as possible in the .nix files but due to Nixvim being a relatively new Nix module not everything can be natively configured. Any lua code will slowly be removed as new Nixvim features come out that allow for native methods of configuation.
- I did not include Lazy nor Mason as I felt those both went against the Nix philosophy of having all your dependencies installed and managed through the .nix files. While it is possible to configure Lazy in Nixvim the implementation is very limited at the moment. Further enhancements to Lazy which would allow lazy loading are being discussed here and I may update this repo to use Lazy when these features are implemented.
- kickstart.nixvim is somewhat slower than kickstart.nvim, some of this has to do with the fact that this repo is not using Lazy. I'll have to do futher investigation to identify how else to speed up this implementation.
If not using standalone setup this installation process assumes you understand the basics of importing and adding dependencies to your .nix configuration files.
- Basic utils:
git - Clipboard tool (xclip/xsel/win32yank or other depending on platform)
- A Nerd Font: optional, provides various icons
- if you have it set
enable_nerd_fontsinnixvim.nixto true
- if you have it set
- Language Dependencies:
- If you want to write Typescript, you will need
npm - If you want to write Golang, you will need
go - etc.
- If you want to write Typescript, you will need
You can use this repo in four ways:
| Use Case | Method |
|---|---|
| Standalone Neovim | Run a bundled Neovim executable with kickstart.nixvim config, no setup |
| NixOS Module | System-level integration on NixOS |
| Home Manager | User-level integration on any OS using Home Manager |
| nix-darwin | User-level integration on macOS using nix-darwin |
Run instantly without modifying any user or system configuration:
nix run github:JMartJonesy/kickstart.nixvim -- <FILE>Or build your own runnable nvim that can be reused
nix build github:JMartJonesy/kickstart.nixvim
./result/bin/nvim <FILE>- Add kickstart.nixvim to your
flake.nix:
inputs.kickstart-nixvim.url = "github:JMartJonesy/kickstart.nixvim";- Import the nixosModules in your
configuration.nix:
{
imports = [
inputs.kickstart-nixvim.nixosModules.default
];
programs.nixvim.enable = true;
}- Add kickstart.nixvim to your
flake.nix:
inputs.kickstart-nixvim.url = "github:JMartJonesy/kickstart.nixvim";- Import the homeManagerModules in your
home.nix:
{
imports = [
inputs.kickstart-nixvim.homeManagerModules.default
];
programs.nixvim.enable = true;
}- Add kickstart.nxivim to your
flake.nix:
inputs.kickstart-nixvim.url = "github:JMartJonesy/kickstart.nixvim";- Import the darwinModules in your
darwin-configuration.nix:
{
imports = [
inputs.kickstart-nixvim.darwinModules.default
];
programs.nixvim.enable = true;
}NOTE Backup your previous configuration (if any exists) This can be found on Linux under the path
$XDG_CONFIG_HOME/nvimor~/.config/nvim
- Fork this repo so that you have your own copy that you can update and version control.
- Clone kickstart.nixvim
- If you created your own fork
cd ~ git clone https://github.com/<YOUR-GITHUB-USERNAME>/kickstart.nixvim.git
- If you created your own fork
- a. If you are using kickstart.nixvim with your own flake then update your flake.nix to refer to your local kickstart.nixvim repo
inputs.kickstart-nixvim.url = "path:<PATH_TO>/kickstart.nixvim";- b. Or if you are running kickstart.nixvim standalone run in your cloned repo directory
Note: For quick testing you can add any custom nixvim configurations into
/config/default.nix
nix build .
./result/bin/nvim- a. If you are using kickstart.nixvim with your own flake confirm the
init.luafile has been created and loads without errors
nvim ~/.config/nvim/init.lua- What should I do if I already have a pre-existing neovim configuration?
- You should back it up and then delete all associated files.
- This includes your existing init.lua and the neovim files in
~/.localwhich can be deleted withrm -rf ~/.local/share/nvim/
- Can I keep my existing configuration in parallel to kickstart.nixvim?
- Yes! You can use NVIM_APPNAME
=nvim-NAMEto maintain multiple configurations. For example, move your old configuration to~/.config/nvim-backupand create an alias:When you run Neovim usingalias nvim-backup='NVIM_APPNAME="nvim-backup" nvim'nvim-backupalias it will use the alternative config directory and the matching local directory~/.local/share/nvim-backup.
- Yes! You can use NVIM_APPNAME
- What if I want to "uninstall" kickstart.nixvim:
- Remove kickstart-nixvim from your
flake.nixand the module imports from youconfiguration.nix,home.nix, ordarwin-configuration.nix - Remove the kickstart.nixvim directory
rm -r ~/<PATH_TO>/kickstart.nixvim - Remove any .local nvim files
rm -rf ~/.local/share/nvim/ - Optional: Move your previously backed up lua configuration files to
$XDG_CONFIG_HOME/nvimor~/.config/nvim - Rebuild your NixOS configuration
nixos-rebuild switch
- Remove kickstart-nixvim from your