{ stdenvNoCC, astal, gobject-introspection, lib, lua, name, src, wrapGAppsHook3, extraPackages ? [], }: let lua_ = lua.withPackages (ps: [ ps.lgi (ps.luaPackages.toLuaModule (stdenvNoCC.mkDerivation { name = "astal"; src = "${astal}/lang/lua/astal"; dontBuild = true; installPhase = '' mkdir -p $out/share/lua/${ps.lua.luaversion}/astal cp -r * $out/share/lua/${ps.lua.luaversion}/astal ''; })) (ps.luaPackages.toLuaModule (stdenvNoCC.mkDerivation { inherit src name; dontBuild = true; installPhase = '' mkdir -p $out/share/lua/${ps.lua.luaversion} cp -r * $out/share/lua/${ps.lua.luaversion} ''; })) ]); script = '' #!${lua_}/bin/lua require "init" ''; in stdenvNoCC.mkDerivation { inherit src name; nativeBuildInputs = [ wrapGAppsHook3 gobject-introspection ]; buildInputs = extraPackages ++ [ lua_ astal.io astal.astal3 ]; installPhase = '' runHook preInstall mkdir -p $out/bin cp -r * $out/bin echo '${script}' > astal-lua install -m 755 astal-lua $out/bin/${name} runHook postInstall ''; preFixup = '' gappsWrapperArgs+=( --prefix PATH : "${lib.makeBinPath extraPackages}" ) ''; }