# Copyright 1999-2025 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 PYTHON_COMPAT=( python3_{10..13} ) inherit python-single-r1 DESCRIPTION="A simple, lightweight GTK4-based GUI for NetworkManager using nmcli" HOMEPAGE="https://github.com/s-adi-dev/nmgui" SRC_URI="https://github.com/s-adi-dev/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz" LICENSE="GPL-3" SLOT="0" KEYWORDS="~amd64 ~x86" REQUIRED_USE="${PYTHON_REQUIRED_USE}" DEPEND=" ${PYTHON_DEPS} $(python_gen_cond_dep ' dev-python/pygobject[${PYTHON_USEDEP}] dev-python/python-nmcli[${PYTHON_USEDEP}] ') gui-libs/gtk:4 net-misc/networkmanager " RDEPEND="${DEPEND}" src_prepare() { default # Fix all relative imports to absolute imports find app -name "*.py" -exec sed -i \ -e 's/^from network_service import/from app.network_service import/g' \ -e 's/^from models import/from app.models import/g' \ -e 's/^from ui\./from app.ui./g' \ -e 's/^import ui\./import app.ui./g' \ -e 's/^import models$/import app.models/g' \ -e 's/^import network_service$/import app.network_service/g' \ {} \; # Create __init__.py files to make it a proper Python package touch app/__init__.py find app -type d -exec touch {}/__init__.py \; } src_install() { # Install the app directory as a Python module python_domodule app # Create a simple wrapper script cat > "${T}/nmgui" << EOF #!/usr/bin/env python3 import sys import os # Add the installation directory to Python path sys.path.insert(0, '${EPREFIX}/usr/lib/${EPYTHON}/site-packages') try: # Import and run the app from app.main import parse_arguments, NetworkManagerApp import gi gi.require_version('Gtk', '4.0') from gi.repository import Gtk, GLib import nmcli # Run the main logic args = parse_arguments() if not nmcli.connection(): print("NetworkManager is not running. Please start NetworkManager and try again.") sys.exit(1) app = NetworkManagerApp() try: exit_code = app.run(sys.argv) sys.exit(exit_code) except KeyboardInterrupt: print("\\nApplication interrupted by user.") sys.exit(0) except SystemExit: sys.exit(0) except Exception as e: print(f"Error running nmgui: {e}") import traceback traceback.print_exc() sys.exit(1) EOF python_doscript "${T}/nmgui" # Install desktop file if it exists if [[ -f nmgui.desktop ]]; then domenu nmgui.desktop fi } pkg_postinst() { elog "nmgui requires NetworkManager to be running to function properly." elog "Make sure you have NetworkManager enabled:" elog " rc-update add NetworkManager default" elog " systemctl enable NetworkManager" }