# Copyright 2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DISTUTILS_USE_PEP517=setuptools
PYTHON_COMPAT=( python3_{10..14} )
inherit pypi distutils-r1 desktop xdg optfeature readme.gentoo-r1
DESCRIPTION="Stenography engine"
HOMEPAGE="https://opensteno.org/plover/"
SRC_URI="$(pypi_sdist_url "${PN}" "${PV}")"
S="${WORKDIR}/${P}"
# "or-later" is explicit, as part of README
LICENSE="GPL-2+"
SLOT="0"
KEYWORDS="~amd64"
# keep this for 5.3.0 only
FORCE_PRINT_ELOG="yes"
# this DOC_CONTENTS has been carefully formatted
DISABLE_AUTOFORMATTING="yes"
# plugins: https://plover.readthedocs.io/en/latest/plugin_dev.html
DOC_CONTENTS=\
"""Because Plover plugins are basically Python modules, plugins must be
installed by the system package manager (i.e. Portage), as system Python
environment (where Plover checks) is handled by the system package manager.
Plover plugins are available under the \"plover-plugins\" category.
After installing, Plover must be restarted by quitting it (Ctrl+Q, or
File > Quit Plover) and opening it again.
If there is a plugin you wish to use but is not packaged, please create a
bug report for jacksonchen666's overlay on Sourcehut or Codeberg.
Sourcehut: https://todo.sr.ht/~jacksonchen666/gentoo-overlay
Codeberg: https://codeberg.org/jacksonchen666/gentoo-overlay/issues
Supported plugins in the Plover plugin registry will (mostly) be added
without question."""
# TODO: when opening paper tape:
# _pythonToCppCopy: Cannot copy-convert 0x7f1755fa7920 (set) to C++.
# _pythonToCppCopy: Cannot copy-convert 0x7f1755fa7920 (set) to C++.
# _pythonToCppCopy: Cannot copy-convert 0x7f1755fa7920 (set) to C++.
# DEPEND sections:
# 1. dependencies
# 2. plover's own dependencies
# 3. see 2nd paragraph below
#
# dependencies sourced from reqs/dist.txt, as referenced in setup.py
# differences:
# - xkbcommon version requirement: ignored
# - readme-renderer: no USE flags, [md] removed
# - setuptools: implicit BDEPEND
#
# (this is for the 3th DEPEND section)
# dbus: https://github.com/opensteno/plover/blob/main/linux/README.md
# pyside: req/dist_extra_qt_gui.txt references pyside6-essentials, so
# probably pyside?
#
# some notes:
# - readme renderer: apparently used for plugins (XXX markdown via
# packaging comrak (couldn't be packaged due to build system failing on
# dependency resolution mysteriously))
# /usr/lib/python3.14/site-packages/readme_renderer/markdown.py:44: UserWarning: Markdown renderers are not available. Install 'readme_renderer[md]' to enable Markdown rendering.
# warnings.warn(_EXTRA_WARNING)
DEPEND="
dev-python/appdirs
dev-python/hidapi
dev-python/pkginfo
dev-python/pygments
dev-python/pyserial
dev-python/python-xlib
dev-python/evdev
dev-python/packaging
dev-python/psutil
dev-python/xkbcommon
dev-python/readme-renderer
dev-python/requests-cache
dev-python/requests-futures
dev-python/wcwidth
dev-python/plover-stroke
dev-python/rtf-tokenize
sys-apps/dbus
dev-python/pyside
"
RDEPEND="${DEPEND}"
# pyside tools: default ebuild setuptools makes something run
# /usr/lib/python3.14/site-packages/PySide6/Qt/libexec/uic, looks like a
# build dep for compiling .ui files
#
# babel: found by testing in minimal gentoo environment, used only in
# setup.py so is a build dependency
BDEPEND="
dev-python/pyside[tools]
dev-python/babel
"
EPYTEST_PLUGINS=(
pytest-qt
)
# XXX: these tests get SIGABRT, but upstream CI is successful
EPYTEST_DESELECT=(
"test/gui_qt/test_dictionaries_widget.py::test_widget_selection"
"test/gui_qt/test_dictionaries_widget.py::test_widget_save_copy_1"
"test/gui_qt/test_dictionaries_widget.py::test_widget_save_merge_1"
"test/gui_qt/test_dictionaries_widget.py::test_widget_save_merge_2"
)
distutils_enable_tests pytest
# TODO: specialized hardware?
# TODO: extras, like gui_qt?
# TODO: input group user?
# TODO: correct plugin info when viewing in the plugin viewer with installed
# plugins
# TODO: uinput udev rule? (see appimage related stuff and
# https://github.com/opensteno/plover-flake#nixos-configuration and
# https://github.com/opensteno/plover/pull/1679)
# TODO: plover group
python_install_all() {
default
domenu linux/plover.desktop
doicon -s 128 plover/assets/plover.png
newicon -s scalable plover/assets/plover-icon.svg plover.svg
readme.gentoo_create_doc
}
pkg_postinst() {
xdg_pkg_postinst
readme.gentoo_print_elog
ewarn "Non-keyboard machines and input capture on Wayland may require"
ewarn "additional configuration. Please bug report to this ebuild repository"
ewarn "(not Plover!) if you're stuck, or found a solution."
# see plover source at plover/oslayer/linux/keyboardcontrol_uinput.py
optfeature "Unicode input" app-i18n/ibus app-i18n/fcitx
}