# Copyright 2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 RUST_MIN_VER="1.75.0" inherit cargo desktop git-r3 systemd xdg-utils DESCRIPTION="Graphical package manager for Gentoo Linux (Portage frontend)" HOMEPAGE="https://codeberg.org/NoBodyZ/gpkg" SRC_URI=" ${CARGO_CRATE_URIS} " EGIT_REPO_URI="https://codeberg.org/aleksandrov/gpkg.git" # S="${WORKDIR}/gpkg" LICENSE="GPL-2" # Dependent crate licenses LICENSE+=" Apache-2.0 BSD ISC MIT MPL-2.0 Unicode-3.0" SLOT="0" KEYWORDS="" IUSE="+sourceview +vte btrfs dracut appindicator grub2 kerneltools limine refind systemd systemd-boot" REQUIRED_USE=" kerneltools? ( ^^ ( limine grub2 systemd-boot refind ) ) btrfs? ( kerneltools ) dracut? ( kerneltools ) limine? ( kerneltools ) grub2? ( kerneltools ) systemd-boot? ( kerneltools ) refind? ( kerneltools ) " DEPEND=" >=gui-libs/gtk-4.12:4 >=gui-libs/libadwaita-1.4:1 >=dev-libs/glib-2.76:2 sys-apps/dbus media-libs/graphene x11-libs/cairo x11-libs/pango x11-libs/gdk-pixbuf:2 media-libs/freetype:2 media-libs/fontconfig sys-devel/gettext vte? ( >=gui-libs/vte-0.74:2.91-gtk4 ) sourceview? ( >=gui-libs/gtksourceview-5.10:5 ) " RDEPEND=" ${DEPEND} sys-apps/portage app-portage/gentoolkit app-portage/eix sys-auth/polkit kerneltools? ( || ( sys-apps/systemd sys-apps/systemd-utils[kernel-install] ) sys-kernel/linux-firmware ) dracut? ( sys-kernel/dracut ) btrfs? ( app-backup/snapper ) appindicator? ( gnome-extra/gnome-shell-extension-appindicator ) " BDEPEND=" virtual/pkgconfig " QA_FLAGS_IGNORED=" usr/bin/gpkg usr/bin/gpkg-daemon " PROPERTIES="live" RESTRICT="network-sandbox" src_unpack() { git-r3_src_unpack } src_prepare() { eapply_user } src_configure() { cargo_gen_config rm -f "${ECARGO_HOME}/config.toml" || die local myfeatures=( $(usev vte) $(usev sourceview) $(usev kerneltools) $(usev limine) $(usev grub2) $(usev systemd-boot) $(usev refind) $(usev btrfs) $(usev dracut) ) cargo build --release --workspace ${myfeatures[*]/#/--features } || die } src_compile() { : } src_test() { cargo_src_test } src_install() { # Install binaries from workspace build (cargo_src_compile already built # everything with correct per-crate feature resolution; cargo install # would fail because gpkg-daemon doesn't define the GUI features) dobin target/release/gpkg-daemon dobin target/release/gpkg # D-Bus system bus configuration insinto /etc/dbus-1/system.d doins data/dbus/org.gentoo.PkgMngt.conf # D-Bus service activation file insinto /usr/share/dbus-1/system-services doins data/dbus/org.gentoo.PkgMngt.service # Polkit authorization policies insinto /usr/share/polkit-1/actions doins data/polkit/org.gentoo.pkgmngt.policy # Desktop file domenu data/org.gentoo.PkgMngt.desktop # Icons — all sizes (PNG) + scalable SVGs + systray status icons insinto /usr/share/icons doins -r data/icons/hicolor # AppStream metainfo insinto /usr/share/metainfo doins data/org.gentoo.PkgMngt.metainfo.xml # CSS stylesheet insinto /usr/share/gpkg doins data/style/style.css # # Locale # insinto /usr/share/locale/fr/LC_MESSAGES # newins po/fr.mo gpkg.mo # Locale: install all compiled .mo files for mo in target/release/build/gpkg-gui-*/out/*.mo; do lang=$(basename "$mo" .mo) insinto /usr/share/locale/${lang}/LC_MESSAGES newins "$mo" gpkg.mo done # Kernel tools (USE=kerneltools) if use kerneltools; then exeinto /usr/lib/kernel doexe data/kernel/scripts/compile-kernel.sh exeinto /usr/lib/kernel/install.d use limine && doexe data/kernel/hooks/95-limine-gentoo.install # Portage hook for auto-compile on emerge *-sources insinto /etc/portage newins data/kernel/hooks/portage-bashrc bashrc insinto /etc/kernel doins data/kernel/configs/auto-compile.conf doins data/kernel/configs/default-type keepdir /var/log/kernel-compile fi # Systemd service unit if use systemd; then systemd_dounit systemd/gpkg-daemon.service fi # OpenRC init script and config newinitd "${FILESDIR}"/gpkg-daemon.initd gpkg-daemon newconfd "${FILESDIR}"/gpkg-daemon.confd gpkg-daemon # Documentation dodoc README.md } pkg_postinst() { # 1. Configuration Setup local make_conf="${EROOT}/etc/portage/make.conf" local gpkg_conf="${EROOT}/etc/portage/gpkg-defaults.conf" # Create the helper config if it doesn't exist if [[ ! -f "${gpkg_conf}" ]]; then einfo "Creating ${gpkg_conf} with recommended defaults..." cat <<-EOF > "${gpkg_conf}" # Recommended defaults for gpkg. # WARNING: If you use a binhost, consider setting --with-bdeps=n and --complete-graph=n EMERGE_DEFAULT_OPTS="\$EMERGE_DEFAULT_OPTS --backtrack=50 --binpkg-respect-use=y --ask=n --verbose --with-bdeps=y --complete-graph=y" EOF fi # Source the gpkg config in the main make.conf if not already present if [[ -f "${make_conf}" ]]; then if ! grep -q "source ${gpkg_conf}" "${make_conf}"; then einfo "Adding source line to ${make_conf}" echo -e "\n# Added by gpkg\nsource ${gpkg_conf}" >> "${make_conf}" fi fi # 2. Performance Warning (Always show) echo ewarn "!!! PERFORMANCE NOTICE !!!" ewarn "gpkg settings are sourced in: ${make_conf}" ewarn "If you experience slow dependency calculations (15+ min) while using" ewarn "a BINARY HOST, please edit ${gpkg_conf} and set:" ewarn " --with-bdeps=n" ewarn " --complete-graph=n" echo # 3. Standard XDG updates xdg_icon_cache_update xdg_desktop_database_update # 4. Daemon and usage instructions elog "" elog "To start the gpkg daemon:" elog "" if use systemd; then elog " systemctl enable --now gpkg-daemon" else elog " rc-update add gpkg-daemon default" elog " rc-service gpkg-daemon start" fi elog "" elog "Then launch the GUI: gpkg" elog "" elog "The console tab works without the daemon." elog "All other tabs require a running gpkg-daemon." elog "" # 5. Kernel tools integration if use kerneltools; then elog "Kernel tools installed:" elog " - Automatic kernel compilation hooks" elog " - Kernel Conf tab in the GUI" use limine && elog " - Limine bootloader integration" use btrfs && elog " - Btrfs snapshot management" elog "" elog "To enable auto-compilation, toggle it in the Kernel Conf tab" elog "or edit /etc/kernel/auto-compile.conf" elog "" fi } pkg_postrm() { xdg_icon_cache_update xdg_desktop_database_update }