A highly modular, extensible and distro-agnostic Neovim distribution for Nix/NixOS.
Go to file
NotAShelf bbfa3e5c5b
chore: update license year
2023-02-06 08:14:42 +03:00
.github/workflows CI: fix invalid attribute in nix-install-action 2023-02-06 01:33:45 +03:00
assets dev: new screenshots 2023-02-06 05:26:34 +03:00
docs docs: update readme & style 2023-02-06 05:27:15 +03:00
modules refactor: move `gestures`, `which-key`, `telescope` and `cheatsheet` to utils 2023-02-06 08:13:38 +03:00
.envrc dev: rebase on a less personalized neovim flake 2023-02-01 22:11:37 +03:00
.gitignore feat: update gitignore 2023-02-06 01:21:32 +03:00
LICENSE chore: update license year 2023-02-06 08:14:42 +03:00
README.md docs: update readme 2023-02-06 08:14:28 +03:00
flake.lock chore: clean up flake & inputs 2023-02-06 08:14:13 +03:00
flake.nix chore: clean up flake & inputs 2023-02-06 08:14:13 +03:00

README.md

An Nix wrapped IDE layer for the superior text editor, Neovim.



A highly configurable nix flake for Neovim, packing everything you might need to create your own neovim IDE.

Install

Using nix

The easiest way to install is to use the nix profile command. To install the default configuration, run:

nix run github:notashelf/neovim-flake

The package exposes .#nix as the default output. You may use .#nix, .#tidal or .#maximal to get different configurations.

It is as simply as changing the target output to get a different configuration. For example, to get a configuration with tidal support, run:

nix run github:notashelf/neovim-flake#tidal

Similar instructions will apply for nix profile install.

On NixOS

NixOS users may add this repo to their flake inputs as such:

{
  inputs = {
    # point at this repository, you may pin specific revisions or branches while using `github:`
    neovim-flake.url = "github:notashelf/neovim-flake";
    
    # you may override our nixpkgs with your own, this will save you some cache hits and s recommended
    nixpkgs.follows = "nixpkgs"; 
  };
}

Then, you can use the neovim-flake input in your systemPackages or home.packages.

Configure

TODO (awaiting #1 to be merged, which implements a separate configuration file)

Documentation

See the neovim-flake Manual for detailed documentation, available options, and release notes. If you want to dive right into trying neovim-flake you can get a fully featured configuration with nix language support by running:

nix run github:notashelf/neovim-flake

The documentation is scarce right now as a result of the ongoing rebase and refactor, but shall be available once more soon.

Help

You can create an issue on the issue tracker to ask questions or report bugs. I am not yet on spaces like matrix or IRC, so please use the issue tracker for now.

Philosophy

The philosophy behind this flake configuration is to create an easily configurable and reproducible Neovim environment. While it does sacrifice in size (which I know some users will find disagreeable), it offers a lot of flexibility and customizability in exchange for the large size of the flake inputs. The KISS (Keep it simple, stupid) principle has been abandoned here, but you can ultimately declare a configuration that follows KISS. For it is very easy to bring your own plugins and configurations. Whether you are a developer, writer, or live coder (see tidal cycles below!), quickly craft a config that suits every project's need. Think of it like a distribution of Neovim that takes advantage of pinning vim plugins and third party dependencies (such as tree-sitter grammars, language servers, and more).

One should never get a broken config when setting options. If setting multiple options results in a broken Neovim, file an issue! Each plugin knows when another plugin which allows for smart configuration of keybindings and automatic setup of things like completion sources and languages.

Credits

This configuration is based on a few other configurations, including:

I am grateful for their work and inspiration.

FAQ

Q: Why is this flake so big?

A: I have sacrificed in size in order to provide a highly configurable and reproducible Neovim environment. A binary cache is provided to eleminate the need to build the flake from source, but it is still a large flake. If you do not need all the features, you can use the default nix output instead of the maximal output. This will reduce size by a lot, but you will lose some language specific features.

Q: Will you use a plugin manager?

A: No. If you feel the need to ask that question, then you have missed the whole point of using nix and ultimately this flake. We load plugins with raw lua.