summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthieu Coudron <mcoudron@hotmail.com>2021-08-08 16:55:24 +0200
committerMatthieu Coudron <teto@users.noreply.github.com>2021-08-09 21:23:29 +0200
commit06684792fb7b739f4081e21824952911d35c1bc7 (patch)
tree8433c38aa2f55be105e1a5bcc5665af285c1e4fc
parentbe0b03e5a890458385ee09a1410f9f516ece40bd (diff)
downloadnixpkgs-06684792fb7b739f4081e21824952911d35c1bc7.tar
nixpkgs-06684792fb7b739f4081e21824952911d35c1bc7.tar.gz
nixpkgs-06684792fb7b739f4081e21824952911d35c1bc7.tar.bz2
nixpkgs-06684792fb7b739f4081e21824952911d35c1bc7.tar.lz
nixpkgs-06684792fb7b739f4081e21824952911d35c1bc7.tar.xz
nixpkgs-06684792fb7b739f4081e21824952911d35c1bc7.tar.zst
nixpkgs-06684792fb7b739f4081e21824952911d35c1bc7.zip
vimPlugins.plenary: init from lua package
This commit shows how to convert luarocks packages into (neo)vim ones.
The advantage for neovim lua plugins to register their rockspec (aka
package definition) is that the plugin can express its dependencies and
a few metadata through it.
-rw-r--r--maintainers/scripts/luarocks-packages.csv3
-rw-r--r--pkgs/misc/vim-plugins/default.nix14
-rw-r--r--pkgs/misc/vim-plugins/overrides.nix4
-rw-r--r--pkgs/misc/vim-plugins/vim-utils.nix33
-rw-r--r--pkgs/top-level/all-packages.nix6
-rw-r--r--pkgs/top-level/lua-packages.nix2
6 files changed, 53 insertions, 9 deletions
diff --git a/maintainers/scripts/luarocks-packages.csv b/maintainers/scripts/luarocks-packages.csv
index b092a58b2d1..c5cee697c8f 100644
--- a/maintainers/scripts/luarocks-packages.csv
+++ b/maintainers/scripts/luarocks-packages.csv
@@ -1,4 +1,4 @@
-# nix name, luarocks name, server, version,luaversion,maintainers
+# nix name,luarocks name,server,version,luaversion,maintainers
 alt-getopt,,,,,arobyn
 ansicolors,,,,,
 argparse,,,,,
@@ -16,6 +16,7 @@ cyrussasl,,,,,
 digestif,,,,lua5_3,
 dkjson,,,,,
 fifo,,,,,
+gitsigns.nvim,,,,lua5_1,
 http,,,,,vcunat
 inspect,,,,,
 ldbus,,http://luarocks.org/dev,,,
diff --git a/pkgs/misc/vim-plugins/default.nix b/pkgs/misc/vim-plugins/default.nix
index cbc6ec7380b..b56dced8971 100644
--- a/pkgs/misc/vim-plugins/default.nix
+++ b/pkgs/misc/vim-plugins/default.nix
@@ -1,5 +1,5 @@
 # TODO check that no license information gets lost
-{ callPackage, config, lib, vimUtils, vim, darwin, llvmPackages }:
+{ callPackage, config, lib, vimUtils, vim, darwin, llvmPackages, luaPackages }:
 
 let
 
@@ -7,7 +7,15 @@ let
 
   inherit (lib) extends;
 
-  initialPackages = self: {};
+  initialPackages = self: {
+    # Convert derivation to a vim plugin.
+    toVimPlugin = drv:
+      drv.overrideAttrs(oldAttrs: {
+        passthru = (oldAttrs.passthru or {}) // {
+          vimPlugin = true;
+        };
+      });
+  };
 
   plugins = callPackage ./generated.nix {
     inherit buildVimPluginFrom2Nix;
@@ -22,7 +30,7 @@ let
   overrides = callPackage ./overrides.nix {
     inherit (darwin.apple_sdk.frameworks) Cocoa CoreFoundation CoreServices;
     inherit buildVimPluginFrom2Nix;
-    inherit llvmPackages;
+    inherit llvmPackages luaPackages;
   };
 
   aliases = if (config.allowAliases or true) then (import ./aliases.nix lib) else final: prev: {};
diff --git a/pkgs/misc/vim-plugins/overrides.nix b/pkgs/misc/vim-plugins/overrides.nix
index 669ca2cb9ee..b2dd6f0f5f0 100644
--- a/pkgs/misc/vim-plugins/overrides.nix
+++ b/pkgs/misc/vim-plugins/overrides.nix
@@ -86,6 +86,8 @@
 , iferr
 , impl
 , reftools
+# must be lua51Packages
+, luaPackages
 }:
 
 self: super: {
@@ -282,6 +284,8 @@ self: super: {
     dependencies = with self; [ plenary-nvim ];
   });
 
+  plenary-nvim = super.toVimPlugin(luaPackages.plenary-nvim);
+
   gruvbox-nvim = super.gruvbox-nvim.overrideAttrs (old: {
     dependencies = with self; [ lush-nvim ];
   });
diff --git a/pkgs/misc/vim-plugins/vim-utils.nix b/pkgs/misc/vim-plugins/vim-utils.nix
index 5ca3aef2358..ca5381c5972 100644
--- a/pkgs/misc/vim-plugins/vim-utils.nix
+++ b/pkgs/misc/vim-plugins/vim-utils.nix
@@ -2,6 +2,7 @@
 { lib, stdenv, vim, vimPlugins, vim_configurable, buildEnv, writeText, writeScriptBin
 , nix-prefetch-hg, nix-prefetch-git
 , fetchFromGitHub, runtimeShell
+, hasLuaModule
 }:
 
 /*
@@ -186,7 +187,21 @@ let
 
   nativeImpl = packages:
   (let
-    link = (packageName: dir: pluginPath: "ln -sf ${pluginPath}/share/vim-plugins/* $out/pack/${packageName}/${dir}");
+    # dir is "start" or "opt"
+    linkLuaPlugin = plugin: packageName: dir: ''
+      mkdir -p $out/pack/${packageName}/${dir}/${plugin.pname}/lua
+      ln -sf ${plugin}/share/lua/5.1/* $out/pack/${packageName}/${dir}/${plugin.pname}/lua
+      ln -sf ${plugin}/${plugin.pname}-${plugin.version}-rocks/${plugin.pname}/${plugin.version}/* $out/pack/${packageName}/${dir}/${plugin.pname}/
+    '';
+
+    linkVimlPlugin = pluginPath: packageName: dir:
+      "ln -sf ${pluginPath}/${rtpPath}/* $out/pack/${packageName}/${dir}";
+
+      # (builtins.trace pluginPath )
+      link = pluginPath: if hasLuaModule pluginPath
+        then linkLuaPlugin pluginPath
+        else linkVimlPlugin pluginPath;
+
     packageLinks = (packageName: {start ? [], opt ? []}:
     let
       # `nativeImpl` expects packages to be derivations, not strings (as
@@ -199,9 +214,9 @@ let
       [ "mkdir -p $out/pack/${packageName}/start" ]
       # To avoid confusion, even dependencies of optional plugins are added
       # to `start` (except if they are explicitly listed as optional plugins).
-      ++ (builtins.map (link packageName "start") (lib.unique (startWithDeps ++ depsOfOptionalPlugins)))
+      ++ (builtins.map (x: link x packageName "start") (lib.unique (startWithDeps ++ depsOfOptionalPlugins)))
       ++ ["mkdir -p $out/pack/${packageName}/opt"]
-      ++ (builtins.map (link packageName "opt") opt)
+      ++ (builtins.map (x: link x packageName "opt") opt)
     );
     packDir = (packages:
       stdenv.mkDerivation {
@@ -217,6 +232,18 @@ let
     set runtimepath^=${packDir packages}
   '');
 
+  /* Generates a vimrc string
+
+    packages is an attrset with {name: { start = [ vim derivations ]; opt = [ vim derivations ]; }
+    Example:
+      vimrcContent {
+
+        packages = { home-manager = { start = [vimPlugins.vim-fugitive]; opt = [];};
+        beforePlugins = '';
+        customRc = ''let mapleader = " "'';
+
+      };
+   */
   vimrcContent = {
     packages ? null,
     vam ? null,
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index f3273d52d55..cf4e86402b8 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -32195,10 +32195,14 @@ with pkgs;
 
   viewnior = callPackage ../applications/graphics/viewnior { };
 
-  vimUtils = callPackage ../misc/vim-plugins/vim-utils.nix { };
+
+  vimUtils = callPackage ../misc/vim-plugins/vim-utils.nix {
+    inherit (lua51Packages) hasLuaModule;
+  };
 
   vimPlugins = recurseIntoAttrs (callPackage ../misc/vim-plugins {
     llvmPackages = llvmPackages_6;
+    luaPackages = lua51Packages;
   });
 
   vimb-unwrapped = callPackage ../applications/networking/browsers/vimb { };
diff --git a/pkgs/top-level/lua-packages.nix b/pkgs/top-level/lua-packages.nix
index 62ddc14ff93..f16917a9439 100644
--- a/pkgs/top-level/lua-packages.nix
+++ b/pkgs/top-level/lua-packages.nix
@@ -83,7 +83,7 @@ with self; {
   };
 
 
-  inherit toLuaModule lua-setup-hook;
+  inherit toLuaModule hasLuaModule lua-setup-hook;
   inherit buildLuarocksPackage buildLuaApplication;
   inherit requiredLuaModules luaOlder luaAtLeast
     isLua51 isLua52 isLua53 isLuaJIT lua callPackage;