about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nixos/doc/manual/from_md/release-notes/rl-2111.section.xml7
-rw-r--r--nixos/doc/manual/release-notes/rl-2111.section.md3
-rw-r--r--pkgs/applications/editors/neovim/tests.nix3
-rw-r--r--pkgs/applications/editors/neovim/utils.nix7
-rw-r--r--pkgs/applications/editors/vis/default.nix15
-rw-r--r--pkgs/applications/window-managers/awesome/default.nix22
-rw-r--r--pkgs/development/interpreters/lua-5/build-lua-package.nix2
-rw-r--r--pkgs/development/interpreters/lua-5/interpreter.nix27
-rw-r--r--pkgs/development/interpreters/lua-5/wrap-lua.nix13
-rw-r--r--pkgs/development/interpreters/lua-5/wrapper.nix19
-rw-r--r--pkgs/development/interpreters/luajit/default.nix24
-rw-r--r--pkgs/development/lua-modules/default.nix7
-rw-r--r--pkgs/development/lua-modules/lib.nix63
-rw-r--r--pkgs/development/lua-modules/overrides.nix6
-rw-r--r--pkgs/games/mudlet/default.nix6
-rw-r--r--pkgs/servers/xmpp/prosody/default.nix31
-rw-r--r--pkgs/top-level/all-packages.nix9
-rw-r--r--pkgs/top-level/lua-packages.nix89
18 files changed, 213 insertions, 140 deletions
diff --git a/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml
index c723a6dd2addb..b18e291914703 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml
@@ -1150,6 +1150,13 @@ Superuser created successfully.
           other and share data.
         </para>
       </listitem>
+      <listitem>
+        <para>
+          <literal>lua</literal> and <literal>luajit</literal>
+          interpreters have been patched to avoid looking into /usr/lib
+          directories, thus increasing the purity of the build.
+        </para>
+      </listitem>
     </itemizedlist>
   </section>
 </section>
diff --git a/nixos/doc/manual/release-notes/rl-2111.section.md b/nixos/doc/manual/release-notes/rl-2111.section.md
index 440069988d0ce..3dc15449c772b 100644
--- a/nixos/doc/manual/release-notes/rl-2111.section.md
+++ b/nixos/doc/manual/release-notes/rl-2111.section.md
@@ -328,3 +328,6 @@ To be able to access the web UI this port needs to be opened in the firewall.
 - `rofi` has been updated from '1.6.1' to '1.7.0', one important thing is the removal of the old xresources based configuration setup. Read more [in rofi's changelog](https://github.com/davatorium/rofi/blob/cb12e6fc058f4a0f4f/Changelog#L1).
 
 - ipfs now defaults to not listening on you local network. This setting was change as server providers won't accept port scanning on their private network. If you have several ipfs instances running on a network you own, feel free to change the setting `ipfs.localDiscovery = true;`. localDiscovery enables different instances to discover each other and share data.
+
+- `lua` and `luajit` interpreters have been patched to avoid looking into /usr/lib
+  directories, thus increasing the purity of the build.
diff --git a/pkgs/applications/editors/neovim/tests.nix b/pkgs/applications/editors/neovim/tests.nix
index 5f4cda714a679..08342a1543d51 100644
--- a/pkgs/applications/editors/neovim/tests.nix
+++ b/pkgs/applications/editors/neovim/tests.nix
@@ -133,7 +133,7 @@ rec {
     configure.pathogen.pluginNames = [ "vim-nix" ];
   };
 
-  nvimWithLuaPackages = wrapNeovim2 "with-lua-packages" (makeNeovimConfig {
+  nvimWithLuaPackages = wrapNeovim2 "-with-lua-packages" (makeNeovimConfig {
     extraLuaPackages = ps: [ps.mpack];
     customRC = ''
       lua require("mpack")
@@ -141,6 +141,7 @@ rec {
   });
 
   nvim_with_lua_packages = runTest nvimWithLuaPackages ''
+    export HOME=$TMPDIR
     ${nvimWithLuaPackages}/bin/nvim -i NONE --noplugin -es
   '';
 })
diff --git a/pkgs/applications/editors/neovim/utils.nix b/pkgs/applications/editors/neovim/utils.nix
index 837c9a79ffe84..bf0d80d1f07dd 100644
--- a/pkgs/applications/editors/neovim/utils.nix
+++ b/pkgs/applications/editors/neovim/utils.nix
@@ -78,8 +78,7 @@ let
         ++ (extraPython3Packages ps)
         ++ (lib.concatMap (f: f ps) pluginPython3Packages));
 
-      lua = neovim-unwrapped.lua;
-      luaEnv = lua.withPackages(ps: extraLuaPackages ps);
+      luaEnv = neovim-unwrapped.lua.withPackages(extraLuaPackages);
 
       # Mapping a boolean argument to a key that tells us whether to add or not to
       # add to nvim's 'embedded rc' this:
@@ -115,8 +114,8 @@ let
         ] ++ lib.optionals (binPath != "") [
           "--suffix" "PATH" ":" binPath
         ] ++ lib.optionals (luaEnv != null) [
-          "--prefix" "LUA_PATH" ";" "${luaEnv}/share/lua/${lua.luaversion}/?.lua"
-          "--prefix" "LUA_CPATH" ";" "${luaEnv}/lib/lua/${lua.luaversion}/?.so"
+          "--prefix" "LUA_PATH" ";" (neovim-unwrapped.lua.pkgs.lib.genLuaPathAbsStr luaEnv)
+          "--prefix" "LUA_CPATH" ";" (neovim-unwrapped.lua.pkgs.lib.genLuaCPathAbsStr luaEnv)
         ];
 
 
diff --git a/pkgs/applications/editors/vis/default.nix b/pkgs/applications/editors/vis/default.nix
index 9a020233f3b09..a658f95ac0145 100644
--- a/pkgs/applications/editors/vis/default.nix
+++ b/pkgs/applications/editors/vis/default.nix
@@ -1,8 +1,11 @@
 { lib, stdenv, fetchFromGitHub, pkg-config, makeWrapper, makeDesktopItem
-, ncurses, libtermkey, lpeg, lua
+, ncurses, libtermkey, lua
 , acl ? null, libselinux ? null
 }:
 
+let
+  luaEnv = lua.withPackages(ps: [ ps.lpeg ]);
+in
 stdenv.mkDerivation rec {
   pname = "vis";
   version  = "0.7";
@@ -19,8 +22,7 @@ stdenv.mkDerivation rec {
   buildInputs = [
     ncurses
     libtermkey
-    lua
-    lpeg
+    luaEnv
   ] ++ lib.optionals stdenv.isLinux [
     acl
     libselinux
@@ -30,16 +32,13 @@ stdenv.mkDerivation rec {
     patchShebangs ./configure
   '';
 
-  LUA_CPATH="${lpeg}/lib/lua/${lua.luaversion}/?.so;";
-  LUA_PATH="${lpeg}/share/lua/${lua.luaversion}/?.lua";
-
   postInstall = ''
     mkdir -p "$out/share/applications"
     cp $desktopItem/share/applications/* $out/share/applications
     echo wrapping $out/bin/vis with runtime environment
     wrapProgram $out/bin/vis \
-      --prefix LUA_CPATH ';' "${lpeg}/lib/lua/${lua.luaversion}/?.so" \
-      --prefix LUA_PATH ';' "${lpeg}/share/lua/${lua.luaversion}/?.lua" \
+      --prefix LUA_CPATH ';' "${luaEnv}/lib/lua/${lua.luaversion}/?.so" \
+      --prefix LUA_PATH ';' "${luaEnv}/share/lua/${lua.luaversion}/?.lua" \
       --prefix VIS_PATH : "\$HOME/.config:$out/share/vis"
   '';
 
diff --git a/pkgs/applications/window-managers/awesome/default.nix b/pkgs/applications/window-managers/awesome/default.nix
index a526636063e96..90b559e7d44ca 100644
--- a/pkgs/applications/window-managers/awesome/default.nix
+++ b/pkgs/applications/window-managers/awesome/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchFromGitHub, luaPackages, cairo, librsvg, cmake, imagemagick, pkg-config, gdk-pixbuf
+{ lib, stdenv, fetchFromGitHub, lua, cairo, librsvg, cmake, imagemagick, pkg-config, gdk-pixbuf
 , xorg, libstartup_notification, libxdg_basedir, libpthreadstubs
 , xcb-util-cursor, makeWrapper, pango, gobject-introspection
 , which, dbus, nettools, git, doxygen
@@ -12,10 +12,11 @@
 # needed for beautiful.gtk to work
 assert gtk3Support -> gtk3 != null;
 
+let
+  luaEnv = lua.withPackages(ps: [ ps.lgi ps.ldoc ]);
+in
+
 stdenv.mkDerivation rec {
-  lgi = luaPackages.lgi;
-  lua = luaPackages.lua;
-  ldoc = luaPackages.ldoc;
   pname = "awesome";
   version = "4.3";
 
@@ -35,7 +36,6 @@ stdenv.mkDerivation rec {
     xmlto docbook_xml_dtd_45
     docbook_xsl findXMLCatalogs
     asciidoctor
-    ldoc
   ];
 
   outputs = [ "out" "doc" ];
@@ -44,7 +44,7 @@ stdenv.mkDerivation rec {
 
   propagatedUserEnvPkgs = [ hicolor-icon-theme ];
   buildInputs = [ cairo librsvg dbus gdk-pixbuf gobject-introspection
-                  git lgi libpthreadstubs libstartup_notification
+                  git luaEnv libpthreadstubs libstartup_notification
                   libxdg_basedir lua nettools pango xcb-util-cursor
                   xorg.libXau xorg.libXdmcp xorg.libxcb xorg.libxshmfence
                   xorg.xcbutil xorg.xcbutilimage xorg.xcbutilkeysyms
@@ -55,14 +55,14 @@ stdenv.mkDerivation rec {
   cmakeFlags = [
     #"-DGENERATE_MANPAGES=ON"
     "-DOVERRIDE_VERSION=${version}"
-  ] ++ lib.optional luaPackages.isLuaJIT "-DLUA_LIBRARY=${lua}/lib/libluajit-5.1.so"
+  ] ++ lib.optional lua.pkgs.isLuaJIT "-DLUA_LIBRARY=${lua}/lib/libluajit-5.1.so"
   ;
 
   GI_TYPELIB_PATH = "${pango.out}/lib/girepository-1.0";
   # LUA_CPATH and LUA_PATH are used only for *building*, see the --search flags
   # below for how awesome finds the libraries it needs at runtime.
-  LUA_CPATH = "${lgi}/lib/lua/${lua.luaversion}/?.so";
-  LUA_PATH  = "${lgi}/share/lua/${lua.luaversion}/?.lua;;";
+  LUA_CPATH = "${luaEnv}/lib/lua/${lua.luaversion}/?.so";
+  LUA_PATH  = "${luaEnv}/share/lua/${lua.luaversion}/?.lua;;";
 
   postInstall = ''
     # Don't use wrapProgram or the wrapper will duplicate the --search
@@ -70,8 +70,8 @@ stdenv.mkDerivation rec {
     mv "$out/bin/awesome" "$out/bin/.awesome-wrapped"
     makeWrapper "$out/bin/.awesome-wrapped" "$out/bin/awesome" \
       --set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE" \
-      --add-flags '--search ${lgi}/lib/lua/${lua.luaversion}' \
-      --add-flags '--search ${lgi}/share/lua/${lua.luaversion}' \
+      --add-flags '--search ${luaEnv}/lib/lua/${lua.luaversion}' \
+      --add-flags '--search ${luaEnv}/share/lua/${lua.luaversion}' \
       --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH"
 
     wrapProgram $out/bin/awesome-client \
diff --git a/pkgs/development/interpreters/lua-5/build-lua-package.nix b/pkgs/development/interpreters/lua-5/build-lua-package.nix
index 5639b2a4bb901..64e872ad5f638 100644
--- a/pkgs/development/interpreters/lua-5/build-lua-package.nix
+++ b/pkgs/development/interpreters/lua-5/build-lua-package.nix
@@ -238,7 +238,7 @@ builtins.removeAttrs attrs ["disabled" "checkInputs" "externalDeps" "extraVariab
     inherit externalDeps;
   } // passthru;
 
-  meta = with lib.maintainers; {
+  meta = {
     platforms = lua.meta.platforms;
     # add extra maintainer(s) to every package
     maintainers = (meta.maintainers or []) ++ [ ];
diff --git a/pkgs/development/interpreters/lua-5/interpreter.nix b/pkgs/development/interpreters/lua-5/interpreter.nix
index 3476b2b648b60..a780e6ba49f1e 100644
--- a/pkgs/development/interpreters/lua-5/interpreter.nix
+++ b/pkgs/development/interpreters/lua-5/interpreter.nix
@@ -1,7 +1,8 @@
 { lib, stdenv, fetchurl, readline
 , compat ? false
 , callPackage
-, packageOverrides ? (self: super: {})
+, makeWrapper
+, packageOverrides ? (final: prev: {})
 , sourceVersion
 , hash
 , patches ? []
@@ -10,7 +11,10 @@
 , staticOnly ? stdenv.hostPlatform.isStatic
 }:
 let
-luaPackages = callPackage ../../lua-modules {lua=self; overrides=packageOverrides;};
+  luaPackages = callPackage ../../lua-modules {
+    lua = self;
+    overrides = packageOverrides;
+  };
 
 plat = if stdenv.isLinux then "linux"
        else if stdenv.isDarwin then "macosx"
@@ -31,21 +35,32 @@ self = stdenv.mkDerivation rec {
     sha256 = hash;
   };
 
-  LuaPathSearchPaths    = luaPackages.getLuaPathList luaversion;
-  LuaCPathSearchPaths   = luaPackages.getLuaCPathList luaversion;
+  LuaPathSearchPaths    = luaPackages.lib.luaPathList;
+  LuaCPathSearchPaths   = luaPackages.lib.luaCPathList;
   setupHook = luaPackages.lua-setup-hook LuaPathSearchPaths LuaCPathSearchPaths;
 
+  nativeBuildInputs = [ makeWrapper ];
   buildInputs = [ readline ];
 
   inherit patches;
 
-  postPatch = lib.optionalString (!stdenv.isDarwin && !staticOnly) ''
+  # we can't pass flags to the lua makefile because for portability, everything is hardcoded
+  postPatch = ''
+    {
+      echo -e '
+        #undef  LUA_PATH_DEFAULT
+        #define LUA_PATH_DEFAULT "./share/lua/${luaversion}/?.lua;./?.lua;./?/init.lua"
+        #undef  LUA_CPATH_DEFAULT
+        #define LUA_CPATH_DEFAULT "./lib/lua/${luaversion}/?.so;./?.so;./lib/lua/${luaversion}/loadall.so"
+      '
+    } >> src/luaconf.h
+  '' + lib.optionalString (!stdenv.isDarwin && !staticOnly) ''
     # Add a target for a shared library to the Makefile.
     sed -e '1s/^/LUA_SO = liblua.so/' \
         -e 's/ALL_T *= */&$(LUA_SO) /' \
         -i src/Makefile
     cat ${./lua-dso.make} >> src/Makefile
-  '';
+  '' ;
 
   # see configurePhase for additional flags (with space)
   makeFlags = [
diff --git a/pkgs/development/interpreters/lua-5/wrap-lua.nix b/pkgs/development/interpreters/lua-5/wrap-lua.nix
index f00e0d5ac336e..049afcd6116d9 100644
--- a/pkgs/development/interpreters/lua-5/wrap-lua.nix
+++ b/pkgs/development/interpreters/lua-5/wrap-lua.nix
@@ -4,16 +4,13 @@
 , makeWrapper
 }:
 
-with lib;
-
 # defined in trivial-builders.nix
 # imported as wrapLua in lua-packages.nix and passed to build-lua-derivation to be used as buildInput
 makeSetupHook {
-      deps = makeWrapper;
-      substitutions.executable = lua.interpreter;
-      substitutions.lua = lua;
-      substitutions.LuaPathSearchPaths = lib.escapeShellArgs lua.LuaPathSearchPaths;
-      substitutions.LuaCPathSearchPaths = lib.escapeShellArgs lua.LuaPathSearchPaths;
-
+  deps = makeWrapper;
+  substitutions.executable = lua.interpreter;
+  substitutions.lua = lua;
+  substitutions.LuaPathSearchPaths = lib.escapeShellArgs lua.LuaPathSearchPaths;
+  substitutions.LuaCPathSearchPaths = lib.escapeShellArgs lua.LuaPathSearchPaths;
 } ./wrap.sh
 
diff --git a/pkgs/development/interpreters/lua-5/wrapper.nix b/pkgs/development/interpreters/lua-5/wrapper.nix
index 0459b67534d4e..b9ac255d24329 100644
--- a/pkgs/development/interpreters/lua-5/wrapper.nix
+++ b/pkgs/development/interpreters/lua-5/wrapper.nix
@@ -11,13 +11,18 @@
 let
   env = let
     paths =  requiredLuaModules (extraLibs ++ [ lua ] );
-  in (buildEnv {
+  in buildEnv {
     name = "${lua.name}-env";
 
     inherit paths;
     inherit ignoreCollisions;
     extraOutputsToInstall = [ "out" ] ++ extraOutputsToInstall;
 
+    nativeBuildInputs = [
+      makeWrapper
+      (lua.pkgs.lua-setup-hook lua.LuaPathSearchPaths lua.LuaCPathSearchPaths)
+    ];
+
     # we create wrapper for the binaries in the different packages
     postBuild = ''
       if [ -L "$out/bin" ]; then
@@ -37,7 +42,12 @@ let
               rm -f "$out/bin/$prg"
               if [ -x "$prg" ]; then
                 nix_debug "Making wrapper $prg"
-                makeWrapper "$path/bin/$prg" "$out/bin/$prg" --suffix LUA_PATH ';' "$LUA_PATH"   --suffix LUA_CPATH ';' "$LUA_CPATH" ${lib.concatStringsSep " " makeWrapperArgs}
+                makeWrapper "$path/bin/$prg" "$out/bin/$prg" \
+                  --set-default LUA_PATH ";;" \
+                  --suffix LUA_PATH ';' "$LUA_PATH" \
+                  --set-default LUA_CPATH ";;" \
+                  --suffix LUA_CPATH ';' "$LUA_CPATH" \
+                  ${lib.concatStringsSep " " makeWrapperArgs}
               fi
             fi
           done
@@ -62,8 +72,5 @@ let
         '';
     };
     };
-  }).overrideAttrs (_: {
-    # Add extra deps needed for postBuild hook.
-    nativeBuildInputs = [ makeWrapper lua ];
-  });
+  };
 in env
diff --git a/pkgs/development/interpreters/luajit/default.nix b/pkgs/development/interpreters/luajit/default.nix
index 6a163c4b562fa..ac74610bcce9d 100644
--- a/pkgs/development/interpreters/luajit/default.nix
+++ b/pkgs/development/interpreters/luajit/default.nix
@@ -10,7 +10,7 @@
 , extraMeta ? { }
 , callPackage
 , self
-, packageOverrides ? (self: super: { })
+, packageOverrides ? (final: prev: {})
 , enableFFI ? true
 , enableJIT ? true
 , enableJITDebugModule ? enableJIT
@@ -62,6 +62,15 @@ stdenv.mkDerivation rec {
       # passed by nixpkgs CC wrapper is insufficient on its own
       substituteInPlace src/Makefile --replace "#CCDEBUG= -g" "CCDEBUG= -g"
     fi
+
+    {
+      echo -e '
+        #undef  LUA_PATH_DEFAULT
+        #define LUA_PATH_DEFAULT "./share/lua/${luaversion}/?.lua;./?.lua;./?/init.lua"
+        #undef  LUA_CPATH_DEFAULT
+        #define LUA_CPATH_DEFAULT "./lib/lua/${luaversion}/?.so;./?.so;./lib/lua/${luaversion}/loadall.so"
+      '
+    } >> src/luaconf.h
   '';
 
   configurePhase = false;
@@ -88,15 +97,10 @@ stdenv.mkDerivation rec {
     ln -s "$out"/bin/luajit-* "$out"/bin/luajit
   '';
 
-  LuaPathSearchPaths = [
-    "lib/lua/${luaversion}/?.lua"
-    "share/lua/${luaversion}/?.lua"
-    "share/lua/${luaversion}/?/init.lua"
-    "lib/lua/${luaversion}/?/init.lua"
-    "share/${name}/?.lua"
-  ];
-  LuaCPathSearchPaths = [ "lib/lua/${luaversion}/?.so" "share/lua/${luaversion}/?.so" ];
-  setupHook = luaPackages.lua-setup-hook LuaPathSearchPaths LuaCPathSearchPaths;
+  LuaPathSearchPaths    = luaPackages.lib.luaPathList;
+  LuaCPathSearchPaths   = luaPackages.lib.luaCPathList;
+
+  setupHook = luaPackages.lua-setup-hook luaPackages.lib.luaPathList luaPackages.lib.luaCPathList;
 
   passthru = rec {
     buildEnv = callPackage ../lua-5/wrapper.nix {
diff --git a/pkgs/development/lua-modules/default.nix b/pkgs/development/lua-modules/default.nix
index 091b94f58f512..e4927ee304649 100644
--- a/pkgs/development/lua-modules/default.nix
+++ b/pkgs/development/lua-modules/default.nix
@@ -1,7 +1,7 @@
 # inspired by pkgs/development/haskell-modules/default.nix
 { pkgs, lib
 , lua
-, overrides ? (self: super: {})
+, overrides ? (final: prev: {})
 }:
 
 let
@@ -15,7 +15,7 @@ let
   overridenPackages = import ./overrides.nix { inherit pkgs; };
 
   generatedPackages = if (builtins.pathExists ./generated-packages.nix) then
-        pkgs.callPackage ./generated-packages.nix { } else (self: super: {});
+        pkgs.callPackage ./generated-packages.nix { } else (final: prev: {});
 
   extensible-self = lib.makeExtensible
     (extends overrides
@@ -24,7 +24,6 @@ let
               initialPackages
               )
           )
-    )
-          ;
+    );
 in
   extensible-self
diff --git a/pkgs/development/lua-modules/lib.nix b/pkgs/development/lua-modules/lib.nix
new file mode 100644
index 0000000000000..9c31f9a5c53c2
--- /dev/null
+++ b/pkgs/development/lua-modules/lib.nix
@@ -0,0 +1,63 @@
+{ pkgs, lib, lua }:
+let
+  requiredLuaModules = drvs: with lib; let
+    modules =  filter hasLuaModule drvs;
+  in unique ([lua] ++ modules ++ concatLists (catAttrs "requiredLuaModules" modules));
+  # Check whether a derivation provides a lua module.
+  hasLuaModule = drv: drv ? luaModule;
+in
+rec {
+  inherit hasLuaModule requiredLuaModules;
+
+  luaPathList = [
+    "share/lua/${lua.luaversion}/?.lua"
+    "share/lua/${lua.luaversion}/?/init.lua"
+  ];
+  luaCPathList = [
+    "lib/lua/${lua.luaversion}/?.so"
+  ];
+
+  /* generate paths without a prefix
+  */
+  luaPathRelStr = lib.concatStringsSep ";" luaPathList;
+  luaCPathRelStr = lib.concatStringsSep ";" luaCPathList;
+
+  /* generate LUA_(C)PATH value for a specific derivation, i.e., with absolute paths
+  */
+  genLuaPathAbsStr = drv: lib.concatMapStringsSep ";" (x: "${drv}/${x}") luaPathList;
+  genLuaCPathAbsStr = drv: lib.concatMapStringsSep ";" (x: "${drv}/${x}") luaCPathList;
+
+  /* Generate a LUA_PATH with absolute paths
+  */
+  # genLuaPathAbs = drv:
+  #   lib.concatStringsSep ";" (map (x: "${drv}/x") luaPathList);
+
+  luaAtLeast = lib.versionAtLeast lua.luaversion;
+  luaOlder = lib.versionOlder lua.luaversion;
+  isLua51 = (lib.versions.majorMinor lua.version) == "5.1";
+  isLua52 = (lib.versions.majorMinor lua.version) == "5.2";
+  isLua53 = lua.luaversion == "5.3";
+  isLuaJIT = lib.getName lua == "luajit";
+
+  /* generates the relative path towards the folder where
+   seems stable even when using  lua_modules_path = ""
+
+   Example:
+    getDataFolder luaPackages.stdlib
+    => stdlib-41.2.2-1-rocks/stdlib/41.2.2-1/doc
+  */
+  getDataFolder = drv:
+    "${drv.pname}-${drv.version}-rocks/${drv.pname}/${drv.version}";
+
+  /* Convert derivation to a lua module.
+    so that luaRequireModules can be run later
+  */
+  toLuaModule = drv:
+    drv.overrideAttrs( oldAttrs: {
+      # Use passthru in order to prevent rebuilds when possible.
+      passthru = (oldAttrs.passthru or {}) // {
+        luaModule = lua;
+        requiredLuaModules = requiredLuaModules drv.propagatedBuildInputs;
+      };
+    });
+}
diff --git a/pkgs/development/lua-modules/overrides.nix b/pkgs/development/lua-modules/overrides.nix
index a15bd6e536633..247cf89f39450 100644
--- a/pkgs/development/lua-modules/overrides.nix
+++ b/pkgs/development/lua-modules/overrides.nix
@@ -363,6 +363,12 @@ with super;
     '';
   });
 
+  # TODO just while testing, remove afterwards
+  # toVimPlugin should do it instead
+  gitsigns-nvim = super.gitsigns-nvim.overrideAttrs(oa: {
+    nativeBuildInputs = oa.nativeBuildInputs or [] ++ [ pkgs.vimUtils.vimGenDocHook ];
+  });
+
   # aliases
   cjson = super.lua-cjson;
 }
diff --git a/pkgs/games/mudlet/default.nix b/pkgs/games/mudlet/default.nix
index 139baece4a6f9..9d8898b119e19 100644
--- a/pkgs/games/mudlet/default.nix
+++ b/pkgs/games/mudlet/default.nix
@@ -2,7 +2,9 @@
 , boost, libGLU, lua, cmake,  which, pkg-config, }:
 
 let
-  luaEnv = lua.withPackages(ps: with ps; [ luazip luafilesystem lrexlib-pcre luasql-sqlite3 lua-yajl luautf8 ]);
+  luaEnv = lua.withPackages(ps: with ps; [
+    luazip luafilesystem lrexlib-pcre luasql-sqlite3 lua-yajl luautf8
+  ]);
 in
 stdenv.mkDerivation rec {
   pname = "mudlet";
@@ -39,8 +41,6 @@ stdenv.mkDerivation rec {
     cp -r ../mudlet.png $out/share/pixmaps/
 
     makeQtWrapper $out/mudlet $out/bin/mudlet \
-      --set LUA_CPATH "${luaEnv}/lib/lua/${lua.luaversion}/?.so" \
-      --prefix LUA_PATH : "$NIX_LUA_PATH" \
       --prefix LD_LIBRARY_PATH : "${libsForQt5.qtkeychain}/lib/" \
       --run "cd $out";
   '';
diff --git a/pkgs/servers/xmpp/prosody/default.nix b/pkgs/servers/xmpp/prosody/default.nix
index 43e77d918e1c4..773632328a056 100644
--- a/pkgs/servers/xmpp/prosody/default.nix
+++ b/pkgs/servers/xmpp/prosody/default.nix
@@ -1,19 +1,24 @@
 { stdenv, fetchurl, lib, libidn, openssl, makeWrapper, fetchhg
-, lua5, luasocket, luasec, luaexpat, luafilesystem, luabitop
+, lua
 , nixosTests
-, withLibevent ? true, luaevent ? null
-, withDBI ? true, luadbi ? null
+, withLibevent ? true
+, withDBI ? true
 # use withExtraLibs to add additional dependencies of community modules
 , withExtraLibs ? [ ]
 , withOnlyInstalledCommunityModules ? [ ]
 , withCommunityModules ? [ ] }:
 
-assert withLibevent -> luaevent != null;
-assert withDBI -> luadbi != null;
-
 with lib;
 
 
+let
+  luaEnv = lua.withPackages(p: with p; [
+      luasocket luasec luaexpat luafilesystem luabitop luadbi-sqlite3
+    ]
+    ++ lib.optional withLibevent p.luaevent
+    ++ lib.optional withDBI p.luadbi
+  );
+in
 stdenv.mkDerivation rec {
   version = "0.11.10"; # also update communityModules
   pname = "prosody";
@@ -41,28 +46,24 @@ stdenv.mkDerivation rec {
     sha256 = "02gj1b8sdmdvymsdmjpq47zrl7sg578jcdxbbq18s44f3njmc9q1";
   };
 
+  nativeBuildInputs = [ makeWrapper ];
   buildInputs = [
-    lua5 makeWrapper libidn openssl
-  ]
-  # Lua libraries
-  ++ [
-    luasocket luasec luaexpat luafilesystem luabitop
+    luaEnv libidn openssl
   ]
-  ++ optional withLibevent luaevent
-  ++ optional withDBI luadbi
   ++ withExtraLibs;
 
 
   configureFlags = [
     "--ostype=linux"
-    "--with-lua-include=${lua5}/include"
-    "--with-lua=${lua5}"
+    "--with-lua-include=${luaEnv}/include"
+    "--with-lua=${luaEnv}"
   ];
 
   postBuild = ''
     make -C tools/migration
   '';
 
+  # the wrapping should go away once lua hook is fixed
   postInstall = ''
       ${concatMapStringsSep "\n" (module: ''
         cp -r $communityModules/mod_${module} $out/lib/prosody/modules/
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 694dbd04f0a68..748f70eefeef8 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -19950,9 +19950,8 @@ with pkgs;
 
   prosody = callPackage ../servers/xmpp/prosody {
     # _compat can probably be removed on next minor version after 0.10.0
-    lua5 = lua5_2_compat;
-    withExtraLibs = [ luaPackages.luadbi-sqlite3 ];
-    inherit (lua52Packages) luasocket luasec luaexpat luafilesystem luabitop luaevent luadbi;
+    lua = lua5_2_compat;
+    withExtraLibs = [];
   };
 
   biboumi = callPackage ../servers/xmpp/biboumi { };
@@ -28277,9 +28276,7 @@ with pkgs;
 
   neovim-remote = callPackage ../applications/editors/neovim/neovim-remote.nix { };
 
-  vis = callPackage ../applications/editors/vis {
-    inherit (lua52Packages) lpeg;
-  };
+  vis = callPackage ../applications/editors/vis { };
 
   viw = callPackage ../applications/editors/viw { };
 
diff --git a/pkgs/top-level/lua-packages.nix b/pkgs/top-level/lua-packages.nix
index 246d62b903b35..80f71dc1942e1 100644
--- a/pkgs/top-level/lua-packages.nix
+++ b/pkgs/top-level/lua-packages.nix
@@ -18,85 +18,60 @@ let
   packages = ( self:
 
 let
-  luaAtLeast = lib.versionAtLeast lua.luaversion;
-  luaOlder = lib.versionOlder lua.luaversion;
-  isLua51 = (lib.versions.majorMinor lua.version) == "5.1";
-  isLua52 = (lib.versions.majorMinor lua.version) == "5.2";
-  isLua53 = lua.luaversion == "5.3";
-  isLuaJIT = lib.getName lua == "luajit";
 
-  lua-setup-hook = callPackage ../development/interpreters/lua-5/setup-hook.nix { };
-
-  # Check whether a derivation provides a lua module.
-  hasLuaModule = drv: drv ? luaModule ;
+  # a function of lua_path / lua_cpath
+  lua-setup-hook = callPackage ../development/interpreters/lua-5/setup-hook.nix {
+    inherit lib;
+  };
 
   callPackage = pkgs.newScope self;
 
-  requiredLuaModules = drvs: with lib; let
-    modules =  filter hasLuaModule drvs;
-  in unique ([lua] ++ modules ++ concatLists (catAttrs "requiredLuaModules" modules));
-
-  # Convert derivation to a lua module.
-  toLuaModule = drv:
-    drv.overrideAttrs( oldAttrs: {
-      # Use passthru in order to prevent rebuilds when possible.
-      passthru = (oldAttrs.passthru or {})// {
-        luaModule = lua;
-        requiredLuaModules = requiredLuaModules drv.propagatedBuildInputs;
-      };
-    });
-
-
-  platformString =
-    if stdenv.isDarwin then "macosx"
-    else if stdenv.isFreeBSD then "freebsd"
-    else if stdenv.isLinux then "linux"
-    else if stdenv.isSunOS then "solaris"
-    else throw "unsupported platform";
-
   buildLuaApplication = args: buildLuarocksPackage ({namePrefix="";} // args );
 
-  buildLuarocksPackage = with pkgs.lib; makeOverridable(callPackage ../development/interpreters/lua-5/build-lua-package.nix {
-    inherit toLuaModule;
+  buildLuarocksPackage = lib.makeOverridable(callPackage ../development/interpreters/lua-5/build-lua-package.nix {
     inherit lua;
+    inherit (pkgs) lib;
+    inherit (luaLib) toLuaModule;
   });
-in
-with self; {
 
-  getLuaPathList = majorVersion: [
-    "share/lua/${majorVersion}/?.lua"
-    "share/lua/${majorVersion}/?/init.lua"
-  ];
-  getLuaCPathList = majorVersion: [
-    "lib/lua/${majorVersion}/?.so"
-  ];
-
-  # helper functions for dealing with LUA_PATH and LUA_CPATH
-  getPath = drv: pathListForVersion:
-    lib.concatMapStringsSep ";" (path: "${drv}/${path}") (pathListForVersion lua.luaversion);
-  getLuaPath = drv: getPath drv getLuaPathList;
-  getLuaCPath = drv: getPath drv getLuaCPathList;
+  luaLib = import ../development/lua-modules/lib.nix {
+    inherit (pkgs) lib;
+    inherit pkgs lua;
+  };
 
   #define build lua package function
   buildLuaPackage = callPackage ../development/lua-modules/generic {
-    inherit lua writeText;
+    inherit writeText;
   };
 
+  getPath = drv: pathListForVersion:
+    lib.concatMapStringsSep ";" (path: "${drv}/${path}") pathListForVersion;
 
-  inherit toLuaModule hasLuaModule lua-setup-hook;
-  inherit buildLuarocksPackage buildLuaApplication;
-  inherit requiredLuaModules luaOlder luaAtLeast
-    isLua51 isLua52 isLua53 isLuaJIT lua callPackage;
+in
+{
+  # helper functions for dealing with LUA_PATH and LUA_CPATH
+  lib = luaLib;
+
+  getLuaPath = drv: luaLib.getPath drv (luaLib.luaPathList lua.luaversion) ;
+  getLuaCPath = drv: luaLib.getPath drv (luaLib.luaCPathList lua.luaversion) ;
+
+
+  inherit lua lua-setup-hook callPackage;
+  inherit buildLuaPackage buildLuarocksPackage buildLuaApplication;
+  inherit (luaLib) luaOlder luaAtLeast isLua51 isLua52 isLua53 isLuaJIT
+    requiredLuaModules toLuaModule hasLuaModule;
 
   # wraps programs in $out/bin with valid LUA_PATH/LUA_CPATH
   wrapLua = callPackage ../development/interpreters/lua-5/wrap-lua.nix {
-    inherit lua; inherit (pkgs) makeSetupHook makeWrapper;
+    inherit lua lib;
+    inherit (pkgs) makeSetupHook makeWrapper;
   };
 
   luarocks = callPackage ../development/tools/misc/luarocks {
-    inherit lua;
+    inherit lua lib;
   };
 
+  # a fork of luarocks used to generate nix lua derivations from rockspecs
   luarocks-nix = callPackage ../development/tools/misc/luarocks/luarocks-nix.nix { };
 
   luxio = buildLuaPackage {
@@ -132,7 +107,7 @@ with self; {
     };
   };
 
-  vicious = toLuaModule(stdenv.mkDerivation rec {
+  vicious = luaLib.toLuaModule( stdenv.mkDerivation rec {
     pname = "vicious";
     version = "2.5.0";