Neovim: Difference between revisions

add neovim-fhs wrapper from nixpkgs pr 334032 and link the related issue
U32 (talk | contribs)
mNo edit summary
 
(8 intermediate revisions by 5 users not shown)
Line 1: Line 1:
<languages/>
<languages/>
{{infobox application
  |name=Neovim
  |image=Neovim-mark.svg
  |type=Text Editor
  |developer=Neovim Core Team & Community
  |firstRelease=November 1, 2015
  |latestRelease=Nvim 0.11.2 (May 30, 2025)
  |status=Active
  |license=[https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0] (with parts under Vim license)
  |os=Cross-platform (Linux, macOS, Windows)
  |platform=Desktop
  |programmingLanguage=C, Lua, Vim Script
  |website=[https://neovim.io/ neovim.io]
  |github=neovim/neovim
  |bugTracker=[https://github.com/neovim/neovim/issues GitHub Issues]
  |documentation=[https://neovim.io/doc/ Official Documentation]
}}
<translate>
<translate>
<!--T:1-->
<!--T:1-->
[https://neovim.io/ Neovim]<ref>Neovim Team, "Home - Neovim", Neovim Official Website, N/A. https://neovim.io/</ref> is a highly extensible and open source text editor that aims to improve upon and modernize the popular [[Vim]]<ref>NixOS Wiki, Vim. https://wiki.nixos.org/wiki/Vim</ref> 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.
:''See also: [[Vim]]''
[https://neovim.io/ Neovim]<ref>Neovim Team, "Home - Neovim", Neovim Official Website, Last updated March 2025, Accessed June 2025. https://neovim.io/</ref> is a highly extensible and open source text editor that aims to improve upon and modernize the popular [[Vim]]<ref>NixOS Wiki Community, "Vim", NixOS Wiki, Last edited 24 February 2025, Accessed June 2025. https://wiki.nixos.org/wiki/Vim</ref> 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.


<!--T:2-->
<!--T:2-->
Line 9: Line 27:
== Installation == <!--T:3-->
== Installation == <!--T:3-->


==== Using nix-shell ==== <!--T:4-->
==== Shell ====


</translate>
To temporarily use Neovim in a shell environment without modifying your system configuration, you can run:
<syntaxhighlight lang="bash" start="3">
{{code|lang=bash|line=no|1=$ nix-shell -p neovim}}
nix-shell -p neovim
This makes the Neovim editor available in your current shell. You can then launch Neovim by typing <code>neovim</code>.
</syntaxhighlight>
<translate>


==== Using Global Configuration ==== <!--T:5-->
==== System setup ====


</translate>
To install Neovim system-wide, making it available to all users, add the following to your configuration:
<syntaxhighlight lang="text">
{{code|lang=nix|line=no|1=# Example for /etc/nixos/configuration.nix
environment.systemPackages = [
environment.systemPackages = [
  pkgs.neovim
   pkgs.neovim
];
</syntaxhighlight>
<translate>
 
<!--T:37-->
After modifying your configuration, apply the changes by running:
 
</translate>
<syntaxhighlight lang="bash">
sudo nixos-rebuild switch
</syntaxhighlight>
<translate>
 
==== Using Home Configuration ==== <!--T:6-->
 
</translate>
<syntaxhighlight lang="text">
home.packages = [
   pkgs.neovim  
];
];
</syntaxhighlight>
<translate>


<!--T:38-->
# User-specific installation (in ~/.config/nixpkgs/home.nix)
After updating your configuration, apply the changes by running:
home.packages = [
  pkgs.neovim
];}}
After rebuilding your system with <code>nixos-rebuild switch</code> or <code>home-manager switch</code>, Neovim will be installed and accessible.


</translate>
<syntaxhighlight lang="bash">
home-manager switch
</syntaxhighlight>
<translate>


== Configuration == <!--T:7-->
== Configuration == <!--T:7-->
Line 60: Line 53:


</translate>
</translate>
<syntaxhighlight lang="nix">
{{code|lang=nix|line=no|1=<translate>
<translate>
<!--T:39-->
<!--T:39-->
# Global Configuration
# Global Configuration
Line 79: Line 71:
     set number relativenumber
     set number relativenumber
   '';
   '';
};
};}}
</syntaxhighlight>
<translate>
<translate>


Line 86: Line 77:


</translate>
</translate>
<syntaxhighlight lang="nix">
{{code|lang=nix|line=no|1=<translate>
<translate>
<!--T:41-->
<!--T:41-->
# Global Configuration
# Global Configuration
Line 117: Line 107:
# You have to add the line below to set it as the default editor:
# You have to add the line below to set it as the default editor:
</translate>
</translate>
environment.variables.EDITOR = "nvim";
environment.variables.EDITOR = "nvim";}}
</syntaxhighlight>
<translate>
<translate>


== Tips and Tricks == <!--T:12-->
== Tips and Tricks == <!--T:12-->
 
{{expand}}
==== Location of Options ==== <!--T:13-->
 
<!--T:43-->
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]<ref>Nix Community, "Home Manager Option Search", Nix Community GitHub Pages, N/A. https://nix-community.github.io/home-manager/options.xhtml#opt-programs.neovim.enable</ref>.
 
<!--T:14-->
The global options are listed on [https://search.nixos.org/options?query=programs.neovim programs.neovim.*]<ref>Nix Community, "NixOS Option Search", "Search: programs.neovim", N/A. https://search.nixos.org/options?query=programs.neovim</ref>.


==== Package Variations ==== <!--T:15-->
==== Package Variations ==== <!--T:15-->


<!--T:44-->
Have a look at the [https://github.com/nix-community/neovim-nightly-overlay Neovim Nightly Overlay]<ref>Nix Community, "neovim-nightly-overlay", GitHub, Last updated June 2025, Accessed June 2025. https://github.com/nix-community/neovim-nightly-overlay</ref> to install the most recent current nightly version of Neovim.
Have a look at the [https://github.com/nix-community/neovim-nightly-overlay Neovim Nightly Overlay]<ref>Nix Community, "neovim-nightly-overlay", GitHub, N/A. https://github.com/nix-community/neovim-nightly-overlay</ref> to install the most recent current nightly version of Neovim.
 
<!--T:16-->
You can run the master version via the following command:
You can run the master version via the following command:
 
{{code|lang=bash|line=no|1=$ nix run "github:nix-community/neovim-nightly-overlay"}}
<!--T:17-->
nix run "github:nix-community/neovim-nightly-overlay"


==== Plugin Management ==== <!--T:21-->
==== Plugin Management ==== <!--T:21-->


</translate>
</translate>
<syntaxhighlight lang="nix">
{{code|lang=nix|line=no|1=plugins = [
plugins = [
<translate>
<translate>
   <!--T:49-->
   <!--T:49-->
Line 165: Line 141:
   <!--T:51-->
   <!--T:51-->
# Example Plugin: nvim-colorizer-lua with Lua config
# Example Plugin: nvim-colorizer-lua with Lua config
   # Due to how the runtimepath for Lua modules is processed, your configuration may require  
   # 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:
   # packadd! plugin-name to require a module. A home-manager example:
</translate>
</translate>
Line 232: Line 208:
   <!--T:58-->
   <!--T:58-->
# Option 3: Installing grammars without Nix
# Option 3: Installing grammars without Nix
   # Installing grammar packages through the built-in command can lead to errors.  
   # 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
   # The following Neovim command will install syntax highlighting for the C programming language: :TSInstall c
</translate>
</translate>
];
];}}
</syntaxhighlight>
<translate>
<translate>


Line 242: Line 217:


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


<!--T:19-->
<!--T:19-->
* [https://www.lazyvim.org/ LazyVim]<ref>LazyVim Team, "LazyVim", LazyVim Official Website, N/A. https://www.lazyvim.org/</ref>
* [https://www.lazyvim.org/ LazyVim]<ref>LazyVim Team, "Getting Started", LazyVim Official Website, © 2025, Accessed June 2025. https://www.lazyvim.org/</ref>


<!--T:46-->
<!--T:46-->
* [https://astronvim.com/ AstroVim]<ref>AstroNvim Team, "AstroNvim", AstroNvim Official Website, N/A. https://astronvim.com/</ref>
* [https://astronvim.com/ AstroNvim]<ref>AstroNvim Team, "AstroNvim", AstroNvim Official Website, N/A, Accessed June 2025. https://astronvim.com/</ref>


<!--T:47-->
<!--T:47-->
* [https://nvchad.com/ NVChad]<ref>NvChad Team, "NvChad", NvChad Official Website, N/A. https://nvchad.com/</ref>
* [https://nvchad.com/ NVChad]<ref>Siduck, "NvChad", NvChad Official Website, © 2025, Accessed June 2025. https://nvchad.com/</ref>
 
<!--T:48-->
Another excellent option is [https://www.lunarvim.org/docs/installation LunarVim]<ref>LunarVim Team, "Installation", LunarVim Documentation, N/A. https://www.lunarvim.org/docs/installation</ref>. The development community describes it as "an IDE layer for Neovim with sane defaults." LunarVim includes an installer/updater for LSP modules and other features. It can be installed via the <code>lunarvim</code> package from <code>nixpkgs</code> and is started with the <code>lvim</code> command.
 
<!--T:20-->
The configuration for LunarVim is stored in <code>./config/lvim</code>.


==== FHS wrapper ====
<!--T:48--> ==== FHS wrapper ====


You can create a custom neovim FHS wrapper
You can create a custom neovim FHS wrapper
 
{{code|lang=nix|line=no|1=
<syntaxhighlight lang="nix">
{
{
   buildFHSEnv,
   buildFHSEnv,
Line 277: Line 245:
   '';
   '';
}
}
</syntaxhighlight>
}}


this is copied from [nixpkgs#334032][https://github.com/NixOS/nixpkgs/pull/334032]
<!--T:FHS_WRAPPER_SOURCE-->
This FHS wrapper example is based on a contribution to nixpkgs<ref name="nixpkgs-pr-334032">NixOS, "Feature: Custom Neovim FHS Wrapper" (Pull Request #334032), GitHub, 2025, Accessed June 2025. https://github.com/NixOS/nixpkgs/pull/334032</ref>.
For an extended configuration that includes setting up `mason.nvim` with a similar FHS environment, see this [https://github.com/NixOS/nixpkgs/issues/281219#issuecomment-2284713258 NixOS/nixpkgs issue comment].


See also: [this configuration][https://github.com/NixOS/nixpkgs/issues/281219#issuecomment-2284713258] which extends upon the above to setup mason.nvim
== Troubleshooting == <!--T:59-->
{{expand}}
 
==== lua-language-server: Dynamically linked executable error ====
 
In your <code>~/.local/state/nvim/lsp.log</code>, you have the following error:
 
{{code|lang=text|line=no|1=[ERROR][2025-06-07 23:13:15] ...p/_transport.lua:36 "rpc" "lua-language-server" "stderr" "Could not start dynamically linked executable: /home/incogshift/.local/share/nvim/mason/packages/lua-language-server/libexec/bin/lua-language-server\nNixOS cannot run dynamically linked executables intended for generic\nlinux environments out of the box. For more information, see:\nhttps://nix.dev/permalink/stub-ld\n"}}


== Troubleshooting == <!--T:59-->
<!--T:LUA_LS_SO_REF-->
A solution for this issue can be found on Stack Overflow<ref name="so-lua-ls-dynlink">Stack Overflow Contributor, "Answer to 'Could not start dynamically linked executable... on NixOS'", Stack Overflow, 2025, Accessed June 2025. https://stackoverflow.com/a/78215911/27134695</ref>.


== References == <!--T:27-->
== References == <!--T:27-->
== See also ==
* [[Home Manager]] – For declarative Neovim configuration at the user level: [https://nix-community.github.io/home-manager/options.html#opt-programs.neovim.enable Neovim module in Home Manager]
* [https://neovim.io/doc/ Official Documentation] – Official Neovim documentation.
* [https://search.nixos.org/options?channel=unstable&query=programs.neovim NixOS options for Neovim] – System-level Neovim configuration.
* [https://discourse.nixos.org/search?q=neovim Neovim discussions on NixOS Discourse] – Community tips, troubleshooting, and use cases.
* [https://github.com/nix-community/neovim-overlay Neovim Overlay on Nixpkgs] – For nightly builds and additional Neovim packages.
== References ==


</translate>
</translate>