diff --git a/dev-python/typer/metadata.xml b/dev-python/typer/metadata.xml
index 79d13253eb..3e3c35e14d 100644
--- a/dev-python/typer/metadata.xml
+++ b/dev-python/typer/metadata.xml
@@ -9,6 +9,10 @@
Proxy Maintainers
proxy-maint@gentoo.org
+
tiangolo/typer
typer
diff --git a/dev-python/typer/typer-0.15.3.ebuild b/dev-python/typer/typer-0.15.3.ebuild
index 0453ec9846..70c0e3d29b 100644
--- a/dev-python/typer/typer-0.15.3.ebuild
+++ b/dev-python/typer/typer-0.15.3.ebuild
@@ -1,27 +1,92 @@
-# Copyright 2025
+# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
-PYTHON_COMPAT=( python3_1{1..3} )
+PYTHON_COMPAT=( python3_{11..13} )
+DISTUTILS_USE_PEP517=pdm-backend
-DISTUTILS_USE_PEP517="hatchling"
+inherit distutils-r1 shell-completion pypi
-inherit distutils-r1 pypi
-
-DESCRIPTION="Typer, build great CLIs. Easy to code. Based on Python type hints."
-
-HOMEPAGE="https://typer.tiangolo.com/"
+DESCRIPTION="Build great CLIs. Easy to code. Based on Python type hints."
+HOMEPAGE="
+ https://typer.tiangolo.com/
+ https://github.com/tiangolo/typer
+ https://pypi.org/project/typer/
+"
+SRC_URI="$(pypi_sdist_url "${PN}" "${PV}")"
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~amd64"
+KEYWORDS="~amd64 ~arm64"
-DEPEND="
- dev-python/shellingham[${PYTHON_USEDEP}]
- >=dev-python/click-8.0.0[${PYTHON_USEDEP}]
- >=dev-python/typing-extensions-3.7.4.3[${PYTHON_USEDEP}]
- dev-python/rich[${PYTHON_USEDEP}]
+IUSE="+rich shell-detection test"
+
+BDEPEND="
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/coverage[${PYTHON_USEDEP}]
+ dev-python/shellingham[${PYTHON_USEDEP}]
+ ')
+ )
+"
+RDEPEND="
+ $(python_gen_cond_dep '
+ dev-python/click[${PYTHON_USEDEP}]
+ dev-python/typing-extensions[${PYTHON_USEDEP}]
+ rich? ( dev-python/rich[${PYTHON_USEDEP}] )
+ shell-detection? ( dev-python/shellingham[${PYTHON_USEDEP}] )
+ ')
"
-RDEPEND="${DEPEND}"
+distutils_enable_tests pytest
+
+src_test() {
+ export TERMINAL_WIDTH=3000
+ export _TYPER_FORCE_DISABLE_TERMINAL=1
+
+ distutils-r1_src_test "${@}"
+}
+
+src_compile() {
+ distutils-r1_src_compile "${@}"
+
+ local shell
+ for shell in bash zsh fish; do
+ typer_gencomp ${shell}
+ done
+}
+
+typer_get_comp() {
+ local COMPLETIONSDIR="${WORKDIR}/comp"
+ local shell="$1"
+
+ case "${shell}" in
+ bash) echo "${COMPLETIONSDIR}/${PN}" ;;
+ zsh) echo "${COMPLETIONSDIR}/_${PN}" ;;
+ fish) echo "${COMPLETIONSDIR}/${PN}.fish" ;;
+ *) die "unknown shell: ${shell}" ;;
+ esac
+}
+
+typer_gencomp() {
+ local COMPLETIONSDIR="${WORKDIR}/comp"
+ mkdir "${COMPLETIONSDIR}" 2> /dev/null
+ local shell="$1"
+
+ compfile="$(typer_get_comp "${@}")"
+
+ _TYPER_COMPLETE_TEST_DISABLE_SHELL_DETECTION=1 python -m typer --show-completion "${shell}" |
+ sed 's/python -m //g ; s/_PYTHON _M //g ; s/python_m//g ; s/TYPER_COMPLETE/_TYPER_COMPLETE/' > "${compfile}" ||
+ die "failed to generate ${shell} completion"
+
+ einfo "generated completion script for ${shell}: ${compfile}"
+}
+
+src_install() {
+ distutils-r1_src_install "${@}"
+
+ dobashcomp "$(typer_get_comp bash)"
+ dozshcomp "$(typer_get_comp zsh)"
+ dofishcomp "$(typer_get_comp fish)"
+}