Commit Graph

30 Commits

Author SHA1 Message Date
Matthieu Coudron
c17904b980 neovim: more flexibility in startup commands
the neovim mechanisms generate provider rc configuration such as:
vim.g.<LANG>_host_prog=$out/bin/nvim-<LANG>

In home-manager, we want more control over it, e.g., to pass it via
command line or in init.lua.

We also want to retrieve the generated packpathDirs so that we can link
it in the expected $XDG_DATA_HOME folder so that we then dont have to
tell neovim where look for it anymore.
2023-04-07 10:21:22 +02:00
linsui
7ee8aa8039 neovimUtils: only set packpath/rtp as needed
... when there are plugins
2023-03-19 18:38:33 +01:00
Matthieu Coudron
71210f0410 neovimUtils.makeNeovimConfig: expose packpathsDir
this way home-manager can link the packpathDir in
~/.local/share/nvim/site which makes package discovery work without
needing to `set packpath` (making the wrapper further useless).
2023-02-28 11:59:22 +01:00
Matthieu Coudron
2acce7dfdc vimPlugins: make usage of luaPackages less confusing
right now the src is ignored in:

```
  lush-nvim = buildNeovimPlugin {
    pname = "lush.nvim";
    version = "2022-08-09";
    src = fetchFromGitHub {
      owner = "rktjmp";
      repo = "lush.nvim";
      rev = "6b9f399245de7bea8dac2c3bf91096ffdedfcbb7";
      sha256 = "0rb77rwmbm438bmbjfk5hwrrcn5sihsa1413bdpc27rw3rrn8v8z";
    };
    meta.homepage = "https://github.com/rktjmp/lush.nvim/";
  };
```

which is very confusing. With this PR, we correctly override the src and
the version of the package. We introduce a rockspecVersion attribute of
lua package to be able to still find the rockspec when the
"version" field needs to be different than "rockspecVersion".
2022-10-13 19:57:35 +02:00
Vladimír Čunát
a5dfac88d5
Merge branch 'master' into staging-next
The java conflicts weren't trivial.  Hopefully OK.
2022-09-19 07:40:23 +02:00
Colin Heffernan
d309a0b9e9
neovimUtils: put optional plugins in incorrect folder
all plugins ended up in "start". Also adds a test
2022-09-18 23:19:11 +02:00
Artturi
8b739f24a3
Merge pull request #187934 from Artturin/luasplice1 2022-08-31 16:58:55 +03:00
Guillaume Girol
38e16b192a neovim: fix plugin loading order
fixes https://github.com/NixOS/nixpkgs/issues/188167
2022-08-26 21:17:31 +02:00
Artturin
ec35f6341b lua-packages: try splicing 2022-08-26 20:04:02 +03:00
Matthieu Coudron
e3c0484acd neovim: correctly concat single line configs
The changes introduced in https://github.com/NixOS/nixpkgs/pull/184364#discussion_r945772144
didn't concat correctly the plugin configs when they were a single
string see: https://github.com/nix-community/home-manager/pull/3147

This adds a test for it.
2022-08-20 21:12:18 +02:00
Matthieu Coudron
cc0ff183c6 neovimUtils: remove the compatibility layer introduced in 2018
removed compatFun, we need to make the code clearer
2022-08-09 16:21:59 +02:00
Matthieu Coudron
b4d8662c4a neovimUtils.makeNeovimConfig: remove mention of python2
latest neovim stopped supporting python2. We have an ellipsis as input so this should not cause any further error
2022-08-09 16:21:59 +02:00
Matthieu Coudron
cda1f8ae46 neovim: pass packpath via the wrapper
Adding "packages" to the neovim distribution triggers the wrapping of
the derivation. This is because it tries to "set packpath/rtp" in the
init.vim.

If we set these arguments via --cmd instead we can avoid to create an
init.vim, which can be useful if we want to wrap an init.lua later on
(in home-manager for instance, we dont want to generate viml code).

Also removes the support for "configure" in makeNeovimConfig and
configure.plug / configure.vam packages in the compatibility layer
'legacyWrapper'.
2022-08-09 16:20:55 +02:00
Matthieu Coudron
0fb2e47b7f vimUtils: improve comments 2022-08-09 12:01:33 +02:00
Matthieu Coudron
5d38ae801a neovimUtils: merge host settings so that they use a single --cmd flag
vim is limited to 10 --cmd flags so using fewer is better
2022-08-09 12:01:32 +02:00
Matthieu Coudron
ce505a3984
vimPlugins: use lua derivation if it exists (#178180)
Neovim plugins are now more often than not written in lua.
One advantage of the lua ecosystem over vim's is the existence of
luarocks and the rockspec format, which allows to specify a package
dependencies formally.
I would like more neovim plugins to have a formal description,
"rockspec" being the current candidate.
This MR allows to use nix lua packages as neovim plugins, so as to enjoy
every benefit that rockspecs bring:
- dependdency discovery
- ability to run test suite
- luarocks versioning
- rockspec metadata

the vim update.py script will check if an attribute with the vim plugin
pname exists in lua51Packages. If it does, it uses
buildNeovimPluginFrom2Nix on it, which modifies the luarocks config to
do an almost flat install (luarocks will install the package in the lua
folder instead of share/5.1/lua etc).
It also calls toVimPlugin on it to get all the vim plugin niceties.

The list of packages that could benefit from this is available at
https://luarocks.org/labels/neovim
but I hope it grows.
2022-06-19 14:18:16 +02:00
Naïm Favier
2ae69114a1
makeWrapper: implement --inherit-argv0
For symmetry/interoperability with makeBinaryWrapper. Implemented as
--argv0 '$0'
2022-05-10 22:07:57 +02:00
Maximilian Bosch
a70b3d1847
neovim: prepend extraMakeWrapperArgs in wrapper with a space (#148409) 2021-12-03 16:37:52 +01:00
Matthieu Coudron
88842910b5 lua: introduced a lua lib
Goal is to improve separation between packages and utilities.
Can help with autocompletion/navigate nixpkgs faster.
Also it will help standardize how LUA_PATH is exported across packages,
so that one can more easily make lua changes across nixpkgs (for
    instance changing where lua modules are installed).
2021-09-12 03:03:56 +02:00
Gregory Anders
8477406018 neovim: allow extra Lua packages 2021-08-31 19:46:44 -06:00
Matthieu Coudron
4a2cbcfbb4 neovim: add some tests
To test the generated RC is included in the file and that we have the
option not to wrap the RC.

run:
nix-build -A tests.vim
2021-06-07 18:21:21 +02:00
Matthieu Coudron
c73371e04b
neovim: fix neovim.override (#124785)
* neovim: temporary revert to unbreak user configs

Newly introduced "plugins" parameter is disabled until we get a better
testing infrastructure to minimize breaking changes.
2021-05-29 16:36:39 +02:00
Matthieu Coudron
7836469dbe neovimUtils: makeNeovimConfig accepts plugins/customRc
mimics home-manager interface and makes it easier to associate configs with plugins. Added a test as well.
2021-05-25 22:41:08 +02:00
Konstantin Alekseev
e349b77943 neovim: set g:loaded_python_provider = 0 2021-05-05 18:04:09 +02:00
Martin Weinelt
d942d4473d neovim, neovimUtils, neovim-qt: drop python2 support
In 2a00e53bd pynvim support for python2 was disabled, this broke the
neovim build. I really think it is time to let go of python2 support in
neovim.
2021-05-02 22:43:53 +02:00
Matthieu Coudron
86d7ed8d10 neovim: take into account vi(m)Alias
restore feature broken by compatibility layer
2020-11-03 09:31:56 +01:00
Matthieu Coudron
42cc40ddc8 neovim: fix nodejs and ruby generation
These were not translated correctly in the new wrapper.
2020-11-02 23:27:49 +01:00
Matthieu Coudron
295948f40f neovim: dont wrap when is null
restore previous behavior
2020-11-01 18:55:57 +01:00
Matthieu Coudron
95702fe6d2 neovim: revert change to extraMakeWrapperArgs
wrapNeovim incited users to use a list instead of a string. Revert that:
the change is not super useful while breaking home-manager.
2020-10-31 14:32:02 +01:00
Matthieu Coudron
2eb1610725
neovimUtils: neovim utilities to handle more usecases
Current nixpkgs always wraps neovim with the "-u" which has sideeffects as explained in https://github.com/NixOS/nixpkgs/issues/55376 : 
1.  vim won't set the variable $MYVIMRC as explained #34215
 2. vim skips loading folder-specific .vimrc / .nvimrc

I wanted to provide a way for users to better control what flags are used to wrap neovim. This is achived by introducing wrapNeovimUnstable et neovimUtils, utilities to help with that. We provide a compatibility layer so that wrapNeovim still works and to let us experiment with wrapNeovimUnstable to better control neovim configuration, plugin dependencies, haskell environment etc so that it becomes easier to generate per-project neovim config.

With this commit, it's possible for instance for home-manager to wrap neovim without the `-u` and just write the config in the
expected $XDG_CONFIG_HOME/nvim/init.vim .
Expect wrapNeovimUnstable interface to evolve in the upcoming months.
2020-10-29 09:50:26 +01:00