Neovim: Difference between revisions

From NixOS Wiki
imported>Onny
mNo edit summary
mNo edit summary
(21 intermediate revisions by 12 users not shown)
Line 1: Line 1:
[https://neovim.io Neovim] is a fork of [[Vim]] aiming to improve the codebase, allowing for easier implementation of APIs, improved user experience and plugin implementation.  
[https://neovim.io/ Neovim] is a highly extensible and open source text editor that aims to improve upon and modernize the popular [[Vim]] editor. It's designed to be a drop-in replacement for Vim, maintaining compatibility with most Vim plugins and configurations while offering additional features and improvements. Neovim focuses on extensibility, usability, and performance.
 
It introduces a powerful plugin architecture that allows for asynchronous plugin execution, which can significantly improve performance for certain operations. It also includes a built-in terminal emulator, allowing users to run shell commands directly within the editor. The project emphasizes code quality and maintainability, with a clean, well-documented codebase that makes it easier for developers to contribute.


== Installation ==
== Installation ==


=== With Home Manager ===
==== Using nix-shell ====
 
<syntaxhighlight lang="bash" start="3">
[https://nixos.wiki/wiki/Home_Manager Home Manager] has a module for Neovim, which can be enabled via
nix-shell -p neovim
 
</syntaxhighlight>
  programs.neovim = {
    enable = true;
    extraConfig = <nowiki>''</nowiki>
      set number relativenumber
    <nowiki>''</nowiki>;
  };
 
More information about the module can be found here: [https://nix-community.github.io/home-manager/options.html#opt-programs.neovim.enable Home Manager Manual].
 
=== System-wide ===
 
If you do not use Home Manager, you can use the following code in your NixOS configuration:
 
  programs.neovim = {
    enable = true;
    defaultEditor = true;
  };


You can also manually add Neovim to your packages. This should only be used if the two version above do not work for you.
==== Using Global Configuration ====
<syntaxhighlight lang="text">
environment.systemPackages = [
  pkgs.neovim
];
</syntaxhighlight>After modifying your configuration, apply the changes by running:<syntaxhighlight lang="bash">
sudo nixos-rebuild switch
</syntaxhighlight>


  environment.systemPackages = [ pkgs.neovim ];
==== Using Home Configuration ====
<syntaxhighlight lang="text">
home.packages = [  
  pkgs.neovim  
];
</syntaxhighlight>After updating your configuration, apply the changes by running:<syntaxhighlight lang="bash">
home-manager switch
</syntaxhighlight>


== Configuration ==
== Configuration ==


Neovim shares most of its configuration with Vim. See the [[Vim|Vim page]] for more details on the use of both.
==== Basic ====
<syntaxhighlight lang="nix">
# Global Configuration
programs.neovim = {
  enable = true;
  defaultEditor = true;
};


=== With Home Manager ===
# Home Configuration
programs.neovim = {
  enable = true;
  extraConfig = ''
    set number relativenumber
  '';
};
</syntaxhighlight>


The Home Manager module does not expose many configuration options. Therefore, the easiest way to get started is to use the [https://nix-community.github.io/home-manager/options.html#opt-programs.neovim.extraConfig extraConfig] option.
==== Advanced ====
You can copy your old config or directly load your default Neovim config via:
<syntaxhighlight lang="nix">
 
# Global Configuration
   programs.neovim.extraConfig = lib.fileContents ../path/to/your/init.vim;
programs.neovim = {
 
  enable = true;
To use Neovim as your default editor, you can set the <code>EDITOR</code> [https://search.nixos.org/options?show=environment.variables&type=packages&query=environment.variables environmental variable] to "nvim" by adding the following to your NixOS configuration:
  defaultEditor = true;
 
   viAlias = true;
  environment.variables.EDITOR = "nvim";
  vimAlias = true;
 
  configure = {
The Home Manager module does also expose options to automatically add <code>vi</code> and <code>vim</code> aliases.
    customRC = ''
To use them, add the following to your Home Manager configuration:
      set number
 
      set cc=80
  programs.neovim = {
      set list
    viAlias = true;
      set listchars=tab:→\ ,space:·,nbsp:␣,trail:•,eol:¶,precedes:«,extends:»
     vimAlias = true;
      if &diff
        colorscheme blue
      endif
    '';
    packages.myVimPackage = with pkgs.vimPlugins; {
      start = [ ctrlp ];
     };
   };
   };
};


==== Installing Plugins ====
# Home Configuration
# You have to add the line below to set it as the default editor:
environment.variables.EDITOR = "nvim";
</syntaxhighlight>


Plugins can be installed using the <code>programs.neovim.plugins</code> option.
== Tips and Tricks ==
You can add only the plugin, or the plugin with its corresponding config:


  programs.neovim.plugins = [
==== Where to see a list of options? ====
    pkgs.vimPlugins.nvim-tree-lua
The home manager options are defined in the following [https://nix-community.github.io/home-manager/options.xhtml#opt-programs.neovim.enable Home Manager Options Manual].
    {
      plugin = pkgs.vimPlugins.vim-startify;
      config = "let g:startify_change_to_vcs_root = 0";
    }
  ];


If you only add the plugin, you can add the configuration as described above.
The global options are listed on [https://mynixos.com/search?q=nixpkgs%2Foption%2Fprograms.neovim MyNixOS].  


An index of official packages can be found in on [https://search.nixos.org/packages?from=0&size=50&sort=relevance&type=packages&query=vimPlugins search.nixos.org].
==== Can I use the latest version? ====
In addition to the official packages, there are several user maintained repositories, such as [https://github.com/m15a/nixpkgs-vim-extra-plugins vim-extra-plugins] or [https://github.com/NixNeovim/NixNeovimPlugins NixNeovimPlugins].
Have a look at the [https://github.com/nix-community/neovim-nightly-overlay Neovim Nightly Overlay] to install the most recent current nightly version of Neovim.


=== System-wide ===
You can run the master version via the following command:


The NixOS module does not have an <code>extraConfig</code> option as the Home Manager module does.
nix run "github:nix-community/neovim-nightly-overlay"
Instead, you can use the <code>programs.neovim.configure</code> option as described [https://search.nixos.org/options?show=programs.neovim.configure&type=packages&query=neovim here].


The following example configures RC commands and enables the plugin <code>vim-nix</code> to support syntax highlighting for Nix files
==== What if I don't want to configure it myself? ====
If you prefer not to configure your system manually, NixOS offers several predefined configurations and community-supported options. Here are a few of them:


  programs.neovim = {
* [https://www.lazyvim.org/ LazyVim]
    enable = true;
* [https://astronvim.com/ AstroVim]
    configure = {
* [https://nvchad.com/ NVChad]
      customRC = ''
* [https://wiki.nixos.org/wiki/LunarVim LunarVim]
        set number
        set cc=80
        set list
        set listchars=tab:→\ ,space:·,nbsp:␣,trail:•,eol:¶,precedes:«,extends:»
        if &diff
          colorscheme blue
        endif
      '';
      packages.myVimPackage = with pkgs.vimPlugins; {
        start = [ vim-nix ];
      };
    };
  };


Similarly to the Home Manager module, to set Neovim as your default editor you have to set the <code>EDITOR</code> environment variable like this:
==== How to configure plugins? ====
<syntaxhighlight lang="nix">
plugins = [
  # Example Plugin: nvim-tree-lua
  pkgs.vimPlugins.nvim-tree-lua


   environment.variables.EDITOR = "nvim";
   # Example Plugin: vim-startify with configuration
  {
    plugin = pkgs.vimPlugins.vim-startify;
    config = "let g:startify_change_to_vcs_root = 0";
  }


Further, the NixOS module does also expose options to automatically add <code>vi</code> and <code>vim</code> aliases.
  # Example Plugin: nvim-colorizer-lua with Lua config
To use them, add the following to your NixOS configuration:
  # Due to how the runtimepath for Lua modules is processed, your configuration may require
  # packadd! plugin-name to require a module. A home-manager example:
  {
    plugin = pkgs.vimPlugins.nvim-colorizer-lua;
    config = ''
      packadd! nvim-colorizer.lua
      lua << END
        require 'colorizer'.setup {
          '*'; -- Highlight all files, but customize some others.
          '!vim'; -- Exclude vim from highlighting.
        }
      END
    '';
  }


   programs.neovim = {
   # Example Plugin: nvim-treesitter with Lua config
    viAlias = true;
  {
    vimAlias = true;
    plugin = pkgs.vimPlugins.nvim-treesitter;
   };
    config = ''
      packadd! nvim-treesitter
      lua <<EOF
        require'nvim-treesitter.configs'.setup {
          highlight = {
            enable = true,              -- false will disable the whole extension
            disable = {},              -- list of languages that will be disabled
          },
          incremental_selection = {
            enable = true,
            keymaps = {
              init_selection = "gnn",
              node_incremental = "grn",
              scope_incremental = "grc",
              node_decremental = "grm",
            },
          },
          textobjects = {
            select = {
              enable = true,
              lookahead = true,
              keymaps = {
                ["af"] = "@function.outer",
                ["if"] = "@function.inner",
                ["ac"] = "@class.outer",
                ["ic"] = "@class.inner",
              },
            },
          },
        }
      EOF
    '';
   }


== Tips and tricks ==
  # Installing grammars for tree-sitter
  # Option 1: Install all grammar packages
  pkgs.vimPlugins.nvim-treesitter.withAllGrammars
 
  # Option 2: Install specific grammar packages
  # (pkgs.vimPlugins.nvim-treesitter.withPlugins (p: [ p.c p.java ]))


=== Build Neovim using Nix ===
  # Option 3: Installing grammars without Nix
  # Installing grammar packages through the built-in command can lead to errors.
  # The following Neovim command will install syntax highlighting for the C programming language: :TSInstall c
];
</syntaxhighlight>


You can also compile Neovim using nix. For this, the Neovim GitHub page has more information on this:
== References ==
[https://github.com/neovim/neovim/wiki/Building-Neovim#nixos--nix Neovim Guide].


The Neovim repository also contains a flake.
# https://neovim.io/
You can run the master version via the following command:
# https://github.com/neovim/neovim
# https://nix-community.github.io/home-manager/options.xhtml#opt-programs.neovim.enable
# https://mynixos.com/search?q=nixpkgs%2Foption%2Fprograms.neovim
# https://github.com/m15a/flake-awesome-neovim-plugins
# https://github.com/NixNeovim/NixNeovimPlugins
# https://www.lazyvim.org/
# https://astronvim.com/
# https://nvchad.com/
# [[LunarVim]]


nix run "github:neovim/neovim?dir=contrib"
[[Category:Applications]]


Finally, there is a [https://github.com/nix-community/neovim-nightly-overlay Neovim Nightly Overlay].
[[Category:Text Editor]]
 
=== Note on Lua plugins  ===
 
Due to how the `runtimepath` for Lua modules is [https://github.com/nanotee/nvim-lua-guide#a-note-about-packages processed], your configuration may require <code>packadd! plugin-name</code> to require a module. A home-manager example:
 
  programs.neovim = {
    plugins = [
      {
        plugin = nvim-colorizer-lua
        config = <nowiki>''</nowiki>
          packadd! nvim-colorizer.lua
          lua require 'colorizer'.setup()
        <nowiki>''</nowiki>;
      }
    ];
  }
 
== See Also ==
* [[Vim]]
* [[Treesitter|Treesitter for Neovim]]
 
[[Category:Applications]]

Revision as of 13:15, 24 June 2024

Neovim is a highly extensible and open source text editor that aims to improve upon and modernize the popular Vim editor. It's designed to be a drop-in replacement for Vim, maintaining compatibility with most Vim plugins and configurations while offering additional features and improvements. Neovim focuses on extensibility, usability, and performance.

It introduces a powerful plugin architecture that allows for asynchronous plugin execution, which can significantly improve performance for certain operations. It also includes a built-in terminal emulator, allowing users to run shell commands directly within the editor. The project emphasizes code quality and maintainability, with a clean, well-documented codebase that makes it easier for developers to contribute.

Installation

Using nix-shell

nix-shell -p neovim

Using Global Configuration

environment.systemPackages = [
  pkgs.neovim
];

After modifying your configuration, apply the changes by running:

sudo nixos-rebuild switch

Using Home Configuration

home.packages = [ 
  pkgs.neovim 
];

After updating your configuration, apply the changes by running:

home-manager switch

Configuration

Basic

# Global Configuration
programs.neovim = {
   enable = true;
   defaultEditor = true;
};

# Home Configuration
programs.neovim = {
  enable = true;
  extraConfig = ''
    set number relativenumber
  '';
};

Advanced

# Global Configuration
programs.neovim = {
  enable = true;
  defaultEditor = true;
  viAlias = true;
  vimAlias = true;
  configure = {
    customRC = ''
      set number
      set cc=80
      set list
      set listchars=tab:→\ ,space:·,nbsp:␣,trail:•,eol:¶,precedes:«,extends:»
      if &diff
        colorscheme blue
      endif
    '';
    packages.myVimPackage = with pkgs.vimPlugins; {
      start = [ ctrlp ];
    };
  };
};

# Home Configuration
# You have to add the line below to set it as the default editor:
environment.variables.EDITOR = "nvim";

Tips and Tricks

Where to see a list of options?

The home manager options are defined in the following Home Manager Options Manual.

The global options are listed on MyNixOS.

Can I use the latest version?

Have a look at the Neovim Nightly Overlay to install the most recent current nightly version of Neovim.

You can run the master version via the following command:

nix run "github:nix-community/neovim-nightly-overlay"

What if I don't want to configure it myself?

If you prefer not to configure your system manually, NixOS offers several predefined configurations and community-supported options. Here are a few of them:

How to configure plugins?

plugins = [
  # Example Plugin: nvim-tree-lua
  pkgs.vimPlugins.nvim-tree-lua

  # Example Plugin: vim-startify with configuration
  {
    plugin = pkgs.vimPlugins.vim-startify;
    config = "let g:startify_change_to_vcs_root = 0";
  }

  # Example Plugin: nvim-colorizer-lua with Lua config
  # Due to how the runtimepath for Lua modules is processed, your configuration may require 
  # packadd! plugin-name to require a module. A home-manager example:
  {
    plugin = pkgs.vimPlugins.nvim-colorizer-lua;
    config = ''
      packadd! nvim-colorizer.lua
      lua << END
        require 'colorizer'.setup {
          '*'; -- Highlight all files, but customize some others.
          '!vim'; -- Exclude vim from highlighting.
        }
      END
    '';
  }

  # Example Plugin: nvim-treesitter with Lua config
  {
    plugin = pkgs.vimPlugins.nvim-treesitter;
    config = ''
      packadd! nvim-treesitter
      lua <<EOF
        require'nvim-treesitter.configs'.setup {
          highlight = {
            enable = true,              -- false will disable the whole extension
            disable = {},               -- list of languages that will be disabled
          },
          incremental_selection = {
            enable = true,
            keymaps = {
              init_selection = "gnn",
              node_incremental = "grn",
              scope_incremental = "grc",
              node_decremental = "grm",
            },
          },
          textobjects = {
            select = {
              enable = true,
              lookahead = true,
              keymaps = {
                ["af"] = "@function.outer",
                ["if"] = "@function.inner",
                ["ac"] = "@class.outer",
                ["ic"] = "@class.inner",
              },
            },
          },
        }
      EOF
    '';
  }

  # Installing grammars for tree-sitter
  # Option 1: Install all grammar packages
  pkgs.vimPlugins.nvim-treesitter.withAllGrammars
  
  # Option 2: Install specific grammar packages
  # (pkgs.vimPlugins.nvim-treesitter.withPlugins (p: [ p.c p.java ]))

  # Option 3: Installing grammars without Nix
  # Installing grammar packages through the built-in command can lead to errors. 
  # The following Neovim command will install syntax highlighting for the C programming language: :TSInstall c
];

References

  1. https://neovim.io/
  2. https://github.com/neovim/neovim
  3. https://nix-community.github.io/home-manager/options.xhtml#opt-programs.neovim.enable
  4. https://mynixos.com/search?q=nixpkgs%2Foption%2Fprograms.neovim
  5. https://github.com/m15a/flake-awesome-neovim-plugins
  6. https://github.com/NixNeovim/NixNeovimPlugins
  7. https://www.lazyvim.org/
  8. https://astronvim.com/
  9. https://nvchad.com/
  10. LunarVim