# Copyright 2026 Nadeŭka # Distributed under the terms of the GNU General Public License v2 # Based on gui-browser/firefox-bin-156.0.1::nadevko EAPI=8 : ${WMCLASS:='firefox-nightly'} : ${MOZ_APP_ARGS:='--name=firefox-nightly-bin'} [[ -v MOZ_GMP_PLUGIN_LIST ]] || MOZ_GMP_PLUGIN_LIST=( gmp-gmpopenh264 gmp-widevinecdm ) VERIFY_SIG_OPENPGP_KEY_PATH="${BROOT}"/usr/share/openpgp-keys/mozilla.asc inherit desktop linux-info optfeature pax-utils verify-sig xdg MY_PV="158.0a1" BUILD_ID="${PV##*_p}" YYYY="${BUILD_ID:0:4}" MM="${BUILD_ID:4:2}" DD="${BUILD_ID:6:2}" HH="${BUILD_ID:8:2}" MIN="${BUILD_ID:10:2}" SEC="${BUILD_ID:12:2}" BUILD_DIR="${YYYY}-${MM}-${DD}-${HH}-${MIN}-${SEC}-mozilla-central" BASE_URI="https://archive.mozilla.org/pub/firefox/nightly/${YYYY}/${MM}/${BUILD_DIR}" BASE_L10N_URI="https://archive.mozilla.org/pub/firefox/nightly/${YYYY}/${MM}/${BUILD_DIR}-l10n" DESCRIPTION='Mozilla Firefox Web Browser (Nightly channel)' HOMEPAGE='https://www.mozilla.org/firefox/channel/desktop/#nightly' SRC_URI=" amd64? ( ${BASE_URI}/firefox-${MY_PV}.en-US.linux-x86_64.tar.xz -> ${P}-amd64.tar.xz verify-sig? ( ${BASE_URI}/firefox-${MY_PV}.en-US.linux-x86_64.tar.xz.asc -> ${P}-amd64.tar.xz.asc ) ) arm64? ( ${BASE_URI}/firefox-${MY_PV}.en-US.linux-aarch64.tar.xz -> ${P}-arm64.tar.xz verify-sig? ( ${BASE_URI}/firefox-${MY_PV}.en-US.linux-aarch64.tar.xz.asc -> ${P}-arm64.tar.xz.asc ) ) " S="${WORKDIR}"/firefox LICENSE='MPL-2.0 GPL-2 LGPL-2.1' SLOT=0 KEYWORDS=~amd64 IUSE='+gmp-autoupdate verify-sig wayland' RESTRICT='!verify-sig? ( test ) strip' QA_PREBUILT="opt/${PN}/*" RDEPEND=' || ( media-libs/libpulse media-sound/apulse ) >=app-accessibility/at-spi2-core-2.46.0:2 >=dev-libs/glib-2.26:2 >=media-libs/freetype-2.4.10 >=x11-libs/cairo-1.10[X] >=x11-libs/gtk+-3.11:3[X,wayland?] media-libs/alsa-lib media-libs/fontconfig media-video/ffmpeg sys-apps/dbus virtual/freedesktop-icon-theme x11-libs/gdk-pixbuf:2 x11-libs/libX11 x11-libs/libxcb x11-libs/libXcomposite x11-libs/libXcursor x11-libs/libXdamage x11-libs/libXext x11-libs/libXfixes x11-libs/libXi x11-libs/libXrandr x11-libs/libXrender ' BDEPEND=' app-arch/unzip app-misc/jq verify-sig? ( >=res-openpgp/mozilla-20260806 ) ' MOZ_LANGS=( ach af an ar ast az be bg bn bo bqi br brx bs ca ca-valencia cak ckb cs cy da de dsb el en-CA en-GB eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fur fy-NL ga-IE gd gl gn gu-IN he hi-IN hr hsb hu hy-AM hye ia id is it ja ka kab kk km kn ko lij lo lt ltg lv meh mk ml mr ms my nb-NO ne-NP nl nn-NO oc pa-IN pl pt-BR pt-PT rm ro ru sat sc scn sco si sk skr sl son sq sr sv-SE szl ta te tg th tl tr trs uk ur uz vi wo xh zh-CN zh-TW ) MOZ_TOO_REGIONALIZED_FOR_L10N=( fy-NL ga-IE gu-IN hi-IN hy-AM nb-NO ne-NP nn-NO pa-IN sv-SE ) for _lang in "${MOZ_LANGS[@]}"; do if has ${_lang} "${MOZ_TOO_REGIONALIZED_FOR_L10N[@]}"; then _xflag=${_lang%%-*} else _xflag=${_lang} fi SRC_URI+=" l10n_${_xflag}? ( ${BASE_L10N_URI}/linux-x86_64/xpi/firefox-${MY_PV}.${_lang}.langpack.xpi -> ${P}-${_lang}.xpi ) " IUSE+=" l10n_${_xflag}" done unset _lang _xflag pkg_setup() { CONFIG_CHECK='~SECCOMP' WARNING_SECCOMP='CONFIG_SECCOMP not set! DRM-protected content will not work' linux-info_pkg_setup } src_unpack() { if use verify-sig; then local tarball use amd64 && tarball="${P}-amd64.tar.xz" use arm64 && tarball="${P}-arm64.tar.xz" verify-sig_verify_detached "${DISTDIR}/${tarball}" "${DISTDIR}/${tarball}.asc" fi default } src_install() { local dest=/opt/${PN} # /opt dodir "${dest}" cp -a . "${ED}${dest}" || die touch "${ED}${dest}"/is-packaged-app || die # bins & wrappers cp "${FILESDIR}"/${PN} "${T}" || die local exports=MOZ_APP_LAUNCHER if has_version -r media-sound/apulse[-sdk]; then echo -n "LD_LIBRARY_PATH=\"${EPREFIX}/usr/$(get_libdir)" >> "${T}"/${PN} || die echo '/apulse${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"' >> "${T}"/${PN} || die exports+=' LD_LIBRARY_PATH' fi cat >> "${T}"/${PN} <<-EOF || die MOZ_APP_LAUNCHER='${EPREFIX}/usr/bin/${PN}' export ${exports} exec '${dest}/firefox' ${MOZ_APP_ARGS} "\$@" EOF dobin "${T}"/${PN} # configs local policies="${ED}${dest}/distribution/policies.json" if [[ -f ${policies} ]]; then jq -s '.[0] * .[1]' "${policies}" "${FILESDIR}"/policies.json > "${T}"/policies.json || die else cp "${FILESDIR}"/policies.json "${T}" || die fi insinto "${dest}"/distribution doins "${T}"/policies.json cp "${FILESDIR}"/maintainer-prefs.js "${T}" || die if ! use gmp-autoupdate; then local plugin for plugin in "${MOZ_GMP_PLUGIN_LIST[@]}"; do echo "pref(\"media.${plugin}.autoupdate\", false);" >> "${T}"/maintainer-prefs.js || die done fi insinto "${dest}"/browser/defaults/pref doins "${T}"/maintainer-prefs.js # desktop sed \ -e "s|@MOZ_APP_EXEC@|${EPREFIX}/usr/bin/${PN}|g" \ -e "s|@WMCLASS@|${WMCLASS}|g" \ "${FILESDIR}"/${PN}.desktop > "${T}"/${PN}.desktop || die domenu "${T}"/${PN}.desktop # icons local icon size icon_installed=0 for icon in browser/chrome/icons/default/default*.png; do [[ -f "${icon}" ]] || continue size=${icon##*/default} newicon -s "${size%.png}" "${icon}" ${PN}.png icon_installed=1 done [[ ${icon_installed} -eq 1 ]] || die 'No program icons could be installed' # language packs local lang xflag emid for lang in "${MOZ_LANGS[@]}"; do if has ${lang} "${MOZ_TOO_REGIONALIZED_FOR_L10N[@]}"; then xflag=${lang%%-*} else xflag=${lang} fi use l10n_${xflag} || continue emid=$(unzip -p "${DISTDIR}/${P}-${lang}.xpi" manifest.json | jq -r '.browser_specific_settings.gecko.id // .applications.gecko.id') [[ -n ${emid} && ${emid} != null ]] || emid="langpack-${lang}@firefox.mozilla.org" insinto "${dest}"/distribution/extensions newins "${DISTDIR}"/${P}-${lang}.xpi ${emid}.xpi done # dictionaries rm -rf "${ED}${dest}"/dictionaries || die dosym "${EPREFIX}"/usr/share/hunspell "${dest}"/dictionaries # docs einstalldocs # permissions & security pax-mark m "${ED}${dest}"/{firefox,firefox-bin,crashhelper,crashreporter,gfxtest,pingsender,updater} } pkg_postinst() { xdg_pkg_postinst use gmp-autoupdate || elog "USE='-gmp-autoupdate' disabled auto-updates for: ${MOZ_GMP_PLUGIN_LIST[*]}" optfeature 'desktop integration' sys-apps/xdg-desktop-portal optfeature 'fallback mouse cursor theme e.g. on WMs' gnome-base/gsettings-desktop-schemas optfeature 'location detection via Wi-Fi' net-misc/networkmanager optfeature 'pdf and web pages printing' net-print/cups optfeature 'speech synthesis (text-to-speech) support' app-accessibility/speech-dispatcher optfeature 'system spell checking dictionaries' app-text/hunspell use wayland && optfeature 'wayland screen sharing' media-video/pipewire }