diff --git a/dev-lua/lgi/Manifest b/dev-lua/lgi/Manifest
index efb51f2dc8598..928e937d73831 100644
--- a/dev-lua/lgi/Manifest
+++ b/dev-lua/lgi/Manifest
@@ -1 +1,2 @@
DIST lgi-0.9.2.tar.gz 291463 BLAKE2B d89752e7c56f9a695f97f90680515fd9acab57991121ec3455fcd88aa0b64828f060d9bf222fb1ab14bdfc956ec3ad296af848168532d09694a0cacbb55dac71 SHA512 755a96b78530f42da6d4e2664f8e37cb07a356419e7e6448003c3f841c9d98ad18b851715d9eb203ea7eb27b13ec46223fa8a1c90a99fd12960ce85b0a695335
+DIST lgi-0.9.2_p20251219.tar.gz 305320 BLAKE2B d60a873873eec2784e3cc90c59eb0264502a4ad60363a04bdf7b81a5bc5850b230a80923f30602a0f6b57d653854563897a9a671ef884c0e3a8ed6f4371c2192 SHA512 92dd53f441601deff970eb02a002d763c69fcba82b3067d92fd69e92042e4f6e4e5f98c22e0a044a9b34d62799880af858c3454018f46ae071e93aecedb0cbdf
diff --git a/dev-lua/lgi/files/lgi-0.9.2-fix_tests.patch b/dev-lua/lgi/files/lgi-0.9.2-fix_tests.patch
new file mode 100644
index 0000000000000..be6527ceb79a3
--- /dev/null
+++ b/dev-lua/lgi/files/lgi-0.9.2-fix_tests.patch
@@ -0,0 +1,36 @@
+#1 PR pending https://github.com/lgi-devs/lgi/pull/342.patch
+fix test with pango >= 1.56.2
+--- a/tests/pango.lua
++++ b/tests/pango.lua
+@@ -35,8 +35,7 @@ function pango.glyphstring()
+ local offset = items[i].offset
+ local length = items[i].length
+ local analysis = items[i].analysis
+- local pgs = Pango.GlyphString()
+- Pango.shape(string.sub(s,1+offset), length, analysis, pgs)
++ pgs = Pango.shape(string.sub(s,1+offset), length, analysis)
+ -- Pull out individual glyphs with pgs.glyphs
+ local glyphs = pgs.glyphs
+ check(type(glyphs) == 'table')
+
+#2 failing progress.lua, see https://github.com/lgi-devs/lgi/issues/348
+fixed by a fork https://github.com/vtrlx/LuaGObject/commit/cd261460f275ea07a4b47cc0c9d0113e17f98b11.patch
+--- a/tests/progress.lua
++++ b/tests/progress.lua
+@@ -11,6 +11,7 @@
+ local lgi = require 'lgi'
+ local Gio = lgi.Gio
+ local GLib = lgi.GLib
++local GObject = lgi.GObject
+
+ local check = testsuite.check
+
+@@ -46,6 +47,7 @@ function progress.file_copy()
+ end
+
+ src:copy_async(dst, flags, priority, cancellable,
+- progress_callback, finish_callback)
++ GObject.Closure (progress_callback),
++ GObject.Closure (finish_callback))
+ loop:run()
+ end
diff --git a/dev-lua/lgi/files/lgi-0.9.2-multi_lua_impl.patch b/dev-lua/lgi/files/lgi-0.9.2-multi_lua_impl.patch
new file mode 100644
index 0000000000000..728d5068db192
--- /dev/null
+++ b/dev-lua/lgi/files/lgi-0.9.2-multi_lua_impl.patch
@@ -0,0 +1,32 @@
+allow lua multi-implementation
+@GENTOO_LUA_VERSION@ will be replaced after sources copied for each lua implementation
+--- a/lgi/core.c
++++ b/lgi/core.c
+@@ -697,7 +697,7 @@ set_resident (lua_State *L)
+ }
+
+ G_MODULE_EXPORT int
+-luaopen_lgi_corelgilua51 (lua_State* L)
++luaopen_lgi_corelgi@GENTOO_LUA_VERSION@ (lua_State* L)
+ {
+ LgiStateMutex *mutex;
+ gint state_id;
+--- a/lgi/core.lua
++++ b/lgi/core.lua
+@@ -11,7 +11,7 @@
+ -- This module decides what kind of core routines should be loaded.
+ -- Currently only one implementation exists, standard-Lua C-side
+ -- implementation, LuaJIT-FFI-based one is planned.
+-local core = require 'lgi.corelgilua51'
++local core = require 'lgi.corelgi@GENTOO_LUA_VERSION@'
+
+ -- Helper methods for converting between CamelCase and uscore_delim
+ -- names.
+--- a/lgi/meson.build
++++ b/lgi/meson.build
+@@ -1,4 +1,4 @@
+-liblgi = shared_module('corelgilua51',
++liblgi = shared_module('corelgi@GENTOO_LUA_VERSION@',
+ sources: [
+ 'buffer.c',
+ 'callable.c',
diff --git a/dev-lua/lgi/lgi-0.9.2_p20251219.ebuild b/dev-lua/lgi/lgi-0.9.2_p20251219.ebuild
new file mode 100644
index 0000000000000..2ced8e9f984be
--- /dev/null
+++ b/dev-lua/lgi/lgi-0.9.2_p20251219.ebuild
@@ -0,0 +1,131 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+VIRTUALX_REQUIRED="manual"
+LUA_COMPAT=( lua5-{1..4} luajit )
+inherit lua meson virtualx
+
+DESCRIPTION="Lua bindings using gobject-introspection"
+HOMEPAGE="https://github.com/lgi-devs/lgi"
+if [[ ${PV} == *_p* ]]; then
+ HASH_COMMIT="a1308b23b07a787d21fad86157b0b60eb3079f64"
+ SRC_URI="https://github.com/lgi-devs/lgi/archive/${HASH_COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${HASH_COMMIT}"
+else
+ SRC_URI="https://github.com/lgi-devs/lgi/archive/${PV}.tar.gz -> ${P}.tar.gz"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"
+IUSE="test"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${LUA_REQUIRED_USE}"
+
+BDEPEND="
+ ${LUA_DEPS}
+ virtual/pkgconfig
+ test? (
+ ${VIRTUALX_DEPEND}
+ sys-apps/dbus
+ x11-misc/xvfb-run
+ )
+"
+RDEPEND="
+ ${LUA_DEPS}
+ >=dev-libs/gobject-introspection-1.82.0-r2
+ dev-libs/glib:2
+ dev-libs/libffi:0=
+"
+DEPEND="
+ ${RDEPEND}
+ test? (
+ x11-libs/cairo[glib,X]
+ || (
+ x11-libs/gtk+:3[introspection,X]
+ gui-libs/gtk:4[introspection,X]
+ )
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-0.9.2-multi_lua_impl.patch
+ "${FILESDIR}"/${PN}-0.9.2-fix_tests.patch
+)
+
+lua_src_prepare() {
+ pushd "${BUILD_DIR}" || die
+ # lgi/meson.build & several source files use the LUA version as part of the
+ # direct filename, dynamically created, and we respect that.
+
+ # replace @GENTOO_LUA_VERSION@ with lua version in patched files:
+ # lgi/core.c:luaopen_lgi_corelgilua51 (lua_State* L)
+ # lgi/core.lua:local core = require 'lgi.corelgilua51'
+ # lgi/meson.build: liblgi = shared_module('corelgilua51'
+ sed -i \
+ -e "s/@GENTOO_LUA_VERSION@/${ELUA/.}/" \
+ lgi/core.c \
+ lgi/core.lua \
+ lgi/meson.build \
+ || die "sed failed"
+
+ popd
+}
+
+src_prepare() {
+ default
+ lua_copy_sources
+ lua_foreach_impl lua_src_prepare
+}
+
+lua_src_configure() {
+ local emesonargs=(
+ -Dlua-pc="${ELUA}"
+ -Dlua-bin="${LUA}"
+ $(meson_use test tests)
+ )
+ EMESON_SOURCE="${BUILD_DIR}" \
+ BUILD_DIR="${BUILD_DIR}-meson" \
+ meson_src_configure
+}
+
+src_configure() {
+ lua_foreach_impl lua_src_configure
+}
+
+lua_src_compile() {
+ EMESON_SOURCE="${BUILD_DIR}" \
+ BUILD_DIR="${BUILD_DIR}-meson" \
+ meson_src_compile
+}
+
+src_compile() {
+ lua_foreach_impl lua_src_compile
+}
+
+lua_src_test() {
+ if [[ ${ELUA} == luajit ]]; then
+ einfo "Tests are currently not supported on LuaJIT"
+ else
+ BUILD_DIR="${BUILD_DIR}-meson" \
+ virtx meson_src_test
+ fi
+}
+
+src_test() {
+ lua_foreach_impl lua_src_test
+}
+
+lua_src_install() {
+ BUILD_DIR="${BUILD_DIR}-meson" \
+ meson_install
+}
+
+src_install() {
+ lua_foreach_impl lua_src_install
+ local DOCS=( README.md docs/. samples )
+ docompress -x /usr/share/doc/${PF}/samples
+ einstalldocs
+}
diff --git a/dev-lua/lgi/metadata.xml b/dev-lua/lgi/metadata.xml
index 7ba0b6fbaa300..c4f09fac82f44 100644
--- a/dev-lua/lgi/metadata.xml
+++ b/dev-lua/lgi/metadata.xml
@@ -5,6 +5,6 @@
robbat2@gentoo.org
- pavouk/lgi
+ lgi-devs/lgi