From 25922912c7e37f3bc3000e71b647e77677d8f2c5 Mon Sep 17 00:00:00 2001 From: coast Date: Mon, 12 Oct 2026 14:41:07 +0330 Subject: sync --- .../ananicy-cpp/ananicy-cpp-1.2.0.exheres-0 | 47 ++++ .../ananicy-rules-cachyos-1.1.49.exheres-0 | 27 +++ .../sudo-rs/files/sudo-rs-0.2.15-pam-service.patch | 11 + packages/app-admin/sudo-rs/files/sudoers-rs | 11 + .../app-admin/sudo-rs/sudo-rs-0.2.15.exheres-0 | 60 +++++ .../veracrypt-1.26.29-argon2-avx2-avx512f.patch | 98 ++++++++ .../files/veracrypt-1.26.29-fix-nosse2.patch | 31 +++ .../files/veracrypt-1.26.29-fix-release-date.patch | 19 ++ .../veracrypt/veracrypt-1.26.29.exheres-0 | 101 +++++++++ .../cachyos-settings-1.4.1.exheres-0 | 87 ++++++++ .../dmemcg-booster/dmemcg-booster-0.1.3.exheres-0 | 40 ++++ .../app-misc/ente-auth/ente-auth-4.4.25.exheres-0 | 76 +++++++ .../app-misc/ente-auth/files/enteauth-launcher | 3 + .../app-misc/nvchecker/nvchecker-2.22.exheres-0 | 19 ++ .../app-misc/protonplus/protonplus-0.6.8.exheres-0 | 55 +++++ packages/app-misc/shuck/shuck-0.2.4.exheres-0 | 10 + packages/app-misc/ydotool/ydotool-1.0.4.exheres-0 | 29 +++ .../bubblejail/bubblejail-0.10.4.exheres-0 | 73 ++++++ .../distrobox/distrobox-1.8.2.5.exheres-0 | 54 +++++ packages/dev-cpp/ada/ada-4.0.0.exheres-0 | 19 ++ packages/dev-libs/libbpf/libbpf-1.8.0.exheres-0 | 33 +++ .../tlottie-0_pre20260911-tdesktop-compat.patch | 160 +++++++++++++ .../tlottie/tlottie-0_pre20260911.exheres-0 | 30 +++ .../structlog/structlog-26.1.0.exheres-0 | 19 ++ .../hydra-launcher/hydra-launcher-4.1.6.exheres-0 | 87 ++++++++ .../prismlauncher/prismlauncher-11.1.1.exheres-0 | 63 ++++++ .../gui-libs/adwaita-qt/adwaita-qt-1.4.2.exheres-0 | 21 ++ .../qt-color-widgets-3.0.0.exheres-0 | 43 ++++ .../media-libs/libmysofa/libmysofa-1.3.5.exheres-0 | 36 +++ packages/media-libs/nanosvg/files/nanosvg.patch | 248 +++++++++++++++++++++ .../media-libs/nanosvg/nanosvg-0.1.0.1.exheres-0 | 35 +++ .../tg_owt/files/tg_owt-0_pre20260803-abseil.patch | 159 +++++++++++++ .../tg_owt/tg_owt-0_pre20260803.exheres-0 | 90 ++++++++ .../files/zita-convolver-4.0.3-makefile.patch | 23 ++ .../zita-convolver/zita-convolver-4.0.3.exheres-0 | 33 +++ .../easyeffects/easyeffects-8.3.0.exheres-0 | 61 +++++ .../pear-desktop/pear-desktop-3.12.0.exheres-0 | 84 +++++++ .../net-firewall/ufw/files/systemd/ufw.service | 18 ++ .../ufw/files/ufw-0.36-bash-completion.patch | 16 ++ .../ufw/files/ufw-0.36.1-distutils.patch | 14 ++ .../ufw/files/ufw-0.36.1-dont-check-iptables.patch | 50 +++++ .../ufw/files/ufw-0.36.1-move-path.patch | 124 +++++++++++ .../ufw/files/ufw-0.36.1-shebang.patch | 15 ++ packages/net-firewall/ufw/ufw-0.36.2.exheres-0 | 57 +++++ .../ayugram-desktop-7.2.9.exheres-0 | 72 ++++++ packages/net-im/discord/discord-1.0.161.exheres-0 | 120 ++++++++++ packages/net-im/discord/files/discord-launcher | 4 + packages/net-im/discord/files/discord.desktop | 9 + packages/net-im/discord/files/manifest.json | 11 + packages/net-im/viber/viber-27.3.0.2.exheres-0 | 122 ++++++++++ packages/net-im/zoom/files/zoom.desktop | 8 + packages/net-im/zoom/files/zoom.svg | 22 ++ packages/net-im/zoom/zoom-7.2.1.5760.exheres-0 | 86 +++++++ packages/net-libs/tde2e/tde2e-1.8.49.exheres-0 | 33 +++ .../net-misc/rustdesk/rustdesk-1.5.0.exheres-0 | 86 +++++++ .../mullvad-vpn/mullvad-vpn-2026.5.exheres-0 | 62 ++++++ .../kernel-cachyos-7.2.9-r1.exheres-0 | 110 +++++++++ .../scx-loader/scx-loader-1.1.3.exheres-0 | 53 +++++ packages/sys-kernel/scx/scx-1.1.3.exheres-0 | 84 +++++++ packages/wayland-apps/fnott/fnott-1.8.0.exheres-0 | 45 ++++ .../wayland-apps/fuzzel/fuzzel-1.15.0.exheres-0 | 62 ++++++ .../wayland-apps/wlsunset/wlsunset-0.4.0.exheres-0 | 24 ++ .../x11-apps/flameshot/flameshot-14.0.0.exheres-0 | 65 ++++++ .../x11-apps/qt6ct/files/qt6ct-0.9-qt-6.10.patch | 22 ++ packages/x11-apps/qt6ct/qt6ct-0.9.exheres-0 | 40 ++++ .../xdotool/xdotool-4.20260303.1.exheres-0 | 45 ++++ .../x11-misc/nwg-look/nwg-look-1.1.2.exheres-0 | 66 ++++++ .../x11-misc/xcur2png/xcur2png-0.7.1.exheres-0 | 34 +++ 68 files changed, 3674 insertions(+) create mode 100644 packages/app-admin/ananicy-cpp/ananicy-cpp-1.2.0.exheres-0 create mode 100644 packages/app-admin/ananicy-rules-cachyos/ananicy-rules-cachyos-1.1.49.exheres-0 create mode 100644 packages/app-admin/sudo-rs/files/sudo-rs-0.2.15-pam-service.patch create mode 100644 packages/app-admin/sudo-rs/files/sudoers-rs create mode 100644 packages/app-admin/sudo-rs/sudo-rs-0.2.15.exheres-0 create mode 100644 packages/app-crypt/veracrypt/files/veracrypt-1.26.29-argon2-avx2-avx512f.patch create mode 100644 packages/app-crypt/veracrypt/files/veracrypt-1.26.29-fix-nosse2.patch create mode 100644 packages/app-crypt/veracrypt/files/veracrypt-1.26.29-fix-release-date.patch create mode 100644 packages/app-crypt/veracrypt/veracrypt-1.26.29.exheres-0 create mode 100644 packages/app-misc/cachyos-settings/cachyos-settings-1.4.1.exheres-0 create mode 100644 packages/app-misc/dmemcg-booster/dmemcg-booster-0.1.3.exheres-0 create mode 100644 packages/app-misc/ente-auth/ente-auth-4.4.25.exheres-0 create mode 100644 packages/app-misc/ente-auth/files/enteauth-launcher create mode 100644 packages/app-misc/nvchecker/nvchecker-2.22.exheres-0 create mode 100644 packages/app-misc/protonplus/protonplus-0.6.8.exheres-0 create mode 100644 packages/app-misc/shuck/shuck-0.2.4.exheres-0 create mode 100644 packages/app-misc/ydotool/ydotool-1.0.4.exheres-0 create mode 100644 packages/app-virtualization/bubblejail/bubblejail-0.10.4.exheres-0 create mode 100644 packages/app-virtualization/distrobox/distrobox-1.8.2.5.exheres-0 create mode 100644 packages/dev-cpp/ada/ada-4.0.0.exheres-0 create mode 100644 packages/dev-libs/libbpf/libbpf-1.8.0.exheres-0 create mode 100644 packages/dev-libs/tlottie/files/tlottie-0_pre20260911-tdesktop-compat.patch create mode 100644 packages/dev-libs/tlottie/tlottie-0_pre20260911.exheres-0 create mode 100644 packages/dev-python/structlog/structlog-26.1.0.exheres-0 create mode 100644 packages/games-misc/hydra-launcher/hydra-launcher-4.1.6.exheres-0 create mode 100644 packages/games-misc/prismlauncher/prismlauncher-11.1.1.exheres-0 create mode 100644 packages/gui-libs/adwaita-qt/adwaita-qt-1.4.2.exheres-0 create mode 100644 packages/gui-libs/qt-color-widgets/qt-color-widgets-3.0.0.exheres-0 create mode 100644 packages/media-libs/libmysofa/libmysofa-1.3.5.exheres-0 create mode 100644 packages/media-libs/nanosvg/files/nanosvg.patch create mode 100644 packages/media-libs/nanosvg/nanosvg-0.1.0.1.exheres-0 create mode 100644 packages/media-libs/tg_owt/files/tg_owt-0_pre20260803-abseil.patch create mode 100644 packages/media-libs/tg_owt/tg_owt-0_pre20260803.exheres-0 create mode 100644 packages/media-libs/zita-convolver/files/zita-convolver-4.0.3-makefile.patch create mode 100644 packages/media-libs/zita-convolver/zita-convolver-4.0.3.exheres-0 create mode 100644 packages/media-sound/easyeffects/easyeffects-8.3.0.exheres-0 create mode 100644 packages/media-sound/pear-desktop/pear-desktop-3.12.0.exheres-0 create mode 100644 packages/net-firewall/ufw/files/systemd/ufw.service create mode 100644 packages/net-firewall/ufw/files/ufw-0.36-bash-completion.patch create mode 100644 packages/net-firewall/ufw/files/ufw-0.36.1-distutils.patch create mode 100644 packages/net-firewall/ufw/files/ufw-0.36.1-dont-check-iptables.patch create mode 100644 packages/net-firewall/ufw/files/ufw-0.36.1-move-path.patch create mode 100644 packages/net-firewall/ufw/files/ufw-0.36.1-shebang.patch create mode 100644 packages/net-firewall/ufw/ufw-0.36.2.exheres-0 create mode 100644 packages/net-im/ayugram-desktop/ayugram-desktop-7.2.9.exheres-0 create mode 100644 packages/net-im/discord/discord-1.0.161.exheres-0 create mode 100644 packages/net-im/discord/files/discord-launcher create mode 100644 packages/net-im/discord/files/discord.desktop create mode 100644 packages/net-im/discord/files/manifest.json create mode 100644 packages/net-im/viber/viber-27.3.0.2.exheres-0 create mode 100644 packages/net-im/zoom/files/zoom.desktop create mode 100644 packages/net-im/zoom/files/zoom.svg create mode 100644 packages/net-im/zoom/zoom-7.2.1.5760.exheres-0 create mode 100644 packages/net-libs/tde2e/tde2e-1.8.49.exheres-0 create mode 100644 packages/net-misc/rustdesk/rustdesk-1.5.0.exheres-0 create mode 100644 packages/net-vpn/mullvad-vpn/mullvad-vpn-2026.5.exheres-0 create mode 100644 packages/sys-kernel/kernel-cachyos/kernel-cachyos-7.2.9-r1.exheres-0 create mode 100644 packages/sys-kernel/scx-loader/scx-loader-1.1.3.exheres-0 create mode 100644 packages/sys-kernel/scx/scx-1.1.3.exheres-0 create mode 100644 packages/wayland-apps/fnott/fnott-1.8.0.exheres-0 create mode 100644 packages/wayland-apps/fuzzel/fuzzel-1.15.0.exheres-0 create mode 100644 packages/wayland-apps/wlsunset/wlsunset-0.4.0.exheres-0 create mode 100644 packages/x11-apps/flameshot/flameshot-14.0.0.exheres-0 create mode 100644 packages/x11-apps/qt6ct/files/qt6ct-0.9-qt-6.10.patch create mode 100644 packages/x11-apps/qt6ct/qt6ct-0.9.exheres-0 create mode 100644 packages/x11-apps/xdotool/xdotool-4.20260303.1.exheres-0 create mode 100644 packages/x11-misc/nwg-look/nwg-look-1.1.2.exheres-0 create mode 100644 packages/x11-misc/xcur2png/xcur2png-0.7.1.exheres-0 (limited to 'packages') diff --git a/packages/app-admin/ananicy-cpp/ananicy-cpp-1.2.0.exheres-0 b/packages/app-admin/ananicy-cpp/ananicy-cpp-1.2.0.exheres-0 new file mode 100644 index 0000000..7734048 --- /dev/null +++ b/packages/app-admin/ananicy-cpp/ananicy-cpp-1.2.0.exheres-0 @@ -0,0 +1,47 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cmake + +SUMMARY="Ananicy rewritten in C++ for lower resource usage" +HOMEPAGE="https://gitlab.com/ananicy-cpp/ananicy-cpp" +DOWNLOADS="${HOMEPAGE}/-/archive/v${PV}/${PN}-v${PV}.tar.bz2 -> ${PNV}.tar.bz2" + +LICENCES="GPL-3" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + dev-libs/json[>=3.9] + + build+run: + dev-libs/fmt[>=8] + dev-libs/spdlog[>=1.9] + sys-apps/systemd + + suggestion: + app-admin/ananicy-rules-cachyos [[ description = [ CachyOS rules and configuration ] ]] +" + +CMAKE_SOURCE="${WORKBASE}/${PN}-v${PV}" + +CMAKE_SRC_CONFIGURE_PARAMS=( + -DENABLE_SYSTEMD=ON + -DUSE_BPF_PROC_IMPL=OFF + -DUSE_EXTERNAL_FMTLIB=ON + -DUSE_EXTERNAL_JSON=ON + -DUSE_EXTERNAL_SPDLOG=ON + -DVERSION="${PV}" + -DCCACHE=OFF +) + +src_prepare() { + cmake_src_prepare + edo sed -i '/#include /a #include ' src/platform/linux/debug.cpp + edo sed -i '/#include /a #include ' src/platform/linux/process.cpp + edo sed -i '/#include /a #include ' src/platform/systemd/service.cpp + edo sed -i '/#include /a #include ' src/platform/linux/backtrace.cpp + edo sed -i '/#include /a #include ' src/utility/argument_parsing/argument.cpp + edo sed -i '/#include /a #include ' src/platform/linux/singleton_process.cpp +} diff --git a/packages/app-admin/ananicy-rules-cachyos/ananicy-rules-cachyos-1.1.49.exheres-0 b/packages/app-admin/ananicy-rules-cachyos/ananicy-rules-cachyos-1.1.49.exheres-0 new file mode 100644 index 0000000..d6552e7 --- /dev/null +++ b/packages/app-admin/ananicy-rules-cachyos/ananicy-rules-cachyos-1.1.49.exheres-0 @@ -0,0 +1,27 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +SUMMARY="CachyOS rules for ananicy-cpp" +HOMEPAGE="https://github.com/CachyOS/ananicy-rules" +DOWNLOADS="${HOMEPAGE}/archive/refs/tags/${PV}.tar.gz -> ${PNV}.tar.gz" + +LICENCES="GPL-3" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + run: + app-admin/ananicy-cpp +" + +WORK="${WORKBASE}/ananicy-rules-${PV}" + +src_compile() { + : +} + +src_install() { + insinto /etc/ananicy.d + doins -r 00-default + doins 00-cgroups.cgroups 00-types.types ananicy.conf +} diff --git a/packages/app-admin/sudo-rs/files/sudo-rs-0.2.15-pam-service.patch b/packages/app-admin/sudo-rs/files/sudo-rs-0.2.15-pam-service.patch new file mode 100644 index 0000000..3fde656 --- /dev/null +++ b/packages/app-admin/sudo-rs/files/sudo-rs-0.2.15-pam-service.patch @@ -0,0 +1,11 @@ +--- a/src/sudo/pam.rs ++++ b/src/sudo/pam.rs +@@ -40,7 +40,7 @@ + ) -> PamResult { + let service_name = match launch { + LaunchType::Login if cfg!(feature = "pam-login") => "sudo-i", +- LaunchType::Login | LaunchType::Shell | LaunchType::Direct => "sudo", ++ LaunchType::Login | LaunchType::Shell | LaunchType::Direct => "sudo-rs", + }; + let mut pam = PamContext::new_cli( + "sudo", diff --git a/packages/app-admin/sudo-rs/files/sudoers-rs b/packages/app-admin/sudo-rs/files/sudoers-rs new file mode 100644 index 0000000..17f3550 --- /dev/null +++ b/packages/app-admin/sudo-rs/files/sudoers-rs @@ -0,0 +1,11 @@ +Defaults secure_path="/usr/local/bin:/usr/local/sbin:/usr/host/bin" + +root ALL=(ALL:ALL) ALL + +# Uncomment to allow members of wheel to use sudo-rs. +# %wheel ALL=(ALL:ALL) ALL + +# Uncomment to allow members of sudo to use sudo-rs. +# %sudo ALL=(ALL:ALL) ALL + +@includedir /etc/sudoers.d diff --git a/packages/app-admin/sudo-rs/sudo-rs-0.2.15.exheres-0 b/packages/app-admin/sudo-rs/sudo-rs-0.2.15.exheres-0 new file mode 100644 index 0000000..113814b --- /dev/null +++ b/packages/app-admin/sudo-rs/sudo-rs-0.2.15.exheres-0 @@ -0,0 +1,60 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cargo [ rust_minimum_version=1.85 ] github [ user=trifectatechfoundation tag=v${PV} ] pam + +SUMMARY="Memory-safe implementation of sudo" + +LICENCES="|| ( Apache-2.0 MIT )" +SLOT="0" +PLATFORMS="~amd64 ~armv8" +MYOPTIONS="native-names" + +DEPENDENCIES+=" + build+run: + sys-libs/pam + + run: + native-names? ( !app-admin/sudo ) +" + +CARGO_SRC_COMPILE_PARAMS=( --bin sudo --bin visudo ) +CARGO_SRC_INSTALL_PARAMS=( --bin sudo --bin visudo ) + +src_prepare() { + default + if ! option native-names; then + expatch "${FILES}/${PNV}-pam-service.patch" + fi +} + +src_install() { + local suffix= name= bin="${IMAGE}/usr/$(exhost --target)/bin" + + cargo_src_install + if ! option native-names; then + suffix=-rs + edo mv "${bin}/sudo" "${bin}/sudo-rs" + edo mv "${bin}/visudo" "${bin}/visudo-rs" + fi + edo chmod 4755 "${bin}/sudo${suffix}" + dosym sudo${suffix} /usr/$(exhost --target)/bin/sudoedit${suffix} + + edo sed -i 's@/etc/sudoers\\f@/etc/sudoers-rs\\f@g' docs/man/sudo.8.man docs/man/visudo.8.man + edo sed -i '8s@/etc/sudoers@/etc/sudoers-rs@' docs/man/sudoers.5.man + + newman docs/man/sudo.8.man sudo${suffix}.8 + newman docs/man/visudo.8.man visudo${suffix}.8 + newman docs/man/sudoers.5.man sudoers${suffix}.5 + dosym sudo${suffix}.8 /usr/share/man/man8/sudoedit${suffix}.8 + + dodoc SECURITY.md + + keepdir /etc/sudoers.d + name=sudo${suffix} + pamd_mimic_system "${name}" auth auth account password session + + insinto /etc + insopts -m 0440 + doins "${FILES}/sudoers-rs" +} diff --git a/packages/app-crypt/veracrypt/files/veracrypt-1.26.29-argon2-avx2-avx512f.patch b/packages/app-crypt/veracrypt/files/veracrypt-1.26.29-argon2-avx2-avx512f.patch new file mode 100644 index 0000000..7d9b76d --- /dev/null +++ b/packages/app-crypt/veracrypt/files/veracrypt-1.26.29-argon2-avx2-avx512f.patch @@ -0,0 +1,98 @@ +Fix build when CFLAGS contains or implies -mavx2 and/or -mavx512f + +https://bugs.gentoo.org/983361 +https://github.com/veracrypt/VeraCrypt/issues/1867 + +--- a/Build/Include/Makefile.inc ++++ b/Build/Include/Makefile.inc +@@ -14,7 +14,7 @@ $(NAME): $(NAME).a + + clean: + @echo Cleaning $(NAME) +- rm -f $(APPNAME) $(NAME).a $(OBJS) $(OBJSEX) $(OBJSNOOPT) $(OBJSHANI) $(OBJAESNI) $(OBJSSSE41) $(OBJSSSSE3) $(OBJSAVX2) $(OBJARMV8CRYPTO) $(OBJS:.o=.d) $(OBJSEX:.oo=.d) $(OBJSNOOPT:.o0=.d) $(OBJSHANI:.oshani=.d) $(OBJAESNI:.oaesni=.d) $(OBJSSSE41:.osse41=.d) $(OBJSSSSE3:.ossse3=.d) $(OBJSAVX2:.oavx2=.d) $(OBJARMV8CRYPTO:.oarmv8crypto=.d) *.gch ++ rm -f $(APPNAME) $(NAME).a $(OBJS) $(OBJSEX) $(OBJSNOOPT) $(OBJSHANI) $(OBJAESNI) $(OBJSSSE2) $(OBJSSSE41) $(OBJSSSSE3) $(OBJSAVX2) $(OBJARMV8CRYPTO) $(OBJS:.o=.d) $(OBJSEX:.oo=.d) $(OBJSNOOPT:.o0=.d) $(OBJSHANI:.oshani=.d) $(OBJAESNI:.oaesni=.d) $(OBJSSSE2:.osse2=.d) $(OBJSSSE41:.osse41=.d) $(OBJSSSSE3:.ossse3=.d) $(OBJSAVX2:.oavx2=.d) $(OBJARMV8CRYPTO:.oarmv8crypto=.d) *.gch + + %.o: %.c + @echo Compiling $(/dev/null 2>&1 && echo D; rm -f $$t $$t.a) + RANLIB_DETERMINISTIC := $(shell t=$$(mktemp); rm -f $$t.a; $(AR) rc $$t.a $$t >/dev/null 2>&1; $(RANLIB) -D $$t.a >/dev/null 2>&1 && echo -D; rm -f $$t $$t.a) + +-$(NAME).a: $(OBJS) $(OBJSEX) $(OBJSNOOPT) $(OBJSHANI) $(OBJAESNI) $(OBJSSSE41) $(OBJSSSSE3) $(OBJSAVX2) $(OBJARMV8CRYPTO) ++$(NAME).a: $(OBJS) $(OBJSEX) $(OBJSNOOPT) $(OBJSHANI) $(OBJAESNI) $(OBJSSSE2) $(OBJSSSE41) $(OBJSSSSE3) $(OBJSAVX2) $(OBJARMV8CRYPTO) + @echo Updating library $@ + rm -f $@ +- $(AR) $(AFLAGS) $(AR_DETERMINISTIC)rc $@ $(OBJS) $(OBJSEX) $(OBJSNOOPT) $(OBJSHANI) $(OBJAESNI) $(OBJSSSE41) $(OBJSSSSE3) $(OBJSAVX2) $(OBJARMV8CRYPTO) ++ $(AR) $(AFLAGS) $(AR_DETERMINISTIC)rc $@ $(OBJS) $(OBJSEX) $(OBJSNOOPT) $(OBJSHANI) $(OBJAESNI) $(OBJSSSE2) $(OBJSSSE41) $(OBJSSSSE3) $(OBJSAVX2) $(OBJARMV8CRYPTO) + $(RANLIB) $(RANLIB_DETERMINISTIC) $@ +--- a/Volume/Volume.make ++++ b/Volume/Volume.make +@@ -13,6 +13,7 @@ + OBJS := + OBJSEX := + OBJSNOOPT := ++OBJSSSE2 := + OBJSSSE41 := + OBJSSSSE3 := + OBJSHANI := +@@ -96,11 +97,15 @@ else + endif + + ifeq "$(GCC_GTEQ_430)" "1" ++ OBJSSSE2 += ../Crypto/blake2s_SSE2.osse2 + OBJSSSE41 += ../Crypto/blake2s_SSE41.osse41 + OBJSSSSE3 += ../Crypto/blake2s_SSSE3.ossse3 ++ OBJSSSE2 += ../Crypto/Argon2/src/opt_sse2.osse2 + else ++ OBJS += ../Crypto/blake2s_SSE2.o + OBJS += ../Crypto/blake2s_SSE41.o + OBJS += ../Crypto/blake2s_SSSE3.o ++ OBJS += ../Crypto/Argon2/src/opt_sse2.o + endif + ifeq "$(GCC_GTEQ_500)" "1" + OBJSHANI += ../Crypto/Sha2Intel.oshani +@@ -127,7 +134,6 @@ ifeq "$(ENABLE_WOLFCRYPT)" "0" + OBJS += ../Crypto/Aeskey.o + OBJS += ../Crypto/Aestab.o + OBJS += ../Crypto/blake2s.o +-OBJS += ../Crypto/blake2s_SSE2.o + OBJS += ../Crypto/SerpentFast.o + OBJS += ../Crypto/SerpentFast_simd.o + OBJS += ../Crypto/Sha2.o +@@ -141,7 +147,6 @@ OBJS += ../Crypto/Argon2/src/blake2/blake2b.o + OBJS += ../Crypto/Argon2/src/argon2.o + OBJS += ../Crypto/Argon2/src/core.o + OBJS += ../Crypto/Argon2/src/argon2.o +-OBJS += ../Crypto/Argon2/src/opt_sse2.o + OBJS += ../Crypto/Argon2/src/ref.o + OBJS += ../Crypto/Argon2/src/selftest.o + OBJS += ../Common/Pkcs5.o diff --git a/packages/app-crypt/veracrypt/files/veracrypt-1.26.29-fix-nosse2.patch b/packages/app-crypt/veracrypt/files/veracrypt-1.26.29-fix-nosse2.patch new file mode 100644 index 0000000..f28b1ec --- /dev/null +++ b/packages/app-crypt/veracrypt/files/veracrypt-1.26.29-fix-nosse2.patch @@ -0,0 +1,31 @@ +Fix building with NOSSE2. +The change in Tcdefs.h is not required for x86, but for some reason it is +necessary for x86_64. + +https://github.com/veracrypt/VeraCrypt/pull/1891 + +--- a/Common/Tcdefs.h ++++ b/Common/Tcdefs.h +@@ -52,9 +52,7 @@ extern unsigned short _rotl16(unsigned short value, unsigned char shift); + + #endif // defined(_UEFI) + +-#ifdef TC_WINDOWS_BOOT + #include +-#endif + + #define TC_APP_NAME "VeraCrypt" + +--- a/Makefile ++++ b/Makefile +@@ -289,8 +289,8 @@ ifeq "$(shell uname -s)" "Linux" + endif + + ifeq "$(origin NOSSE2)" "command line" +- CFLAGS += -mno-sse2 +- CXXFLAGS += -mno-sse2 ++ CFLAGS += -mno-sse2 -DCRYPTOPP_DISABLE_AESNI -DCRYPTOPP_DISABLE_SHANI ++ CXXFLAGS += -mno-sse2 -DCRYPTOPP_DISABLE_AESNI -DCRYPTOPP_DISABLE_SHANI + WXCONFIG_CFLAGS += -mno-sse2 + WXCONFIG_CXXFLAGS += -mno-sse2 + endif diff --git a/packages/app-crypt/veracrypt/files/veracrypt-1.26.29-fix-release-date.patch b/packages/app-crypt/veracrypt/files/veracrypt-1.26.29-fix-release-date.patch new file mode 100644 index 0000000..ed512b9 --- /dev/null +++ b/packages/app-crypt/veracrypt/files/veracrypt-1.26.29-fix-release-date.patch @@ -0,0 +1,19 @@ +From 80a126d04ec4943f96cb98d9cc152af1a4c1d0a0 Mon Sep 17 00:00:00 2001 +From: Mounir IDRASSI +Date: Sat, 13 Jun 2026 11:32:59 +0900 +Subject: [PATCH] Fix release date string to match actual TC_RELEASE_DATE_DAY + value + +--- + +--- a/Common/Tcdefs.h ++++ b/Common/Tcdefs.h +@@ -73,7 +73,7 @@ extern unsigned short _rotl16(unsigned short value, unsigned char shift); + #define VERSION_NUM 0x0126 + + // Release date +-#define TC_STR_RELEASE_DATE L"June 8, 2026" ++#define TC_STR_RELEASE_DATE L"June 9, 2026" + #define TC_RELEASE_DATE_YEAR 2026 + #define TC_RELEASE_DATE_MONTH 6 + #define TC_RELEASE_DATE_DAY 9 diff --git a/packages/app-crypt/veracrypt/veracrypt-1.26.29.exheres-0 b/packages/app-crypt/veracrypt/veracrypt-1.26.29.exheres-0 new file mode 100644 index 0000000..eef0d3a --- /dev/null +++ b/packages/app-crypt/veracrypt/veracrypt-1.26.29.exheres-0 @@ -0,0 +1,101 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require wxwidgets freedesktop-desktop freedesktop-mime gtk-icon-cache + +SUMMARY="Disk encryption based on TrueCrypt" +HOMEPAGE="https://veracrypt.io/en/Home.html" +DOWNLOADS="https://github.com/veracrypt/VeraCrypt/archive/refs/tags/VeraCrypt_${PV}.tar.gz -> ${PNV}.tar.gz" + +LICENCES="Apache-2.0 BSD-3 RSA truecrypt-3.0" +SLOT="0" +PLATFORMS="~amd64" +RESTRICT="mirror" +MYOPTIONS="doc gui" + +DEPENDENCIES=" + build: + dev-lang/yasm + virtual/pkg-config + + build+run: + sys-apps/pcsc-lite + sys-fs/fuse:3 + sys-fs/lvm2 + + run: + || ( + app-admin/sudo-rs[native-names] + app-admin/sudo + ) +" + +WORK="${WORKBASE}/VeraCrypt-VeraCrypt_${PV}/src" + +DEFAULT_SRC_PREPARE_PATCHES=( + "${FILES}/${PNV}-fix-release-date.patch" + "${FILES}/${PNV}-argon2-avx2-avx512f.patch" + "${FILES}/${PNV}-fix-nosse2.patch" +) + +src_configure() { + MAKE_ARGS=( + NOSTRIP=1 NOTEST=1 VERBOSE=1 WITHFUSE3=1 + AR="${AR}" CC="${CC}" CXX="${CXX}" RANLIB="${RANLIB}" + TC_EXTRA_CFLAGS="${CFLAGS}" TC_EXTRA_CXXFLAGS="${CXXFLAGS}" + TC_EXTRA_LFLAGS="${LDFLAGS}" WX_CONFIG="${WX_CONFIG}" + ) + if ! option gui; then + MAKE_ARGS+=( NOGUI=1 ) + fi +} + +src_compile() { + local gui=0 + if option gui; then + gui=1 + fi + + emake "${MAKE_ARGS[@]}" + emake "${MAKE_ARGS[@]}" DESTDIR="${WORK}/staging" \ + INSTALL_UNINSTALLER=0 INSTALL_LICENSE=0 INSTALL_DOCS=0 \ + INSTALL_LANGUAGES=0 INSTALL_APPIMAGE_FILES=0 \ + INSTALL_MOUNT_HELPER_DIR="$(exhost --target)/bin" \ + INSTALL_DESKTOP=${gui} INSTALL_MIME=${gui} INSTALL_ICONS=${gui} install +} + +src_install() { + edo cp -R "${WORK}/staging/usr" "${IMAGE}/" + + dodir /usr/$(exhost --target)/bin + edo mv "${IMAGE}/usr/bin/veracrypt" "${IMAGE}/usr/$(exhost --target)/bin/veracrypt" + edo rmdir "${IMAGE}/usr/bin" + + if option gui; then + edo sed -i 's|Exec=/usr/bin/veracrypt|Exec=veracrypt|' \ + "${IMAGE}/usr/share/applications/veracrypt.desktop" + fi + + dodoc "${WORK}/../License.txt" "${WORK}/Readme.txt" + if option doc; then + edo mkdir -p "${IMAGE}/usr/share/doc/${PNV}" + edo cp -r "${WORK}/../doc/html" "${WORK}/../doc/EFI-DCS" "${IMAGE}/usr/share/doc/${PNV}/" + fi +} + +pkg_postinst() { + if option gui; then + freedesktop-mime_pkg_postinst + freedesktop-desktop_pkg_postinst + gtk-icon-cache_pkg_postinst + fi + ewarn "VeraCrypt's TrueCrypt-derived license restricts redistribution of modified versions." +} + +pkg_postrm() { + if option gui; then + freedesktop-mime_pkg_postrm + freedesktop-desktop_pkg_postrm + gtk-icon-cache_pkg_postrm + fi +} diff --git a/packages/app-misc/cachyos-settings/cachyos-settings-1.4.1.exheres-0 b/packages/app-misc/cachyos-settings/cachyos-settings-1.4.1.exheres-0 new file mode 100644 index 0000000..38bfe29 --- /dev/null +++ b/packages/app-misc/cachyos-settings/cachyos-settings-1.4.1.exheres-0 @@ -0,0 +1,87 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require systemd-service [ systemd_files=[ usr/lib/systemd/system/pci-latency.service ] ] \ + udev-rules [ udev_files=[ usr/lib/udev/rules.d/{20-audio-pm,40-hpet-permissions,50-sata,60-ioschedulers,69-hdparm,71-nvidia,99-cpu-dma-latency}.rules ] ] + +SUMMARY="Configuration files and tweaks from CachyOS" +HOMEPAGE="https://github.com/CachyOS/CachyOS-Settings" +DOWNLOADS="${HOMEPAGE}/archive/refs/tags/${PV}.tar.gz -> ${PNV}.tar.gz" + +LICENCES="GPL-3" +SLOT="0" +PLATFORMS="~amd64" +MYOPTIONS="zram" + +DEPENDENCIES=" + run: + app-shells/bash + sys-apps/hdparm + sys-apps/pciutils + sys-apps/systemd + sys-process/procps + zram? ( + app-arch/zstd + sys-apps/zram-generator + ) +" + +WORK="${WORKBASE}/CachyOS-Settings-${PV}" + +src_prepare() { + edo sed -i "s@ExecStart=/usr/bin/pci-latency@ExecStart=/usr/$(exhost --target)/bin/pci-latency@" \ + usr/lib/systemd/system/pci-latency.service +} + +src_compile() { + : +} + +src_install() { + insinto /etc/security/limits.d + doins etc/security/limits.d/20-audio.conf + + exeinto /usr/$(exhost --target)/bin + doexe usr/bin/{dlss-swapper,dlss-swapper-dll,pci-latency,zink-run,game-performance,kerver} + + insinto /usr/$(exhost --target)/lib/modprobe.d + doins usr/lib/modprobe.d/{amdgpu,blacklist,nvidia}.conf + + insinto /usr/$(exhost --target)/lib/modules-load.d + doins usr/lib/modules-load.d/ntsync.conf + + insinto /usr/$(exhost --target)/lib/sysctl.d + doins usr/lib/sysctl.d/70-cachyos-settings.conf + + local systemd_dir="/usr/$(exhost --target)/lib/systemd" + insinto "${systemd_dir}/journald.conf.d" + doins usr/lib/systemd/journald.conf.d/00-journal-size.conf + + insinto "${systemd_dir}/system.conf.d" + doins usr/lib/systemd/system.conf.d/{00-timeout,10-limits}.conf + + install_systemd_files + + insinto "${SYSTEMDSYSTEMUNITDIR}" + doins -r usr/lib/systemd/system/{rtkit-daemon,user@}.service.d + doins -r usr/lib/systemd/system/{session.slice,system.slice,user-.slice}.d + + insinto "${systemd_dir}/user.conf.d" + doins usr/lib/systemd/user.conf.d/{00-timeout,10-limits}.conf + + if option zram; then + insinto "${systemd_dir}" + doins usr/lib/systemd/zram-generator.conf + + insinto "${UDEVRULESDIR}" + doins usr/lib/udev/rules.d/30-zram.rules + fi + + insinto "${SYSTEMDTMPFILESDIR}" + doins usr/lib/tmpfiles.d/{coredump,thp-shrinker,thp}.conf + + install_udev_files + + insinto /usr/share/X11/xorg.conf.d + doins usr/share/X11/xorg.conf.d/20-touchpad.conf +} diff --git a/packages/app-misc/dmemcg-booster/dmemcg-booster-0.1.3.exheres-0 b/packages/app-misc/dmemcg-booster/dmemcg-booster-0.1.3.exheres-0 new file mode 100644 index 0000000..66548df --- /dev/null +++ b/packages/app-misc/dmemcg-booster/dmemcg-booster-0.1.3.exheres-0 @@ -0,0 +1,40 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cargo [ rust_minimum_version=1.85 ] \ + gitlab [ prefix=https://gitlab.steamos.cloud user=holo tag=${PV} new_download_scheme=true ] \ + systemd-service [ systemd_files=[ dmemcg-booster-system.service ] systemd_user_files=[ dmemcg-booster-user.service ] ] + +SUMMARY="Boost foreground games with dmem cgroup limits" + +LICENCES="MIT" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES+=" + build: + dev-util/pkgconf + + build+run: + sys-apps/dbus + + run: + sys-apps/systemd +" + +src_unpack() { + gitlab_src_unpack + edo cd "${WORK}" + ecargo_fetch +} + +src_prepare() { + default + edo sed -i "s@ExecStart=/usr/bin/dmemcg-booster@ExecStart=/usr/$(exhost --target)/bin/dmemcg-booster@" \ + dmemcg-booster-{system,user}.service +} + +src_install() { + cargo_src_install + install_systemd_files +} diff --git a/packages/app-misc/ente-auth/ente-auth-4.4.25.exheres-0 b/packages/app-misc/ente-auth/ente-auth-4.4.25.exheres-0 new file mode 100644 index 0000000..e839cbd --- /dev/null +++ b/packages/app-misc/ente-auth/ente-auth-4.4.25.exheres-0 @@ -0,0 +1,76 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require freedesktop-desktop freedesktop-mime gtk-icon-cache + +SUMMARY="End-to-end encrypted two-factor authenticator" +HOMEPAGE="https://ente.io/auth/ https://github.com/ente-io/ente" +DOWNLOADS="https://github.com/ente-io/ente/releases/download/auth-v${PV}/ente-auth-v${PV}-x86_64.AppImage -> ${PNV}.AppImage" + +LICENCES="AGPL-3+" +SLOT="0" +PLATFORMS="~amd64" +RESTRICT="mirror strip test" + +DEPENDENCIES=" + build: + sys-fs/squashfs-tools + + run: + dev-libs/libayatana-appindicator + dev-libs/libepoxy + dev-libs/libsecret:1 + dev-libs/openssl:3 + net-misc/curl + sys-libs/zlib + x11-libs/gtk+:3 +" + +WORK="${WORKBASE}/squashfs-root" + +pkg_setup() { + exdirectory --allow /opt +} + +src_unpack() { + local checksum + checksum=$(sha256sum "${FETCHEDDIR}/${PNV}.AppImage") || die "Cannot checksum Ente Auth AppImage" + [[ ${checksum%% *} == c85f4a9a75e8b97a54f99a7f6db4307275b42f6465d76515354fe42231e12b85 ]] || + die "Ente Auth AppImage changed; check version before updating checksum" + + edo unsquashfs -offset 944632 -dest "${WORK}" "${FETCHEDDIR}/${PNV}.AppImage" +} + +src_install() { + edo mkdir -p "${IMAGE}/opt/enteauth" + edo cp -a "${WORK}/data" "${WORK}/lib" "${WORK}/enteauth" "${IMAGE}/opt/enteauth/" + edo rm "${IMAGE}/opt/enteauth/lib/libdartjni.so" + + exeinto /usr/$(exhost --target)/bin + newexe "${FILES}/enteauth-launcher" enteauth + + insinto /usr/share/applications + edo sed 's@^Exec=.*@Exec=enteauth %u@' "${WORK}/enteauth.desktop" > "${WORKBASE}/enteauth.desktop" || die + doins "${WORKBASE}/enteauth.desktop" + + insinto /usr/share/icons + doins -r "${WORK}/usr/share/icons/hicolor" + + insinto /usr/share/pixmaps + doins "${WORK}/enteauth.png" + + insinto /usr/share/metainfo + doins "${WORK}/usr/share/metainfo/ente_auth.appdata.xml" +} + +pkg_postinst() { + freedesktop-mime_pkg_postinst + freedesktop-desktop_pkg_postinst + gtk-icon-cache_pkg_postinst +} + +pkg_postrm() { + freedesktop-mime_pkg_postrm + freedesktop-desktop_pkg_postrm + gtk-icon-cache_pkg_postrm +} diff --git a/packages/app-misc/ente-auth/files/enteauth-launcher b/packages/app-misc/ente-auth/files/enteauth-launcher new file mode 100644 index 0000000..2478e84 --- /dev/null +++ b/packages/app-misc/ente-auth/files/enteauth-launcher @@ -0,0 +1,3 @@ +#!/bin/sh +cd /opt/enteauth || exit 1 +exec ./enteauth "$@" diff --git a/packages/app-misc/nvchecker/nvchecker-2.22.exheres-0 b/packages/app-misc/nvchecker/nvchecker-2.22.exheres-0 new file mode 100644 index 0000000..d840b0c --- /dev/null +++ b/packages/app-misc/nvchecker/nvchecker-2.22.exheres-0 @@ -0,0 +1,19 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require pypi py-pep517 [ backend=setuptools blacklist="3.9" multibuild=false ] + +SUMMARY="New version checker for software" + +LICENCES="MIT" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + run: + dev-python/structlog[python_abis:*(-)?] + dev-python/platformdirs[python_abis:*(-)?] + dev-python/tornado[>=6][python_abis:*(-)?] + dev-python/pycurl[python_abis:*(-)?] + python_abis:3.10? ( dev-python/tomli[python_abis:3.10] ) +" diff --git a/packages/app-misc/protonplus/protonplus-0.6.8.exheres-0 b/packages/app-misc/protonplus/protonplus-0.6.8.exheres-0 new file mode 100644 index 0000000..62f36e1 --- /dev/null +++ b/packages/app-misc/protonplus/protonplus-0.6.8.exheres-0 @@ -0,0 +1,55 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require meson vala [ vala_dep=true vala_slots=[ 0.56 ] ] gsettings gtk-icon-cache + +SUMMARY="A modern compatibility tools manager" +HOMEPAGE="https://github.com/Vysp3r/ProtonPlus" +DOWNLOADS="${HOMEPAGE}/archive/refs/tags/v${PV}.tar.gz -> ${PNV}.tar.gz" + +LICENCES="GPL-3+" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES+=" + build: + dev-util/desktop-file-utils + sys-devel/gettext + virtual/pkg-config + + build+run: + app-arch/libarchive + base/libgee:0.8 + core/json-glib + dev-libs/appstream:5.3 + dev-libs/glib:2 + dev-libs/libadwaita:1[>=1.6][vapi] + gnome-desktop/libsoup:3.0[vapi] + media-libs/SDL:3[>=3.2.0] + x11-libs/cairo + x11-libs/gtk:4.0 + x11-libs/libnotify +" + +MESON_SOURCE="${WORKBASE}/ProtonPlus-${PV}" + +pkg_setup() { + meson_pkg_setup + vala_pkg_setup +} + +src_install() { + export GSETTINGS_DISABLE_SCHEMAS_COMPILE=1 + meson_src_install + unset GSETTINGS_DISABLE_SCHEMAS_COMPILE +} + +pkg_postinst() { + gsettings_pkg_postinst + gtk-icon-cache_pkg_postinst +} + +pkg_postrm() { + gsettings_pkg_postrm + gtk-icon-cache_pkg_postrm +} diff --git a/packages/app-misc/shuck/shuck-0.2.4.exheres-0 b/packages/app-misc/shuck/shuck-0.2.4.exheres-0 new file mode 100644 index 0000000..e63bc20 --- /dev/null +++ b/packages/app-misc/shuck/shuck-0.2.4.exheres-0 @@ -0,0 +1,10 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cargo [ rust_minimum_version=1.94.1 crate_path=crates/shuck-cli ] github [ user=ewhauser tag=v${PV} ] + +SUMMARY="Shell script linter" + +LICENCES="MIT" +SLOT="0" +PLATFORMS="~amd64" diff --git a/packages/app-misc/ydotool/ydotool-1.0.4.exheres-0 b/packages/app-misc/ydotool/ydotool-1.0.4.exheres-0 new file mode 100644 index 0000000..f5cb832 --- /dev/null +++ b/packages/app-misc/ydotool/ydotool-1.0.4.exheres-0 @@ -0,0 +1,29 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cmake systemd-service + +SUMMARY="Generic command-line automation tool without X" +HOMEPAGE="https://github.com/ReimuNotMoe/ydotool" +DOWNLOADS="${HOMEPAGE}/archive/v${PV}.tar.gz -> ${PNV}.tar.gz" + +LICENCES="AGPL-3+" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + app-doc/scdoc + dev-util/pkgconf + sys-kernel/linux-headers + + run: + sys-apps/systemd +" + +CMAKE_SRC_CONFIGURE_PARAMS=( -DCMAKE_POLICY_VERSION_MINIMUM=3.5 ) + +src_prepare() { + default + edo sed -i "/^add_subdirectory(Daemon)/i set(SD_UNITDIR \"${SYSTEMDUSERUNITDIR}\")" "${CMAKE_SOURCE}/CMakeLists.txt" +} diff --git a/packages/app-virtualization/bubblejail/bubblejail-0.10.4.exheres-0 b/packages/app-virtualization/bubblejail/bubblejail-0.10.4.exheres-0 new file mode 100644 index 0000000..5e96581 --- /dev/null +++ b/packages/app-virtualization/bubblejail/bubblejail-0.10.4.exheres-0 @@ -0,0 +1,73 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require python [ blacklist="2 3.9 3.10" multibuild=false ] meson [ meson_minimum_version=1.3.0 ] gtk-icon-cache + +SUMMARY="Bubblewrap-based sandboxing utility" +HOMEPAGE="https://github.com/igo95862/bubblejail" +DOWNLOADS="${HOMEPAGE}/releases/download/${PV}/${PNV}.tar.xz" + +LICENCES="GPL-3+ MIT MPL-2.0" +SLOT="0" +PLATFORMS="~amd64" +MYOPTIONS="doc gui bash-completion fish-completion" + +DEPENDENCIES=" + build: + dev-python/Jinja2[python_abis:*(-)?] + doc? ( app-doc/scdoc ) + + run: + dev-python/cattrs[python_abis:*(-)?] + dev-python/pyxdg[python_abis:*(-)?] + dev-python/tomli-w[python_abis:*(-)?] + sys-apps/bubblewrap[>=0.5.0] + sys-apps/xdg-dbus-proxy + sys-libs/libseccomp + gui? ( + dev-python/PyQt6[python_abis:*(-)?] + x11-themes/hicolor-icon-theme + ) +" + +MESON_SRC_CONFIGURE_PARAMS=( -Duse-vendored-python-lxns=enabled ) +MESON_SRC_CONFIGURE_OPTION_SWITCHES=( 'doc man' ) + +src_prepare() { + meson_src_prepare + edo sed -i "1s@/usr/bin/python3@/usr/$(exhost --target)/bin/python$(python_get_abi)@" \ + templates/bubblejail_launch_base.py.jinja +} + +src_install() { + meson_src_install + + if ! option gui; then + edo rm -f "${IMAGE}/usr/$(exhost --target)/bin/bubblejail-config" \ + "${IMAGE}/usr/share/applications/bubblejail-config.desktop" \ + "${IMAGE}/usr/share/icons/hicolor/128x128/apps/bubblejail-config.png" \ + "${IMAGE}/usr/share/icons/hicolor/scalable/apps/bubblejail-config.svg" + fi + if ! option bash-completion; then + edo rm -f "${IMAGE}/usr/share/bash-completion/completions/bubblejail" + fi + if ! option fish-completion; then + edo rm -f "${IMAGE}/usr/share/fish/vendor_completions.d/bubblejail.fish" + fi + + edo find "${IMAGE}/usr/share" -depth -type d -empty -delete + keepdir /etc/bubblejail/profiles + python_bytecompile +} + +pkg_postinst() { + if option gui; then + gtk-icon-cache_pkg_postinst + fi +} + +pkg_postrm() { + if option gui; then + gtk-icon-cache_pkg_postrm + fi +} diff --git a/packages/app-virtualization/distrobox/distrobox-1.8.2.5.exheres-0 b/packages/app-virtualization/distrobox/distrobox-1.8.2.5.exheres-0 new file mode 100644 index 0000000..96b90fe --- /dev/null +++ b/packages/app-virtualization/distrobox/distrobox-1.8.2.5.exheres-0 @@ -0,0 +1,54 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +SUMMARY="Use any Linux distribution inside your terminal" +HOMEPAGE=" + https://distrobox.it/ + https://github.com/89luca89/distrobox +" + +DOWNLOADS=" + https://github.com/89luca89/distrobox/archive/refs/tags/${PV}.tar.gz + -> ${PNV}.tar.gz +" + +LICENCES="GPL-3" +SLOT="0" +PLATFORMS="~amd64" + +MYOPTIONS=" + gui [[ + description = [ Install Distrobox's desktop icons ] + ]] +" + +DEPENDENCIES=" + run: + || ( + app-virtualization/podman + app-virtualization/docker-cli + ) +" + +src_install() { + dobin distrobox* + + doman man/man1/* + + insinto /usr/share/bash-completion/completions + doins completions/bash/* + + insinto /usr/share/zsh/site-functions + doins completions/zsh/* + + if option gui; then + insinto /usr/share/icons/hicolor/scalable/apps + doins icons/terminal-distrobox-icon.svg + + local size + for size in 16 22 24 32 36 48 64 72 96 128 256; do + insinto "/usr/share/icons/hicolor/${size}x${size}/apps" + doins "icons/hicolor/${size}x${size}/apps/terminal-distrobox-icon.png" + done + fi +} diff --git a/packages/dev-cpp/ada/ada-4.0.0.exheres-0 b/packages/dev-cpp/ada/ada-4.0.0.exheres-0 new file mode 100644 index 0000000..9cdd5f5 --- /dev/null +++ b/packages/dev-cpp/ada/ada-4.0.0.exheres-0 @@ -0,0 +1,19 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cmake + +SUMMARY="WHATWG-compliant URL parser written in C++" +HOMEPAGE="https://github.com/ada-url/ada" +DOWNLOADS="https://github.com/ada-url/ada/archive/refs/tags/v${PV}.tar.gz -> ${PNV}.tar.gz" + +LICENCES="Apache-2.0 MIT" +SLOT="0" +PLATFORMS="~amd64" + +CMAKE_SRC_CONFIGURE_PARAMS=( + -DBUILD_SHARED_LIBS=ON + -DADA_TESTING=OFF + -DADA_TOOLS=OFF + -DADA_INCLUDE_URL_PATTERN=OFF +) diff --git a/packages/dev-libs/libbpf/libbpf-1.8.0.exheres-0 b/packages/dev-libs/libbpf/libbpf-1.8.0.exheres-0 new file mode 100644 index 0000000..9d6e2fd --- /dev/null +++ b/packages/dev-libs/libbpf/libbpf-1.8.0.exheres-0 @@ -0,0 +1,33 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require github [ user=libbpf tag=v${PV} ] + +SUMMARY="Library for loading and managing eBPF programs" + +LICENCES="|| ( LGPL-2.1 BSD-2 )" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + dev-util/pkgconf + sys-kernel/linux-headers + + build+run: + dev-util/elfutils + sys-libs/zlib +" + +src_compile() { + emake -C src +} + +src_install() { + emake -C src install \ + DESTDIR="${IMAGE}" \ + PREFIX="/usr/$(exhost --target)" \ + LIBDIR="/usr/$(exhost --target)/lib" + edo rm "${IMAGE}/usr/$(exhost --target)/lib/libbpf.a" + emagicdocs +} diff --git a/packages/dev-libs/tlottie/files/tlottie-0_pre20260911-tdesktop-compat.patch b/packages/dev-libs/tlottie/files/tlottie-0_pre20260911-tdesktop-compat.patch new file mode 100644 index 0000000..595e044 --- /dev/null +++ b/packages/dev-libs/tlottie/files/tlottie-0_pre20260911-tdesktop-compat.patch @@ -0,0 +1,160 @@ +diff --git a/src/composition/limits.rs b/src/composition/limits.rs +index f8de04c..d4715ab 100644 +--- a/src/composition/limits.rs ++++ b/src/composition/limits.rs +@@ -87,7 +87,9 @@ pub struct Limits { + pub max_render_points: usize, + /// Maximum cumulative dash output allocation estimate per frame, in bytes. + pub max_render_dash_bytes: usize, +- /// Maximum geometry/raster work units charged per frame. ++ /// Maximum geometry/raster work units charged per frame. Telegram's gift ++ /// models peak near 5M (~1.25ms/frame, half of what rlottie spends on ++ /// them uncapped), so the cap keeps headroom above real content. + pub max_render_work: usize, + /// Maximum weighted pixel visits per frame at 64x64 or smaller. + /// Larger outputs scale this allowance proportionally to canvas area. +@@ -140,7 +142,7 @@ impl Default for Limits { + max_dimension: 8192, + max_render_points: 1_048_576, + max_render_dash_bytes: 6_330_240, +- max_render_work: 4_194_304, ++ max_render_work: 8_388_608, + max_render_pixels: 64 * 1024 * 1024, + max_render_bytes: 36 * 1024 * 1024, + } +diff --git a/src/composition/parse.rs b/src/composition/parse.rs +index 47fdaa6..4a0aac8 100644 +--- a/src/composition/parse.rs ++++ b/src/composition/parse.rs +@@ -222,7 +222,9 @@ fn parse_vec2(c: &mut Cursor<'_>) -> Result { + match got { + [Some(x), Some(y)] => Ok(Vec2::new(x, y)), + [Some(x), None] => Ok(Vec2::new(x, x)), +- _ => Err(invalid(c, "expected [x, y]")), ++ // rlottie zero-fills a missing component, and optimized .tgs files write ++ // `[]` for every straight-line tangent; rejecting those loses the file. ++ _ => Ok(Vec2::ZERO), + } + } + +@@ -1060,6 +1062,14 @@ fn parse_shape_item(c: &mut Cursor<'_>, limits: &Limits) -> Result { + + let mut seen = SeenFields::default(); + let inline_group = for_each_field_until(c, |c, key| { ++ // rlottie dispatches a shape item on `ty` and Skip()s every key ahead of ++ // it, so fields authored before `ty` never reach the reference parser. ++ // Telegram's gift patterns write {"d":3,"ty":"el"} and rely on that: the ++ // ellipses keep the exporter's winding and punch holes in the body path. ++ if ty.is_none() && !matches!(key, b"ty") { ++ c.skip_value()?; ++ return Ok(false); ++ } + match_once!(seen, key, { + b"t" => { + grad_type = parse_f32(c)?; +@@ -1208,9 +1218,8 @@ fn parse_shape_item(c: &mut Cursor<'_>, limits: &Limits) -> Result { + None => Ok(Property::Static(default)), + } + }; +- // Path direction on primitives: `d` == 3 reverses the winding. rlottie +- // supports this too, but accidentally ignores `d` if it appears before +- // `ty`; honor the authored field order-independently. ++ // Path direction on primitives: `d` == 3 reverses the winding, for a `d` ++ // that the field loop above accepted (it is dropped before `ty`). + let direction_reversed = |c: &Cursor<'_>, pos: Option| -> bool { pos.is_some_and(|p| parse_f32(&mut c.fork_at(p)).unwrap_or(1.0) == 3.0) }; + + match &ty { +diff --git a/src/composition/tests/parse.rs b/src/composition/tests/parse.rs +index abbdbba..00aceab 100644 +--- a/src/composition/tests/parse.rs ++++ b/src/composition/tests/parse.rs +@@ -113,21 +113,29 @@ fn parses_shape_layer() { + } + + #[test] +-fn primitive_direction_is_order_independent() { +- let comp = parse( +- r#"{"fr":30,"ip":0,"op":30,"w":100,"h":100,"layers":[ +- {"ty":4,"ind":1,"ip":0,"op":30,"st":0,"ks":{}, ++fn primitive_direction_before_ty_is_dropped() { ++ // rlottie dispatches on `ty` and Skip()s every key ahead of it, so a `d` ++ // written first never reaches the reference parser. Telegram's gift ++ // patterns are authored against that: {"d":3,"ty":"el"} keeps the ++ // exporter's winding so the ellipses punch holes in the body path. ++ let ellipse = |shape: &str| { ++ let json = alloc::format!( ++ r#"{{"fr":30,"ip":0,"op":30,"w":100,"h":100,"layers":[ ++ {{"ty":4,"ind":1,"ip":0,"op":30,"st":0,"ks":{{}}, + "shapes":[ +- {"d":3,"ty":"el","p":{"a":0,"k":[50,50]},"s":{"a":0,"k":[10,10]}}, +- {"ty":"fl","c":{"a":0,"k":[1,0,0,1]},"o":{"a":0,"k":100},"r":1} +- ]} +- ]}"#, +- ) +- .unwrap(); +- let Some(Shape::Ellipse(ellipse)) = comp.layers[0].shapes.first() else { +- panic!("expected ellipse"); ++ {shape}, ++ {{"ty":"fl","c":{{"a":0,"k":[1,0,0,1]}},"o":{{"a":0,"k":100}},"r":1}} ++ ]}} ++ ]}}"# ++ ); ++ let comp = parse(&json).unwrap(); ++ let Some(Shape::Ellipse(ellipse)) = comp.layers[0].shapes.first() else { ++ panic!("expected ellipse"); ++ }; ++ ellipse.reversed + }; +- assert!(ellipse.reversed); ++ assert!(!ellipse(r#"{"d":3,"ty":"el","p":{"a":0,"k":[50,50]},"s":{"a":0,"k":[10,10]}}"#)); ++ assert!(ellipse(r#"{"ty":"el","p":{"a":0,"k":[50,50]},"s":{"a":0,"k":[10,10]},"d":3}"#)); + } + + #[test] +@@ -394,6 +402,19 @@ fn inherited_keyframe_heap_budget_is_cumulative_and_preserves_end_values() { + } + } + ++#[test] ++fn empty_tangent_points_parse_as_zero_corners() { ++ // Optimized .tgs files write `[]` for every straight-line tangent, and ++ // rlottie zero-fills a point it cannot read; rejecting them loses the ++ // whole animation (Telegram's "21_heart_white" typing sticker). ++ let json = br#"{"i":[[],[]],"o":[[],[]],"v":[[2,0],[4,0]],"c":true}"#; ++ let limits = Limits::default(); ++ let path = parse_path_value(&mut Cursor::new(json.as_slice(), 128), &limits).unwrap(); ++ assert_eq!(path.vertices, alloc::vec![Vec2::new(2.0, 0.0), Vec2::new(4.0, 0.0)]); ++ assert!(path.in_tangents.iter().all(|t| *t == Vec2::ZERO)); ++ assert!(path.out_tangents.iter().all(|t| *t == Vec2::ZERO)); ++} ++ + #[test] + fn inherited_path_budget_charges_padded_tangents_before_cloning() { + let json = br#"[{"t":0,"s":[{"v":[[1,2],[3,4]],"i":[],"o":[]}]},{"t":1}]"#; +@@ -412,10 +433,9 @@ fn inherited_path_budget_charges_padded_tangents_before_cloning() { + + #[test] + fn group_walk_preserves_siblings_transforms_and_shared_limits() { +- // Exercise both field orders and resume the parent after the child list. ++ // Resume the parent after the child list. + for group in [ + r#"{"ty":"gr","it":[{"ty":"tr","p":{"k":[3,4]}},{"ty":"gr","it":[{"ty":"rc","p":{"k":[5,6]},"s":{"k":[7,8]}}]},{"ty":"el","p":{"k":[9,10]},"s":{"k":[11,12]}}]}"#, +- r#"{"it":[{"ty":"tr","p":{"k":[3,4]}},{"it":[{"ty":"rc","p":{"k":[5,6]},"s":{"k":[7,8]}}],"ty":"gr"},{"ty":"el","p":{"k":[9,10]},"s":{"k":[11,12]}}],"ty":"gr"}"#, + ] { + let json = alloc::format!(r#"[{group},{{"ty":"fl","c":{{"k":[1,0,0,1]}}}}]"#); + let mut counts = ShapeCounts::default(); +@@ -440,3 +460,14 @@ fn group_walk_preserves_siblings_transforms_and_shared_limits() { + assert!(parse_shape_list(&mut Cursor::new(json, 128), &Limits::default(), 0, &mut ShapeCounts::default()).is_err()); + } + } ++ ++#[test] ++fn group_items_before_ty_are_dropped() { ++ // Same rlottie rule as primitive_direction_before_ty_is_dropped: an `it` ++ // written ahead of `ty` is skipped, so the reference walks an empty group. ++ let json = br#"[{"it":[{"ty":"el","p":{"k":[9,10]},"s":{"k":[11,12]}}],"ty":"gr"},{"ty":"fl","c":{"k":[1,0,0,1]}}]"#; ++ let mut counts = ShapeCounts::default(); ++ let (shapes, _) = parse_shape_list(&mut Cursor::new(json.as_slice(), 128), &Limits::default(), 0, &mut counts).unwrap(); ++ assert!(matches!(&shapes[..], [Shape::Fill(_)])); ++ assert_eq!(counts.paints, 1); ++} diff --git a/packages/dev-libs/tlottie/tlottie-0_pre20260911.exheres-0 b/packages/dev-libs/tlottie/tlottie-0_pre20260911.exheres-0 new file mode 100644 index 0000000..faf85da --- /dev/null +++ b/packages/dev-libs/tlottie/tlottie-0_pre20260911.exheres-0 @@ -0,0 +1,30 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cargo [ rust_minimum_version=1.96.1 ] + +TLOTTIE_COMMIT="31f1b542f88e7b4be9a01e749920d857535fc715" + +SUMMARY="Rust library for rendering Lottie animations" +HOMEPAGE="https://github.com/dkaraush/tlottie" +DOWNLOADS="${HOMEPAGE}/archive/${TLOTTIE_COMMIT}.tar.gz -> ${PNV}.tar.gz" +WORK="${WORKBASE}/tlottie-${TLOTTIE_COMMIT}" + +LICENCES="MIT" +SLOT="0" +PLATFORMS="~amd64" + +DEFAULT_SRC_PREPARE_PATCHES=( "${FILES}/${PNV}-tdesktop-compat.patch" ) + +src_compile() { + ecargo rustc --frozen --release --features c-api --lib --crate-type staticlib \ + -- --print native-static-libs +} + +src_install() { + insinto /usr/$(exhost --target)/lib + doins "target/$(rust_target_arch_name)/release/libtlottie.a" + insinto /usr/$(exhost --target)/include/tlottie + doins include/tlottie.h + emagicdocs +} diff --git a/packages/dev-python/structlog/structlog-26.1.0.exheres-0 b/packages/dev-python/structlog/structlog-26.1.0.exheres-0 new file mode 100644 index 0000000..aa97ffa --- /dev/null +++ b/packages/dev-python/structlog/structlog-26.1.0.exheres-0 @@ -0,0 +1,19 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require pypi py-pep517 [ backend=hatchling blacklist="3.9" ] + +SUMMARY="Structured logging for Python" + +LICENCES="|| ( Apache-2.0 MIT )" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + dev-python/hatch_vcs[python_abis:*(-)?] + dev-python/hatch-fancy-pypi-readme[>=22.8.0][python_abis:*(-)?] + + run: + python_abis:3.10? ( dev-python/typing-extensions[python_abis:3.10] ) +" diff --git a/packages/games-misc/hydra-launcher/hydra-launcher-4.1.6.exheres-0 b/packages/games-misc/hydra-launcher/hydra-launcher-4.1.6.exheres-0 new file mode 100644 index 0000000..f12714b --- /dev/null +++ b/packages/games-misc/hydra-launcher/hydra-launcher-4.1.6.exheres-0 @@ -0,0 +1,87 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require freedesktop-desktop freedesktop-mime gtk-icon-cache + +SUMMARY="Open-source gaming platform and launcher" +HOMEPAGE="https://github.com/hydralauncher/hydra" +DOWNLOADS="${HOMEPAGE}/releases/download/v${PV}/hydralauncher_${PV}_amd64.deb -> ${PNV}.deb" + +LICENCES="MIT" +SLOT="0" +PLATFORMS="~amd64" +RESTRICT="mirror strip test" + +DEPENDENCIES=" + build: + app-arch/libarchive + + run: + dev-libs/at-spi2-core + dev-libs/expat + dev-libs/glib:2 + dev-libs/libsecret + dev-libs/nspr + dev-libs/nss + media-libs/fontconfig + net-misc/aria2 + net-print/cups + sys-apps/dbus + sys-apps/util-linux + sys-libs/zlib + sys-sound/alsa-lib + x11-apps/xdg-utils + x11-dri/libdrm + x11-dri/mesa + x11-libs/cairo + x11-libs/gdk-pixbuf:2.0 + x11-libs/gtk+:3 + x11-libs/libX11 + x11-libs/libXcomposite + x11-libs/libXdamage + x11-libs/libXext + x11-libs/libXfixes + x11-libs/libXrandr + x11-libs/libXScrnSaver + x11-libs/libXtst + x11-libs/libxcb + x11-libs/libnotify + x11-libs/pango +" + +WORK="${WORKBASE}/${PNV}" + +pkg_setup() { + exdirectory --allow /opt +} + +src_unpack() { + edo mkdir -p "${WORK}" + edo bsdtar -xOf "${FETCHEDDIR}/${PNV}.deb" data.tar.xz > "${WORKBASE}/data.tar.xz" + edo tar -xf "${WORKBASE}/data.tar.xz" -C "${WORK}" +} + +src_install() { + edo mkdir -p "${IMAGE}/opt/Hydra" + edo cp -a "${WORK}/opt/Hydra/." "${IMAGE}/opt/Hydra/" + + insinto /usr/share/applications + doins "${WORK}/usr/share/applications/hydralauncher.desktop" + insinto /usr/share/icons/hicolor/512x512/apps + doins "${WORK}/usr/share/icons/hicolor/512x512/apps/hydralauncher.png" + + dodir /usr/$(exhost --target)/bin + dosym /opt/Hydra/hydralauncher /usr/$(exhost --target)/bin/hydralauncher +} + +pkg_postinst() { + freedesktop-mime_pkg_postinst + freedesktop-desktop_pkg_postinst + gtk-icon-cache_pkg_postinst +} + +pkg_postrm() { + freedesktop-mime_pkg_postrm + freedesktop-desktop_pkg_postrm + gtk-icon-cache_pkg_postrm +} diff --git a/packages/games-misc/prismlauncher/prismlauncher-11.1.1.exheres-0 b/packages/games-misc/prismlauncher/prismlauncher-11.1.1.exheres-0 new file mode 100644 index 0000000..7e2a005 --- /dev/null +++ b/packages/games-misc/prismlauncher/prismlauncher-11.1.1.exheres-0 @@ -0,0 +1,63 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cmake freedesktop-desktop freedesktop-mime gtk-icon-cache + +SUMMARY="Minecraft launcher with ability to manage multiple instances" +HOMEPAGE="https://prismlauncher.org https://github.com/PrismLauncher/PrismLauncher" +DOWNLOADS="https://github.com/PrismLauncher/PrismLauncher/releases/download/${PV}/PrismLauncher-${PV}.tar.gz -> ${PNV}.tar.gz" + +LICENCES="Apache-2.0 Batch GPL-3 LGPL-2+ LGPL-3+ MIT OFL-1.1" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + app-doc/scdoc + kde-frameworks/extra-cmake-modules + sys-libs/vulkan-headers + virtual/jdk:17 + virtual/pkg-config + + build+run: + app-arch/libarchive + app-text/cmark + dev-cpp/tomlplusplus + media-libs/qrencode + sys-apps/gamemode + sys-apps/pciutils + sys-libs/zlib + x11-dri/mesa + x11-libs/qtbase:6[gui][vulkan] + x11-libs/qtnetworkauth:6 + x11-libs/qtsvg:6 + + run: + x11-libs/qtimageformats:6 + + suggestion: + virtual/jre:* [[ description = [ System Java for running Minecraft, otherwise use the built-in Java downloader ] ]] +" + +CMAKE_SOURCE="${WORKBASE}/PrismLauncher-${PV}" + +CMAKE_SRC_CONFIGURE_PARAMS=( + -DLauncher_BUILD_PLATFORM=Exherbo + -DLauncher_ENABLE_JAVA_DOWNLOADER=ON +) + +CMAKE_SRC_CONFIGURE_TESTS=( + '-DBUILD_TESTING=ON -DBUILD_TESTING=OFF' +) + +pkg_postinst() { + freedesktop-mime_pkg_postinst + freedesktop-desktop_pkg_postinst + gtk-icon-cache_pkg_postinst +} + +pkg_postrm() { + freedesktop-mime_pkg_postrm + freedesktop-desktop_pkg_postrm + gtk-icon-cache_pkg_postrm +} diff --git a/packages/gui-libs/adwaita-qt/adwaita-qt-1.4.2.exheres-0 b/packages/gui-libs/adwaita-qt/adwaita-qt-1.4.2.exheres-0 new file mode 100644 index 0000000..73596d1 --- /dev/null +++ b/packages/gui-libs/adwaita-qt/adwaita-qt-1.4.2.exheres-0 @@ -0,0 +1,21 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cmake + +SUMMARY="Adwaita style for Qt6 applications" +HOMEPAGE="https://github.com/FedoraQt/adwaita-qt" +DOWNLOADS="https://github.com/FedoraQt/adwaita-qt/archive/${PV}/${PNV}.tar.gz" + +LICENCES="GPL-2 LGPL-2" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build+run: + x11-libs/qtbase:6[>=6.2.0][gui] +" + +CMAKE_SRC_CONFIGURE_PARAMS=( + -DUSE_QT6=ON +) diff --git a/packages/gui-libs/qt-color-widgets/qt-color-widgets-3.0.0.exheres-0 b/packages/gui-libs/qt-color-widgets/qt-color-widgets-3.0.0.exheres-0 new file mode 100644 index 0000000..e6af19c --- /dev/null +++ b/packages/gui-libs/qt-color-widgets/qt-color-widgets-3.0.0.exheres-0 @@ -0,0 +1,43 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cmake + +SUMMARY="Qt (C++) widgets to manage color inputs" +HOMEPAGE="https://gitlab.com/mattbas/Qt-Color-Widgets" + +DOWNLOADS=" + https://gitlab.com/mattbas/Qt-Color-Widgets/-/archive/${PV}/Qt-Color-Widgets-${PV}.tar.bz2 + -> ${PNV}.tar.bz2 +" + +LICENCES="LGPL-3+" +SLOT="0" +PLATFORMS="~amd64" + +MYOPTIONS=" + designer [[ + description = [ Build the Qt Designer plugin ] + ]] +" + +DEPENDENCIES=" + build+run: + x11-libs/qtbase:6[gui] + + designer? ( + x11-libs/qttools:6[designer] + ) +" + +CMAKE_SOURCE="${WORKBASE}/Qt-Color-Widgets-${PV}" + +src_configure() { + CMAKE_SRC_CONFIGURE_PARAMS=( + -DQT_VERSION_MAJOR=6 + -DBUILD_SHARED_LIBS=ON + -DQTCOLORWIDGETS_DESIGNER_PLUGIN="$(option designer ON OFF)" + ) + + cmake_src_configure +} diff --git a/packages/media-libs/libmysofa/libmysofa-1.3.5.exheres-0 b/packages/media-libs/libmysofa/libmysofa-1.3.5.exheres-0 new file mode 100644 index 0000000..dc31d82 --- /dev/null +++ b/packages/media-libs/libmysofa/libmysofa-1.3.5.exheres-0 @@ -0,0 +1,36 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cmake + +SUMMARY="Library for reading AES SOFA files" +HOMEPAGE="https://github.com/hoene/libmysofa" +DOWNLOADS="https://github.com/hoene/libmysofa/archive/refs/tags/v${PV}.tar.gz -> ${PNV}.tar.gz" + +LICENCES="BSD-3" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build+run: + sys-libs/zlib + + test: + app-arch/bzip2 + dev-lang/node + dev-util/cunit +" + +CMAKE_SRC_CONFIGURE_PARAMS=( + -DBUILD_SHARED_LIBS=ON + -DBUILD_STATIC_LIBS=OFF +) + +CMAKE_SRC_CONFIGURE_TESTS=( + '-DBUILD_TESTS=ON -DBUILD_TESTS=OFF' +) + +src_install() { + cmake_src_install + edo rm -r "${IMAGE}/usr/share/libmysofa" +} diff --git a/packages/media-libs/nanosvg/files/nanosvg.patch b/packages/media-libs/nanosvg/files/nanosvg.patch new file mode 100644 index 0000000..dc11e93 --- /dev/null +++ b/packages/media-libs/nanosvg/files/nanosvg.patch @@ -0,0 +1,248 @@ +From abcd277ea45e9098bed752cf9c6875b533c0892f Mon Sep 17 00:00:00 2001 +From: AlbrechtS +Date: Sun, 4 Feb 2018 23:47:38 +0100 +Subject: [PATCH] Modify rasterizer to support non-square X,Y axes scaling. + +Add new function nsvgRasterizeXY() similar to nsvgRasterize() but with +separate scaling factors for x-axis and y-axis. +--- + src/nanosvgrast.h | 78 +++++++++++++++++++++++++++++++---------------- + 1 file changed, 51 insertions(+), 27 deletions(-) + +diff --git a/src/nanosvgrast.h b/src/nanosvgrast.h +index 17ba3b0..a83db27 100644 +--- a/src/nanosvgrast.h ++++ b/src/nanosvgrast.h +@@ -22,6 +22,12 @@ + * + */ + ++/* Modified by FLTK to support non-square X,Y axes scaling. ++ * ++ * Added: nsvgRasterizeXY() ++*/ ++ ++ + #ifndef NANOSVGRAST_H + #define NANOSVGRAST_H + +@@ -46,6 +52,9 @@ typedef struct NSVGrasterizer NSVGrasterizer; + unsigned char* img = malloc(w*h*4); + // Rasterize + nsvgRasterize(rast, image, 0,0,1, img, w, h, w*4); ++ ++ // For non-square X,Y scaling, use ++ nsvgRasterizeXY(rast, image, 0,0,1,1, img, w, h, w*4); + */ + + // Allocated rasterizer context. +@@ -55,7 +64,7 @@ NSVGrasterizer* nsvgCreateRasterizer(void); + // r - pointer to rasterizer context + // image - pointer to image to rasterize + // tx,ty - image offset (applied after scaling) +-// scale - image scale ++// scale - image scale (assumes square aspect ratio) + // dst - pointer to destination image data, 4 bytes per pixel (RGBA) + // w - width of the image to render + // h - height of the image to render +@@ -64,6 +73,12 @@ void nsvgRasterize(NSVGrasterizer* r, + NSVGimage* image, float tx, float ty, float scale, + unsigned char* dst, int w, int h, int stride); + ++// As above, but allow X and Y axes to scale independently for non-square aspects ++void nsvgRasterizeXY(NSVGrasterizer* r, ++ NSVGimage* image, float tx, float ty, ++ float sx, float sy, ++ unsigned char* dst, int w, int h, int stride); ++ + // Deletes rasterizer context. + void nsvgDeleteRasterizer(NSVGrasterizer*); + +@@ -370,7 +385,7 @@ static void nsvg__flattenCubicBez(NSVGrasterizer* r, + nsvg__flattenCubicBez(r, x1234,y1234, x234,y234, x34,y34, x4,y4, level+1, type); + } + +-static void nsvg__flattenShape(NSVGrasterizer* r, NSVGshape* shape, float scale) ++static void nsvg__flattenShape(NSVGrasterizer* r, NSVGshape* shape, float sx, float sy) + { + int i, j; + NSVGpath* path; +@@ -378,13 +393,13 @@ static void nsvg__flattenShape(NSVGrasterizer* r, NSVGshape* shape, float scale) + for (path = shape->paths; path != NULL; path = path->next) { + r->npoints = 0; + // Flatten path +- nsvg__addPathPoint(r, path->pts[0]*scale, path->pts[1]*scale, 0); ++ nsvg__addPathPoint(r, path->pts[0]*sx, path->pts[1]*sy, 0); + for (i = 0; i < path->npts-1; i += 3) { + float* p = &path->pts[i*2]; +- nsvg__flattenCubicBez(r, p[0]*scale,p[1]*scale, p[2]*scale,p[3]*scale, p[4]*scale,p[5]*scale, p[6]*scale,p[7]*scale, 0, 0); ++ nsvg__flattenCubicBez(r, p[0]*sx,p[1]*sy, p[2]*sx,p[3]*sy, p[4]*sx,p[5]*sy, p[6]*sx,p[7]*sy, 0, 0); + } + // Close path +- nsvg__addPathPoint(r, path->pts[0]*scale, path->pts[1]*scale, 0); ++ nsvg__addPathPoint(r, path->pts[0]*sx, path->pts[1]*sy, 0); + // Build edges + for (i = 0, j = r->npoints-1; i < r->npoints; j = i++) + nsvg__addEdge(r, r->points[j].x, r->points[j].y, r->points[i].x, r->points[i].y); +@@ -734,7 +749,7 @@ static void nsvg__prepareStroke(NSVGrasterizer* r, float miterLimit, int lineJoi + } + } + +-static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float scale) ++static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float sx, float sy) + { + int i, j, closed; + NSVGpath* path; +@@ -742,15 +757,16 @@ static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float + float miterLimit = shape->miterLimit; + int lineJoin = shape->strokeLineJoin; + int lineCap = shape->strokeLineCap; +- float lineWidth = shape->strokeWidth * scale; ++ const float sw = (sx + sy) / 2; // average scaling factor ++ const float lineWidth = shape->strokeWidth * sw; // FIXME (?) + + for (path = shape->paths; path != NULL; path = path->next) { + // Flatten path + r->npoints = 0; +- nsvg__addPathPoint(r, path->pts[0]*scale, path->pts[1]*scale, NSVG_PT_CORNER); ++ nsvg__addPathPoint(r, path->pts[0]*sx, path->pts[1]*sy, NSVG_PT_CORNER); + for (i = 0; i < path->npts-1; i += 3) { + float* p = &path->pts[i*2]; +- nsvg__flattenCubicBez(r, p[0]*scale,p[1]*scale, p[2]*scale,p[3]*scale, p[4]*scale,p[5]*scale, p[6]*scale,p[7]*scale, 0, NSVG_PT_CORNER); ++ nsvg__flattenCubicBez(r, p[0]*sx,p[1]*sy, p[2]*sx,p[3]*sy, p[4]*sx,p[5]*sy, p[6]*sx,p[7]*sy, 0, NSVG_PT_CORNER); + } + if (r->npoints < 2) + continue; +@@ -796,7 +812,7 @@ static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float + dashOffset -= shape->strokeDashArray[idash]; + idash = (idash + 1) % shape->strokeDashCount; + } +- dashLen = (shape->strokeDashArray[idash] - dashOffset) * scale; ++ dashLen = (shape->strokeDashArray[idash] - dashOffset) * sw; + + for (j = 1; j < r->npoints2; ) { + float dx = r->points2[j].x - cur.x; +@@ -818,7 +834,7 @@ static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float + // Advance dash pattern + dashState = !dashState; + idash = (idash+1) % shape->strokeDashCount; +- dashLen = shape->strokeDashArray[idash] * scale; ++ dashLen = shape->strokeDashArray[idash] * sw; + // Restart + cur.x = x; + cur.y = y; +@@ -987,7 +1003,7 @@ static inline int nsvg__div255(int x) + } + + static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* cover, int x, int y, +- float tx, float ty, float scale, NSVGcachedPaint* cache) ++ float tx, float ty, float sx, float sy, NSVGcachedPaint* cache) + { + + if (cache->type == NSVG_PAINT_COLOR) { +@@ -1028,9 +1044,9 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co + int i, cr, cg, cb, ca; + unsigned int c; + +- fx = ((float)x - tx) / scale; +- fy = ((float)y - ty) / scale; +- dx = 1.0f / scale; ++ fx = ((float)x - tx) / sx; ++ fy = ((float)y - ty) / sy; ++ dx = 1.0f / sx; + + for (i = 0; i < count; i++) { + int r,g,b,a,ia; +@@ -1073,9 +1089,9 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co + int i, cr, cg, cb, ca; + unsigned int c; + +- fx = ((float)x - tx) / scale; +- fy = ((float)y - ty) / scale; +- dx = 1.0f / scale; ++ fx = ((float)x - tx) / sx; ++ fy = ((float)y - ty) / sy; ++ dx = 1.0f / sx; + + for (i = 0; i < count; i++) { + int r,g,b,a,ia; +@@ -1114,7 +1130,7 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co + } + } + +-static void nsvg__rasterizeSortedEdges(NSVGrasterizer *r, float tx, float ty, float scale, NSVGcachedPaint* cache, char fillRule) ++static void nsvg__rasterizeSortedEdges(NSVGrasterizer *r, float tx, float ty, float sx, float sy, NSVGcachedPaint* cache, char fillRule) + { + NSVGactiveEdge *active = NULL; + int y, s; +@@ -1196,7 +1212,7 @@ static void nsvg__rasterizeSortedEdges(NSVGrasterizer *r, float tx, float ty, fl + if (xmin < 0) xmin = 0; + if (xmax > r->width-1) xmax = r->width-1; + if (xmin <= xmax) { +- nsvg__scanlineSolid(&r->bitmap[y * r->stride] + xmin*4, xmax-xmin+1, &r->scanline[xmin], xmin, y, tx,ty, scale, cache); ++ nsvg__scanlineSolid(&r->bitmap[y * r->stride] + xmin*4, xmax-xmin+1, &r->scanline[xmin], xmin, y, tx,ty, sx, sy, cache); + } + } + +@@ -1364,8 +1380,9 @@ static void dumpEdges(NSVGrasterizer* r, const char* name) + } + */ + +-void nsvgRasterize(NSVGrasterizer* r, +- NSVGimage* image, float tx, float ty, float scale, ++void nsvgRasterizeXY(NSVGrasterizer* r, ++ NSVGimage* image, float tx, float ty, ++ float sx, float sy, + unsigned char* dst, int w, int h, int stride) + { + NSVGshape *shape = NULL; +@@ -1396,7 +1413,7 @@ void nsvgRasterize(NSVGrasterizer* r, + r->freelist = NULL; + r->nedges = 0; + +- nsvg__flattenShape(r, shape, scale); ++ nsvg__flattenShape(r, shape, sx, sy); + + // Scale and translate edges + for (i = 0; i < r->nedges; i++) { +@@ -1414,14 +1431,14 @@ void nsvgRasterize(NSVGrasterizer* r, + // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule + nsvg__initPaint(&cache, &shape->fill, shape->opacity); + +- nsvg__rasterizeSortedEdges(r, tx,ty,scale, &cache, shape->fillRule); ++ nsvg__rasterizeSortedEdges(r, tx,ty, sx, sy, &cache, shape->fillRule); + } +- if (shape->stroke.type != NSVG_PAINT_NONE && (shape->strokeWidth * scale) > 0.01f) { ++ if (shape->stroke.type != NSVG_PAINT_NONE && (shape->strokeWidth * sx) > 0.01f) { + nsvg__resetPool(r); + r->freelist = NULL; + r->nedges = 0; + +- nsvg__flattenShapeStroke(r, shape, scale); ++ nsvg__flattenShapeStroke(r, shape, sx, sy); + + // dumpEdges(r, "edge.svg"); + +@@ -1441,7 +1458,7 @@ void nsvgRasterize(NSVGrasterizer* r, + // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule + nsvg__initPaint(&cache, &shape->stroke, shape->opacity); + +- nsvg__rasterizeSortedEdges(r, tx,ty,scale, &cache, NSVG_FILLRULE_NONZERO); ++ nsvg__rasterizeSortedEdges(r, tx,ty,sx, sy, &cache, NSVG_FILLRULE_NONZERO); + } + } + +@@ -1453,6 +1470,13 @@ void nsvgRasterize(NSVGrasterizer* r, + r->stride = 0; + } + ++void nsvgRasterize(NSVGrasterizer* r, ++ NSVGimage* image, float tx, float ty, float scale, ++ unsigned char* dst, int w, int h, int stride) ++{ ++ nsvgRasterizeXY(r,image, tx, ty, scale, scale, dst, w, h, stride); ++} ++ + #endif // NANOSVGRAST_IMPLEMENTATION + + #endif // NANOSVGRAST_H diff --git a/packages/media-libs/nanosvg/nanosvg-0.1.0.1.exheres-0 b/packages/media-libs/nanosvg/nanosvg-0.1.0.1.exheres-0 new file mode 100644 index 0000000..5b9838f --- /dev/null +++ b/packages/media-libs/nanosvg/nanosvg-0.1.0.1.exheres-0 @@ -0,0 +1,35 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cmake + +NANOSVG_COMMIT="9da543e8329fdd81b64eb48742d8ccb09377aed1" + +SUMMARY="Simple stupid SVG parser" +HOMEPAGE="https://github.com/memononen/nanosvg" + +DOWNLOADS=" + https://github.com/memononen/nanosvg/archive/${NANOSVG_COMMIT}.tar.gz + -> ${PNV}.tar.gz +" + +LICENCES="ZLIB" +SLOT="0" +PLATFORMS="~amd64" + +CMAKE_SOURCE="${WORKBASE}/nanosvg-${NANOSVG_COMMIT}" + +DEFAULT_SRC_PREPARE_PATCHES=( + "${FILES}/nanosvg.patch" +) + +CMAKE_SRC_CONFIGURE_PARAMS=( + -DBUILD_SHARED_LIBS=ON +) + +src_install() { + cmake_src_install + + insinto /usr/share/licenses/${PN} + newins "${CMAKE_SOURCE}/LICENSE.txt" LICENSE +} diff --git a/packages/media-libs/tg_owt/files/tg_owt-0_pre20260803-abseil.patch b/packages/media-libs/tg_owt/files/tg_owt-0_pre20260803-abseil.patch new file mode 100644 index 0000000..6305158 --- /dev/null +++ b/packages/media-libs/tg_owt/files/tg_owt-0_pre20260803-abseil.patch @@ -0,0 +1,159 @@ +--- a/cmake/libabsl.cmake ++++ b/cmake/libabsl.cmake +@@ -1,128 +1,37 @@ +-add_library(libabsl OBJECT EXCLUDE_FROM_ALL) +-init_target(libabsl) +-add_library(tg_owt::libabsl ALIAS libabsl) +- ++set(_tg_owt_build_shared_libs ${BUILD_SHARED_LIBS}) ++set(BUILD_SHARED_LIBS OFF) ++set(ABSL_ENABLE_INSTALL OFF) + set(libabsl_loc ${third_party_loc}/abseil-cpp) ++add_subdirectory(${libabsl_loc} ${CMAKE_CURRENT_BINARY_DIR}/abseil-cpp EXCLUDE_FROM_ALL) ++set(BUILD_SHARED_LIBS ${_tg_owt_build_shared_libs}) ++ ++add_library(libabsl INTERFACE) ++add_library(tg_owt::libabsl ALIAS libabsl) ++target_compile_features(libabsl INTERFACE cxx_std_20) + +-nice_target_sources(libabsl ${libabsl_loc} ++target_link_libraries(tg_owt + PRIVATE +- # absl/base/dynamic_annotations.cc +- # absl/base/internal/cycleclock.cc +- # absl/base/internal/exception_safety_testing.cc +- # absl/base/internal/exponential_biased.cc +- # absl/base/internal/low_level_alloc.cc +- # absl/base/internal/periodic_sampler.cc +- absl/base/internal/raw_logging.cc +- # absl/base/internal/scoped_set_env.cc +- # absl/base/internal/spinlock.cc +- # absl/base/internal/spinlock_wait.cc +- # absl/base/internal/strerror.cc +- # absl/base/internal/sysinfo.cc +- # absl/base/internal/thread_identity.cc +- absl/base/internal/throw_delegate.cc +- # absl/base/internal/unscaledcycleclock.cc +- # absl/base/log_severity.cc +- # absl/container/internal/hash_generator_testing.cc +- # absl/container/internal/hashtablez_sampler.cc +- # absl/container/internal/hashtablez_sampler_force_weak_definition.cc +- # absl/container/internal/raw_hash_set.cc +- # absl/container/internal/test_instance_tracker.cc +- # absl/debugging/failure_signal_handler.cc +- # absl/debugging/internal/address_is_readable.cc +- # absl/debugging/internal/demangle.cc +- # absl/debugging/internal/elf_mem_image.cc +- # absl/debugging/internal/examine_stack.cc +- # absl/debugging/internal/stack_consumption.cc +- # absl/debugging/internal/vdso_support.cc +- # absl/debugging/leak_check.cc +- # absl/debugging/leak_check_disable.cc +- # absl/debugging/stacktrace.cc +- # absl/debugging/symbolize.cc +- # absl/flags/flag.cc +- # absl/flags/flag_test_defs.cc +- # absl/flags/internal/commandlineflag.cc +- # absl/flags/internal/flag.cc +- # absl/flags/internal/program_name.cc +- # absl/flags/internal/registry.cc +- # absl/flags/internal/type_erased.cc +- # absl/flags/internal/usage.cc +- # absl/flags/marshalling.cc +- # absl/flags/parse.cc +- # absl/flags/usage.cc +- # absl/flags/usage_config.cc +- # absl/hash/internal/city.cc +- # absl/hash/internal/hash.cc +- absl/numeric/int128.cc +- # absl/random/discrete_distribution.cc +- # absl/random/gaussian_distribution.cc +- # absl/random/internal/chi_square.cc +- # absl/random/internal/distribution_test_util.cc +- # absl/random/internal/nanobenchmark.cc +- # absl/random/internal/pool_urbg.cc +- # absl/random/internal/randen.cc +- # absl/random/internal/randen_detect.cc +- # absl/random/internal/randen_hwaes.cc +- # absl/random/internal/randen_slow.cc +- # absl/random/internal/seed_material.cc +- # absl/random/seed_gen_exception.cc +- # absl/random/seed_sequences.cc +- # absl/status/status.cc +- # absl/status/status_payload_printer.cc +- absl/strings/ascii.cc +- absl/strings/charconv.cc +- absl/strings/cord.cc +- absl/strings/escaping.cc +- absl/strings/internal/charconv_bigint.cc +- absl/strings/internal/charconv_parse.cc +- absl/strings/internal/escaping.cc +- absl/strings/internal/memutil.cc +- absl/strings/internal/ostringstream.cc +- absl/strings/internal/pow10_helper.cc +- absl/strings/internal/str_format/arg.cc +- absl/strings/internal/str_format/bind.cc +- absl/strings/internal/str_format/extension.cc +- absl/strings/internal/str_format/float_conversion.cc +- absl/strings/internal/str_format/output.cc +- absl/strings/internal/str_format/parser.cc +- absl/strings/internal/utf8.cc +- absl/strings/match.cc +- absl/strings/numbers.cc +- absl/strings/str_cat.cc +- absl/strings/str_replace.cc +- absl/strings/str_split.cc +- absl/strings/string_view.cc +- absl/strings/substitute.cc +- # absl/synchronization/barrier.cc +- # absl/synchronization/blocking_counter.cc +- # absl/synchronization/internal/create_thread_identity.cc +- # absl/synchronization/internal/graphcycles.cc +- # absl/synchronization/internal/per_thread_sem.cc +- # absl/synchronization/internal/waiter.cc +- # absl/synchronization/mutex.cc +- # absl/synchronization/notification.cc +- # absl/time/civil_time.cc +- # absl/time/clock.cc +- # absl/time/duration.cc +- # absl/time/format.cc +- # absl/time/internal/cctz/src/civil_time_detail.cc +- # absl/time/internal/cctz/src/time_zone_fixed.cc +- # absl/time/internal/cctz/src/time_zone_format.cc +- # absl/time/internal/cctz/src/time_zone_if.cc +- # absl/time/internal/cctz/src/time_zone_impl.cc +- # absl/time/internal/cctz/src/time_zone_info.cc +- # absl/time/internal/cctz/src/time_zone_libc.cc +- # absl/time/internal/cctz/src/time_zone_lookup.cc +- # absl/time/internal/cctz/src/time_zone_posix.cc +- # absl/time/internal/cctz/src/zone_info_source.cc +- # absl/time/internal/test_util.cc +- # absl/time/time.cc +- # absl/types/bad_any_cast.cc +- absl/types/bad_optional_access.cc +- absl/types/bad_variant_access.cc ++ absl::algorithm_container ++ absl::bind_front ++ absl::config ++ absl::cord ++ absl::core_headers ++ absl::flat_hash_map ++ absl::inlined_vector ++ absl::flags ++ absl::flags_parse ++ absl::flags_usage ++ absl::memory ++ absl::optional ++ absl::str_format ++ absl::strings ++ absl::synchronization ++ absl::type_traits ++ absl::variant + ) + + target_include_directories(libabsl +-PUBLIC ++INTERFACE + $ + $ + ) diff --git a/packages/media-libs/tg_owt/tg_owt-0_pre20260803.exheres-0 b/packages/media-libs/tg_owt/tg_owt-0_pre20260803.exheres-0 new file mode 100644 index 0000000..8d7f3eb --- /dev/null +++ b/packages/media-libs/tg_owt/tg_owt-0_pre20260803.exheres-0 @@ -0,0 +1,90 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cmake flag-o-matic + +TG_OWT_COMMIT="26068e29bfa8d74a9dc9c8f7f94172fafbc262b8" +LIBYUV_COMMIT="04821d1e7d60845525e8db55c7bcd41ef5be9406" +CRC32C_COMMIT="21fc8ef30415a635e7351ffa0e5d5367943d4a94" +ABSEIL_COMMIT="d7aaad83b488fd62bd51c81ecf16cd938532cc0a" + +SUMMARY="WebRTC build for Telegram" +HOMEPAGE="https://github.com/desktop-app/tg_owt" +DOWNLOADS=" + https://github.com/desktop-app/tg_owt/archive/${TG_OWT_COMMIT}.tar.gz -> ${PNV}.tar.gz + https://gitlab.com/chromiumsrc/libyuv/-/archive/${LIBYUV_COMMIT}/libyuv-${LIBYUV_COMMIT}.tar.bz2 + https://github.com/google/crc32c/archive/${CRC32C_COMMIT}.tar.gz -> crc32c-${CRC32C_COMMIT}.tar.gz + https://github.com/abseil/abseil-cpp/archive/${ABSEIL_COMMIT}.tar.gz -> abseil-cpp-${ABSEIL_COMMIT}.tar.gz +" + +LICENCES="Apache-2.0 BSD-3" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + virtual/pkg-config + x11-proto/xorgproto + + build+run: + dev-libs/glib:2 + dev-libs/libglvnd + dev-libs/openssl + media-libs/libjpeg-turbo + media-libs/libvpx[>=1.10] + media-libs/openh264 + media-libs/opus + media/ffmpeg + media/pipewire + media-sound/pulseaudio + net-libs/libsrtp + sys-sound/alsa-lib + x11-dri/libdrm + x11-dri/mesa + x11-libs/libX11 + x11-libs/libXcomposite + x11-libs/libXdamage + x11-libs/libXext + x11-libs/libXfixes + x11-libs/libXrandr + x11-libs/libXrender + x11-libs/libXtst +" + +CMAKE_SOURCE="${WORKBASE}/tg_owt-${TG_OWT_COMMIT}" + +DEFAULT_SRC_PREPARE_PATCHES=( + "${FILES}/${PNV}-abseil.patch" +) + +CMAKE_SRC_CONFIGURE_PARAMS=( + -DCMAKE_DISABLE_FIND_PACKAGE_absl=ON + -DCMAKE_CXX_STANDARD=20 + -DCMAKE_SHARED_LINKER_FLAGS=-Wl,-z,defs + -DBUILD_SHARED_LIBS=ON + -DTG_OWT_USE_X11=ON + -DTG_OWT_USE_PIPEWIRE=ON + -DTG_OWT_DLOPEN_PIPEWIRE=ON + -DTG_OWT_BUILD_AUDIO_BACKENDS=ON +) + +src_prepare() { + edo rmdir "${CMAKE_SOURCE}/src/third_party/libyuv" + edo mv "${WORKBASE}/libyuv-${LIBYUV_COMMIT}" "${CMAKE_SOURCE}/src/third_party/libyuv" + edo rmdir "${CMAKE_SOURCE}/src/third_party/crc32c/src" + edo mv "${WORKBASE}/crc32c-${CRC32C_COMMIT}" "${CMAKE_SOURCE}/src/third_party/crc32c/src" + edo rmdir "${CMAKE_SOURCE}/src/third_party/abseil-cpp" + edo mv "${WORKBASE}/abseil-cpp-${ABSEIL_COMMIT}" "${CMAKE_SOURCE}/src/third_party/abseil-cpp" + edo cd "${CMAKE_SOURCE}" + default +} + +src_configure() { + append-cxxflags -DNDEBUG + cmake_src_configure +} + +src_install() { + cmake_src_install + edo find "${IMAGE}/usr/$(exhost --target)/include/tg_owt" -depth -type d -empty -delete +} diff --git a/packages/media-libs/zita-convolver/files/zita-convolver-4.0.3-makefile.patch b/packages/media-libs/zita-convolver/files/zita-convolver-4.0.3-makefile.patch new file mode 100644 index 0000000..625fa55 --- /dev/null +++ b/packages/media-libs/zita-convolver/files/zita-convolver-4.0.3-makefile.patch @@ -0,0 +1,23 @@ +diff -urN zita-convolver-4.0.3.orig/source/Makefile zita-convolver-4.0.3/source/Makefile +--- zita-convolver-4.0.3.orig/source/Makefile 2018-08-26 16:35:37.000000000 +0300 ++++ zita-convolver-4.0.3/source/Makefile 2019-04-13 22:32:29.558347119 +0300 +@@ -33,8 +33,7 @@ + + CPPFLAGS += -I. -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS + CPPFLAGS += -DENABLE_VECTOR_MODE +-CXXFLAGS += -fPIC -Wall -ffast-math -funroll-loops -O2 +-CXXFLAGS += -march=native ++CXXFLAGS += -fPIC -Wall -ffast-math -funroll-loops + LDLFAGS += + LDLIBS += + +@@ -56,8 +55,8 @@ + install -d $(DESTDIR)$(LIBDIR) + install -m 644 $(ZITA-CONVOLVER_H) $(DESTDIR)$(INCDIR) + install -m 755 $(ZITA-CONVOLVER_MIN) $(DESTDIR)$(LIBDIR) +- ldconfig + ln -sf $(ZITA-CONVOLVER_MIN) $(DESTDIR)$(LIBDIR)/$(ZITA-CONVOLVER_SO) ++ ln -sf $(ZITA-CONVOLVER_MIN) $(DESTDIR)$(LIBDIR)/$(ZITA-CONVOLVER_MAJ) + + uninstall: + rm -rf $(DESTDIR)$(INCDIR)/$(ZITA-CONVOLVER_H) diff --git a/packages/media-libs/zita-convolver/zita-convolver-4.0.3.exheres-0 b/packages/media-libs/zita-convolver/zita-convolver-4.0.3.exheres-0 new file mode 100644 index 0000000..91bb41e --- /dev/null +++ b/packages/media-libs/zita-convolver/zita-convolver-4.0.3.exheres-0 @@ -0,0 +1,33 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +SUMMARY="Real-time convolution matrix library" +HOMEPAGE="https://kokkinizita.linuxaudio.org/linuxaudio/" +DOWNLOADS="https://kokkinizita.linuxaudio.org/linuxaudio/downloads/${PNV}.tar.bz2" + +LICENCES="GPL-3+" +SLOT="4" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build+run: + sci-libs/fftw +" + +DEFAULT_SRC_PREPARE_PATCHES=( + "${FILES}/${PNV}-makefile.patch" +) + +src_compile() { + emake -C source CXX="${CXX}" +} + +src_install() { + emake -C source install \ + CXX="${CXX}" \ + DESTDIR="${IMAGE}" \ + PREFIX="/usr/$(exhost --target)" \ + LIBDIR="/usr/$(exhost --target)/lib" + + emagicdocs +} diff --git a/packages/media-sound/easyeffects/easyeffects-8.3.0.exheres-0 b/packages/media-sound/easyeffects/easyeffects-8.3.0.exheres-0 new file mode 100644 index 0000000..80bbcb6 --- /dev/null +++ b/packages/media-sound/easyeffects/easyeffects-8.3.0.exheres-0 @@ -0,0 +1,61 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cmake + +SUMMARY="Audio effects for PipeWire applications" +HOMEPAGE="https://wwmm.github.io/easyeffects/ https://github.com/wwmm/easyeffects" +DOWNLOADS="https://github.com/wwmm/easyeffects/archive/refs/tags/v${PV}.tar.gz -> ${PNV}.tar.gz" + +LICENCES="GPL-3" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + kde-frameworks/extra-cmake-modules[>=6.10.0] + media-libs/ladspa-sdk + sys-devel/gettext + virtual/pkg-config + + build+run: + dev-libs/glib:2 + dev-libs/json + dev-libs/onetbb + kde/kirigami-addons:6 + kde-frameworks/kcolorscheme:6[>=6.10.0] + kde-frameworks/kconfig:6[>=6.10.0] + kde-frameworks/kconfigwidgets:6[>=6.10.0] + kde-frameworks/kcoreaddons:6[>=6.10.0] + kde-frameworks/ki18n:6[>=6.10.0] + kde-frameworks/kiconthemes:6[>=6.10.0] + kde-frameworks/kirigami:6[>=6.10.0] + kde-frameworks/qqc2-desktop-style:6[>=6.10.0] + media-libs/libbs2b + media-libs/libebur128[>=1.2.6] + media-libs/libmysofa + media-libs/libsndfile + media-libs/lilv[>=0.24] + media-libs/rnnoise + media-libs/soundtouch + media-libs/speexdsp + media-libs/webrtc-audio-processing:2 + media-libs/zita-convolver:4[>=4.0.3] + media/pipewire[>=1.0.6] + sci-libs/fftw + sci-libs/gsl + sys-libs/libportal[providers:qt6] + x11-libs/qtbase:6[gui] + x11-libs/qtdeclarative:6 + x11-libs/qtgraphs:6 + + suggestion: + media-sound/lsp-plugins [[ description = [ Additional equalizer, compressor and delay effects ] ]] +" + +CMAKE_SOURCE="${WORKBASE}/${PNV}" + +CMAKE_SRC_CONFIGURE_PARAMS=( + -DENABLE_LIBPORTAL=ON + -DENABLE_RNNOISE=ON +) diff --git a/packages/media-sound/pear-desktop/pear-desktop-3.12.0.exheres-0 b/packages/media-sound/pear-desktop/pear-desktop-3.12.0.exheres-0 new file mode 100644 index 0000000..c961f4d --- /dev/null +++ b/packages/media-sound/pear-desktop/pear-desktop-3.12.0.exheres-0 @@ -0,0 +1,84 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require freedesktop-desktop gtk-icon-cache + +SUMMARY="Desktop music player with extensions" +HOMEPAGE="https://github.com/pear-devs/pear-desktop" +DOWNLOADS="${HOMEPAGE}/releases/download/v${PV}/youtube-music_${PV}_amd64.deb" + +LICENCES="MIT" +SLOT="0" +PLATFORMS="~amd64" +RESTRICT="mirror strip test" + +DEPENDENCIES=" + run: + dev-libs/at-spi2-core + dev-libs/expat + dev-libs/glib:2 + dev-libs/libsecret + dev-libs/nspr + dev-libs/nss + media-libs/fontconfig + media-libs/freetype + net-print/cups + sys-apps/dbus + sys-apps/util-linux + sys-sound/alsa-lib + x11-apps/xdg-utils + x11-dri/libdrm + x11-dri/mesa + x11-libs/cairo + x11-libs/gdk-pixbuf:2.0 + x11-libs/gtk+:3 + x11-libs/libnotify + x11-libs/libX11 + x11-libs/libXcomposite + x11-libs/libXdamage + x11-libs/libXext + x11-libs/libXfixes + x11-libs/libXrandr + x11-libs/libXtst + x11-libs/libxcb + x11-libs/libxkbcommon + x11-libs/pango +" + +WORK="${WORKBASE}" + +pkg_setup() { + exdirectory --allow /opt +} + +src_unpack() { + default + unpack ./data.tar.xz +} + +src_install() { + edo mkdir -p "${IMAGE}/opt/YouTube Music" + edo cp -r "opt/YouTube Music/." "${IMAGE}/opt/YouTube Music/" + + dodir /usr/$(exhost --target)/bin + dosym "../../../opt/YouTube Music/youtube-music" /usr/$(exhost --target)/bin/${PN} + + insinto /usr/share/applications + doins usr/share/applications/com.github.th-ch.youtube-music.desktop + + local size + for size in 16 24 32 48 64 128 256 512 1024; do + insinto /usr/share/icons/hicolor/${size}x${size}/apps + doins "usr/share/icons/hicolor/${size}x${size}/apps/youtube-music.png" + done +} + +pkg_postinst() { + freedesktop-desktop_pkg_postinst + gtk-icon-cache_pkg_postinst +} + +pkg_postrm() { + freedesktop-desktop_pkg_postrm + gtk-icon-cache_pkg_postrm +} diff --git a/packages/net-firewall/ufw/files/systemd/ufw.service b/packages/net-firewall/ufw/files/systemd/ufw.service new file mode 100644 index 0000000..39c9843 --- /dev/null +++ b/packages/net-firewall/ufw/files/systemd/ufw.service @@ -0,0 +1,18 @@ +[Unit] +Description=Uncomplicated firewall +Documentation=man:ufw(8) +DefaultDependencies=no +Before=network-pre.target sysinit.target +Wants=network-pre.target +After=systemd-sysctl.service +Conflicts=iptables.service ip6tables.service nftables.service firewalld.service +ConditionPathExists=/etc/ufw/ufw.conf + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/share/ufw/ufw-init start +ExecStop=/usr/share/ufw/ufw-init stop + +[Install] +WantedBy=multi-user.target diff --git a/packages/net-firewall/ufw/files/ufw-0.36-bash-completion.patch b/packages/net-firewall/ufw/files/ufw-0.36-bash-completion.patch new file mode 100644 index 0000000..927af24 --- /dev/null +++ b/packages/net-firewall/ufw/files/ufw-0.36-bash-completion.patch @@ -0,0 +1,16 @@ +--- a/shell-completion/bash 2018-12-14 21:25:55.000000000 +0300 ++++ b/shell-completion/bash 2019-03-21 01:26:46.152181981 +0300 +@@ -57,7 +57,6 @@ + echo "numbered verbose" + } + +-_have ufw && + _ufw() + { + cur=${COMP_WORDS[COMP_CWORD]} +@@ -91,4 +90,4 @@ + fi + } + +-_have ufw && complete -F _ufw ufw ++complete -F _ufw ufw diff --git a/packages/net-firewall/ufw/files/ufw-0.36.1-distutils.patch b/packages/net-firewall/ufw/files/ufw-0.36.1-distutils.patch new file mode 100644 index 0000000..fe7ab38 --- /dev/null +++ b/packages/net-firewall/ufw/files/ufw-0.36.1-distutils.patch @@ -0,0 +1,14 @@ +https://src.fedoraproject.org/rpms/ufw/raw/rawhide/f/ufw-0.35-distutils-setuptools.patch +--- a/setup.py ++++ b/setup.py +@@ -26,8 +26,8 @@ + # + + from __future__ import print_function +-from distutils.command.install import install as _install +-from distutils.core import setup ++from setuptools.command.install import install as _install ++from setuptools import setup + import errno + import os + import re diff --git a/packages/net-firewall/ufw/files/ufw-0.36.1-dont-check-iptables.patch b/packages/net-firewall/ufw/files/ufw-0.36.1-dont-check-iptables.patch new file mode 100644 index 0000000..ae0c955 --- /dev/null +++ b/packages/net-firewall/ufw/files/ufw-0.36.1-dont-check-iptables.patch @@ -0,0 +1,50 @@ +--- a/setup.py 2022-06-27 17:33:18.043794598 +0300 ++++ b/setup.py 2022-06-27 18:15:18.384463926 +0300 +@@ -256,46 +256,7 @@ + os.unlink(os.path.join('staging', 'ufw-init')) + os.unlink(os.path.join('staging', 'ufw-init-functions')) + +-iptables_exe = '' +-iptables_dir = '' +- +-for e in ['iptables']: +- # Historically iptables was in /sbin, then later also symlinked from +- # /usr/sbin/iptables to /sbin/iptables. Debian bullseye moves iptables +- # to /usr/sbin with no symlink in /sbin except on upgrades. To accomodate +- # buildds that may still have the old iptables, search /usr/sbin first +- for dir in ['/usr/sbin', '/sbin', '/usr/bin', '/bin', '/usr/local/sbin', \ +- '/usr/local/bin']: +- if e == "iptables": +- if os.path.exists(os.path.join(dir, e)): +- iptables_dir = dir +- iptables_exe = os.path.join(iptables_dir, "iptables") +- print("Found '%s'" % iptables_exe) +- else: +- continue +- +- if iptables_exe != "": +- break +- +- +-if iptables_exe == '': +- print("ERROR: could not find required binary 'iptables'", file=sys.stderr) +- sys.exit(1) +- +-for e in ['ip6tables', 'iptables-restore', 'ip6tables-restore']: +- if not os.path.exists(os.path.join(iptables_dir, e)): +- print("ERROR: could not find required binary '%s'" % (e), file=sys.stderr) +- sys.exit(1) +- +-(rc, out) = cmd([iptables_exe, '-V']) +-if rc != 0: +- raise OSError(errno.ENOENT, "Could not find version for '%s'" % \ +- (iptables_exe)) +-version = re.sub('^v', '', re.split('\s', str(out))[1]) +-print("Found '%s' version '%s'" % (iptables_exe, version)) +-if version < "1.4": +- print("WARN: version '%s' has limited IPv6 support. See README for details." % (version), file=sys.stderr) +- ++iptables_dir = '/sbin' + setup (name='ufw', + version=ufw_version, + description='front-end for Linux firewalling', diff --git a/packages/net-firewall/ufw/files/ufw-0.36.1-move-path.patch b/packages/net-firewall/ufw/files/ufw-0.36.1-move-path.patch new file mode 100644 index 0000000..8ace1ed --- /dev/null +++ b/packages/net-firewall/ufw/files/ufw-0.36.1-move-path.patch @@ -0,0 +1,124 @@ +--- a/doc/ufw-framework.8 2021-09-19 04:19:03.000000000 +0300 ++++ b/doc/ufw-framework.8 2022-06-27 17:14:11.292890569 +0300 +@@ -18,7 +18,7 @@ + parameters and configuration of IPv6. The framework consists of the following + files: + .TP +-#STATE_PREFIX#/ufw\-init ++#SHARE_DIR#/ufw\-init + initialization script + .TP + #CONFIG_PREFIX#/ufw/before.init +@@ -47,7 +47,7 @@ + + .SH "BOOT INITIALIZATION" + .PP +-\fBufw\fR is started on boot with #STATE_PREFIX#/ufw\-init. This script is a ++\fBufw\fR is started on boot with #SHARE_DIR#/ufw\-init. This script is a + standard SysV style initscript used by the \fBufw\fR command and should not be + modified. The #CONFIG_PREFIX#/before.init and #CONFIG_PREFIX#/after.init + scripts may be used to perform any additional firewall configuration that is +--- a/setup.py 2021-09-19 04:19:01.000000000 +0300 ++++ b/setup.py 2022-06-27 17:33:18.043794598 +0300 +@@ -54,7 +54,7 @@ + return + + real_confdir = os.path.join('/etc') +- real_statedir = os.path.join('/lib', 'ufw') ++ real_statedir = os.path.join('/etc', 'ufw', 'user') + real_prefix = self.prefix + if self.home != None: + real_confdir = self.home + real_confdir +@@ -131,14 +131,20 @@ + self.copy_file('doc/ufw.8', manpage) + self.copy_file('doc/ufw-framework.8', manpage_f) + +- # Install state files and helper scripts ++ # Install state files + statedir = real_statedir + if self.root != None: + statedir = self.root + real_statedir + self.mkpath(statedir) + +- init_helper = os.path.join(statedir, 'ufw-init') +- init_helper_functions = os.path.join(statedir, 'ufw-init-functions') ++ # Install helper scripts ++ sharedir = real_sharedir ++ if self.root != None: ++ sharedir = self.root + real_sharedir ++ self.mkpath(sharedir) ++ ++ init_helper = os.path.join(sharedir, 'ufw-init') ++ init_helper_functions = os.path.join(sharedir, 'ufw-init-functions') + self.copy_file('src/ufw-init', init_helper) + self.copy_file('src/ufw-init-functions', init_helper_functions) + +@@ -219,14 +225,19 @@ + f]) + + subprocess.call(["sed", ++ "-i", ++ "s%#SHARE_DIR#%" + real_sharedir + "%g", ++ f]) ++ ++ subprocess.call(["sed", + "-i", + "s%#VERSION#%" + ufw_version + "%g", + f]) + + # Install pristine copies of rules files +- sharedir = real_sharedir +- if self.root != None: +- sharedir = self.root + real_sharedir ++ #sharedir = real_sharedir ++ #if self.root != None: ++ # sharedir = self.root + real_sharedir + rulesdir = os.path.join(sharedir, 'iptables') + self.mkpath(rulesdir) + for f in [ before_rules, after_rules, \ +--- a/src/backend_iptables.py 2021-09-19 04:19:01.000000000 +0300 ++++ b/src/backend_iptables.py 2022-06-27 17:44:24.880445896 +0300 +@@ -37,6 +37,8 @@ + + files = {} + config_dir = _findpath(ufw.common.config_dir, datadir) ++ state_dir = _findpath(ufw.common.state_dir, datadir) ++ share_dir = _findpath(ufw.common.share_dir, datadir) + + files['rules'] = os.path.join(config_dir, 'ufw/user.rules') + files['before_rules'] = os.path.join(config_dir, 'ufw/before.rules') +@@ -48,8 +50,7 @@ + # the lock files (ufw.common.state_dir, aka /lib/ufw), but when set, + # ufw-init is in rootdir/lib/ufw (ro) and the lockfiles in + # datadir/lib/ufw (rw) +- files['init'] = os.path.join(_findpath(ufw.common.state_dir, rootdir), +- 'ufw-init') ++ files['init'] = os.path.join(share_dir, 'ufw-init') + + ufw.backend.UFWBackend.__init__(self, "iptables", dryrun, files, + rootdir=rootdir, datadir=datadir) +--- a/src/ufw-init 2021-09-19 03:50:19.000000000 +0300 ++++ b/src/ufw-init 2022-06-27 17:48:34.352545026 +0300 +@@ -31,10 +31,10 @@ + fi + export DATA_DIR="$datadir" + +-if [ -s "${rootdir}#STATE_PREFIX#/ufw-init-functions" ]; then +- . "${rootdir}#STATE_PREFIX#/ufw-init-functions" ++if [ -s "${rootdir}#SHARE_DIR#/ufw-init-functions" ]; then ++ . "${rootdir}#SHARE_DIR#/ufw-init-functions" + else +- echo "Could not find ${rootdir}#STATE_PREFIX#/ufw-init-functions (aborting)" ++ echo "Could not find ${rootdir}#SHARE_DIR#/ufw-init-functions (aborting)" + exit 1 + fi + +@@ -83,7 +83,7 @@ + fi + ;; + *) +- echo "Usage: #STATE_PREFIX#/ufw-init {start|stop|restart|force-reload|force-stop|flush-all|status}" ++ echo "Usage: #SHARE_DIR#/ufw-init {start|stop|restart|force-reload|force-stop|flush-all|status}" + exit 1 + ;; + esac diff --git a/packages/net-firewall/ufw/files/ufw-0.36.1-shebang.patch b/packages/net-firewall/ufw/files/ufw-0.36.1-shebang.patch new file mode 100644 index 0000000..aaafaac --- /dev/null +++ b/packages/net-firewall/ufw/files/ufw-0.36.1-shebang.patch @@ -0,0 +1,15 @@ +--- a/setup.py 2019-03-21 01:51:55.751971770 +0300 ++++ b/setup.py 2019-03-21 01:54:40.142513567 +0300 +@@ -121,12 +121,6 @@ + for f in [ script, manpage, manpage_f ]: + self.mkpath(os.path.dirname(f)) + +- # update the interpreter to that of the one the user specified for setup +- print("Updating staging/ufw to use %s" % (sys.executable)) +- subprocess.call(["sed", +- "-i", +- "1s%^#.*python.*%#! /usr/bin/env " + sys.executable + "%g", +- 'staging/ufw']) + self.copy_file('staging/ufw', script) + self.copy_file('doc/ufw.8', manpage) + self.copy_file('doc/ufw-framework.8', manpage_f) diff --git a/packages/net-firewall/ufw/ufw-0.36.2.exheres-0 b/packages/net-firewall/ufw/ufw-0.36.2.exheres-0 new file mode 100644 index 0000000..c55c871 --- /dev/null +++ b/packages/net-firewall/ufw/ufw-0.36.2.exheres-0 @@ -0,0 +1,57 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require python [ blacklist="2 3.9 3.10" multibuild=false ] systemd-service + +SUMMARY="Uncomplicated firewall frontend for iptables" +HOMEPAGE="https://launchpad.net/ufw" +DOWNLOADS="${HOMEPAGE}/${PV%.*}/${PV}/+download/${PNV}.tar.gz" + +LICENCES="GPL-3" +SLOT="0" +PLATFORMS="~amd64" +RESTRICT="test" + +DEPENDENCIES=" + build: + dev-python/setuptools[python_abis:*(-)?] + sys-devel/gettext + + run: + net-firewall/iptables +" + +DEFAULT_SRC_PREPARE_PATCHES=( + "${FILES}/${PN}-0.36.1-move-path.patch" + "${FILES}/${PN}-0.36.1-dont-check-iptables.patch" + "${FILES}/${PN}-0.36.1-shebang.patch" + "${FILES}/${PN}-0.36-bash-completion.patch" + "${FILES}/${PN}-0.36.1-distutils.patch" +) + +src_compile() { + edo "${PYTHON}" -B setup.py install --prefix=/usr \ + --root="${WORK}/staging-root" --install-lib="$(python_get_sitedir)" \ + --no-compile +} + +src_install() { + edo cp -R "${WORK}/staging-root/." "${IMAGE}/" + + dodir /usr/$(exhost --target)/bin + edo mv "${IMAGE}/usr/sbin/ufw" "${IMAGE}/usr/$(exhost --target)/bin/ufw" + edo rmdir "${IMAGE}/usr/sbin" + edo sed -i "1c#! /usr/$(exhost --target)/bin/python$(python_get_abi)" \ + "${IMAGE}/usr/$(exhost --target)/bin/ufw" + + insinto /usr/share/bash-completion/completions + newins shell-completion/bash ufw + install_systemd_files + keepdir /etc/ufw/user + dodoc README + python_bytecompile +} + +pkg_postinst() { + ewarn "Allow remote SSH before enabling UFW; enabling it can interrupt your connection." +} diff --git a/packages/net-im/ayugram-desktop/ayugram-desktop-7.2.9.exheres-0 b/packages/net-im/ayugram-desktop/ayugram-desktop-7.2.9.exheres-0 new file mode 100644 index 0000000..11d8283 --- /dev/null +++ b/packages/net-im/ayugram-desktop/ayugram-desktop-7.2.9.exheres-0 @@ -0,0 +1,72 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cmake +require flag-o-matic + +SUMMARY="Telegram desktop client with customization and Ghost mode" +HOMEPAGE="https://github.com/AyuGram/AyuGramDesktop" +DOWNLOADS="https://github.com/AyuGram/AyuGramDesktop/releases/download/v${PV}/AyuGramDesktop-${PV}-full.tar.gz -> ${PNV}-full.tar.gz" + +LICENCES="BSD-3 GPL-3+ LGPL-2+" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + dev-lang/python:*[>=3] + dev-libs/fmt + dev-libs/tlottie + gnome-desktop/gobject-introspection + virtual/pkg-config + x11-libs/qtshadertools:6 + + build+run: + dev-cpp/ada + dev-libs/boost + dev-libs/glib:2 + dev-libs/libfido2 + dev-libs/openssl + dev-libs/protobuf[>=21.12] + gnome-bindings/glibmm:2.68[>=2.77] + media-libs/libjpeg-turbo + media-libs/libvpx + media-libs/openal + media-libs/openh264 + media-libs/opus + media-libs/rnnoise + media-libs/tg_owt + media/ffmpeg[>=6] + net-libs/tde2e + sys-apps/systemd + sys-libs/zlib + x11-libs/pango + x11-libs/qtbase:6[>=6.5][gui] + x11-libs/qtsvg:6[>=6.5] + + run: + x11-libs/qtimageformats:6[webp] +" + +CMAKE_SOURCE="${WORKBASE}/AyuGramDesktop-${PV}-full" + +CMAKE_SRC_CONFIGURE_PARAMS=( + -DQT_VERSION_MAJOR=6 + -DDESKTOP_APP_USE_PACKAGED=ON + -DDESKTOP_APP_DISABLE_AUTOUPDATE=ON + -DDESKTOP_APP_DISABLE_CRASH_REPORTS=ON + -DDESKTOP_APP_DISABLE_QT_PLUGINS=ON + -DQSB_EXECUTABLE=/usr/$(exhost --target)/lib/qt6/bin/qsb + -DTDESKTOP_API_ID=611335 + -DTDESKTOP_API_HASH=d524b414d21f4d37f08684c1df41ac9c +) + +src_configure() { + append-cxxflags -DNDEBUG + cmake_src_configure +} + +src_install() { + cmake_src_install + dodoc "${CMAKE_SOURCE}/LICENSE" "${CMAKE_SOURCE}/LEGAL" +} diff --git a/packages/net-im/discord/discord-1.0.161.exheres-0 b/packages/net-im/discord/discord-1.0.161.exheres-0 new file mode 100644 index 0000000..403a5ca --- /dev/null +++ b/packages/net-im/discord/discord-1.0.161.exheres-0 @@ -0,0 +1,120 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require freedesktop-desktop freedesktop-mime gtk-icon-cache + +SUMMARY="Voice, video, and text chat client" +HOMEPAGE="https://discord.com/" + +DISCORD_BASE="https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/${PV}" +UPDATE_DISABLER_COMMIT="2f26748a667045d26bc19841f1a731b4be7a7514" +DISCORD_MODULES=( + discord_desktop_core discord_erlpack discord_spellcheck discord_utils + discord_voice discord_zstd discord_rpc discord_game_utils discord_krisp +) + +DOWNLOADS=" + ${DISCORD_BASE}/full.distro -> ${PNV}.distro + https://github.com/flathub/com.discordapp.Discord/raw/${UPDATE_DISABLER_COMMIT}/disable-breaking-updates.py + -> ${PN}-disable-breaking-updates-${UPDATE_DISABLER_COMMIT}.py +" +for module in "${DISCORD_MODULES[@]}"; do + DOWNLOADS+=" ${DISCORD_BASE}/${module}/1/full.distro -> ${PNV}-${module}.distro " +done + +LICENCES="all-rights-reserved" +SLOT="0" +PLATFORMS="~amd64" +RESTRICT="mirror strip test" + +DEPENDENCIES=" + build: + app-arch/brotli + app-arch/zip + + run: + dev-lang/python:*[>=3] + dev-libs/at-spi2-core + dev-libs/expat + dev-libs/glib:2 + dev-libs/nspr + dev-libs/nss + media-libs/fontconfig + net-print/cups + sys-apps/dbus + sys-apps/util-linux + sys-libs/wayland + sys-sound/alsa-lib + x11-dri/libdrm + x11-dri/mesa + x11-libs/cairo + x11-libs/gdk-pixbuf:2.0 + x11-libs/gtk+:3 + x11-libs/libX11 + x11-libs/libXcomposite + x11-libs/libXdamage + x11-libs/libXext + x11-libs/libXfixes + x11-libs/libXrandr + x11-libs/libxcb + x11-libs/libxkbcommon + x11-libs/libxshmfence + x11-libs/pango +" + +WORK="${WORKBASE}/discord" + +pkg_setup() { + exdirectory --allow /opt +} + +src_unpack() { + edo mkdir -p "${WORK}" + edo brotli -d "${FETCHEDDIR}/${PNV}.distro" -o "${WORKBASE}/${PNV}.tar" + edo tar -xf "${WORKBASE}/${PNV}.tar" -C "${WORK}" + edo rm "${WORKBASE}/${PNV}.tar" + + local module + for module in "${DISCORD_MODULES[@]}"; do + edo mkdir -p "${WORKBASE}/${module}" + edo brotli -d "${FETCHEDDIR}/${PNV}-${module}.distro" -o "${WORKBASE}/${module}.tar" + edo tar -xf "${WORKBASE}/${module}.tar" -C "${WORKBASE}/${module}" + edo pushd "${WORKBASE}/${module}/files" + edo zip -qr "${WORK}/files/resources/bootstrap/${module}.zip" . + edo popd + edo rm -r "${WORKBASE}/${module}" "${WORKBASE}/${module}.tar" + done +} + +src_prepare() { + edo cp "${FILES}/manifest.json" "${WORK}/files/resources/bootstrap/manifest.json" +} + +src_install() { + edo mkdir -p "${IMAGE}/opt/discord" + edo cp -r "${WORK}/files/." "${IMAGE}/opt/discord/" + edo chmod 4755 "${IMAGE}/opt/discord/chrome-sandbox" + + insinto /opt/discord + newins "${FETCHEDDIR}/${PN}-disable-breaking-updates-${UPDATE_DISABLER_COMMIT}.py" disable-breaking-updates.py + edo chmod 755 "${IMAGE}/opt/discord/disable-breaking-updates.py" + + insinto /usr/share/icons/hicolor/256x256/apps + newins "${WORK}/files/discord.png" discord.png + insinto /usr/share/applications + doins "${FILES}/discord.desktop" + exeinto /usr/$(exhost --target)/bin + newexe "${FILES}/discord-launcher" discord +} + +pkg_postinst() { + freedesktop-mime_pkg_postinst + freedesktop-desktop_pkg_postinst + gtk-icon-cache_pkg_postinst +} + +pkg_postrm() { + freedesktop-mime_pkg_postrm + freedesktop-desktop_pkg_postrm + gtk-icon-cache_pkg_postrm +} diff --git a/packages/net-im/discord/files/discord-launcher b/packages/net-im/discord/files/discord-launcher new file mode 100644 index 0000000..4c7a969 --- /dev/null +++ b/packages/net-im/discord/files/discord-launcher @@ -0,0 +1,4 @@ +#!/bin/sh + +/usr/bin/env python3 /opt/discord/disable-breaking-updates.py +exec /opt/discord/Discord "$@" diff --git a/packages/net-im/discord/files/discord.desktop b/packages/net-im/discord/files/discord.desktop new file mode 100644 index 0000000..1418496 --- /dev/null +++ b/packages/net-im/discord/files/discord.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Discord +Comment=Voice, video, and text chat +Exec=discord --url -- %u +Icon=discord +Type=Application +Categories=Network;InstantMessaging; +StartupWMClass=discord +MimeType=x-scheme-handler/discord; diff --git a/packages/net-im/discord/files/manifest.json b/packages/net-im/discord/files/manifest.json new file mode 100644 index 0000000..1359c6e --- /dev/null +++ b/packages/net-im/discord/files/manifest.json @@ -0,0 +1,11 @@ +{ + "discord_desktop_core": 1, + "discord_erlpack": 1, + "discord_spellcheck": 1, + "discord_utils": 1, + "discord_voice": 1, + "discord_zstd": 1, + "discord_rpc": 1, + "discord_game_utils": 1, + "discord_krisp": 1 +} diff --git a/packages/net-im/viber/viber-27.3.0.2.exheres-0 b/packages/net-im/viber/viber-27.3.0.2.exheres-0 new file mode 100644 index 0000000..535de62 --- /dev/null +++ b/packages/net-im/viber/viber-27.3.0.2.exheres-0 @@ -0,0 +1,122 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require freedesktop-desktop freedesktop-mime gtk-icon-cache + +SUMMARY="Desktop messenger for text, voice, and video calls" +HOMEPAGE="https://www.viber.com/en/" +DOWNLOADS="https://download.cdn.viber.com/cdn/desktop/Linux/viber.deb -> ${PNV}.deb" + +LICENCES="all-rights-reserved" +SLOT="0" +PLATFORMS="~amd64" +RESTRICT="mirror strip test" + +DEPENDENCIES=" + run: + app-arch/brotli + app-arch/bzip2 + app-arch/snappy + app-arch/zstd + app-crypt/krb5 + app-crypt/libb2 + dev-libs/double-conversion + dev-libs/expat + dev-libs/glib:2 + dev-libs/gnutls + dev-libs/libglvnd + dev-libs/libxml2:2.0 + dev-libs/libxslt + dev-libs/nspr + dev-libs/nss + dev-libs/openssl:3 + media-libs/fontconfig + media-libs/freetype + media-libs/OpenJPEG:2 + media-libs/libpng + media-libs/libvorbis + media-libs/opus + media-sound/pulseaudio + net-libs/libssh + sys-apps/dbus + sys-libs/libgomp + sys-libs/libinput + sys-libs/zlib + sys-libs/wayland + sys-sound/alsa-lib + x11-dri/libdrm + x11-dri/mesa + x11-libs/libICE + x11-libs/libSM + x11-libs/libX11 + x11-libs/libXext + x11-libs/libXfixes + x11-libs/libXi + x11-libs/libXrandr + x11-libs/libXrender + x11-libs/libXScrnSaver + x11-libs/libXtst + x11-libs/libxcb + x11-libs/libxkbcommon + x11-libs/libxkbfile + x11-libs/libva + x11-libs/libvdpau + x11-libs/libxshmfence + x11-libs/mtdev + x11-utils/xcb-util + x11-utils/xcb-util-cursor + x11-utils/xcb-util-image + x11-utils/xcb-util-keysyms + x11-utils/xcb-util-renderutil + x11-utils/xcb-util-wm +" + +WORK="${WORKBASE}" + +pkg_setup() { + exdirectory --allow /opt +} + +src_unpack() { + local checksum + checksum=$(sha256sum "${FETCHEDDIR}/${PNV}.deb") || die "Cannot checksum Viber archive" + [[ ${checksum%% *} == 961534dc0cb920006ec7ae8108b0e1ba09a476eef1e13b4b370a79cd52dd20f3 ]] || + die "Viber archive changed; check version before updating checksum" + + default + unpack ./data.tar.xz +} + +src_install() { + edo mkdir -p "${IMAGE}/opt/viber" + edo cp -a opt/viber/. "${IMAGE}/opt/viber/" + + insinto /usr/share/applications + doins usr/share/applications/viber.desktop + + insinto /usr/share/pixmaps + doins usr/share/pixmaps/viber.png + insinto /usr/share/icons/hicolor/scalable/apps + newins usr/share/icons/hicolor/scalable/apps/Viber.svg viber.svg + + local size + for size in 16 24 32 48 64 96 128 256; do + insinto /usr/share/icons/hicolor/${size}x${size}/apps + newins "usr/share/viber/${size}x${size}.png" viber.png + done + + dodir /usr/$(exhost --target)/bin + dosym /opt/viber/Viber /usr/$(exhost --target)/bin/viber +} + +pkg_postinst() { + freedesktop-mime_pkg_postinst + freedesktop-desktop_pkg_postinst + gtk-icon-cache_pkg_postinst +} + +pkg_postrm() { + freedesktop-mime_pkg_postrm + freedesktop-desktop_pkg_postrm + gtk-icon-cache_pkg_postrm +} diff --git a/packages/net-im/zoom/files/zoom.desktop b/packages/net-im/zoom/files/zoom.desktop new file mode 100644 index 0000000..c5be36c --- /dev/null +++ b/packages/net-im/zoom/files/zoom.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Zoom +Comment=Video conferencing +Exec=zoom %U +Icon=zoom +Type=Application +Categories=Network;VideoConference; +MimeType=x-scheme-handler/zoommtg;x-scheme-handler/zoomus;application/x-zoom; diff --git a/packages/net-im/zoom/files/zoom.svg b/packages/net-im/zoom/files/zoom.svg new file mode 100644 index 0000000..30d5a2d --- /dev/null +++ b/packages/net-im/zoom/files/zoom.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/net-im/zoom/zoom-7.2.1.5760.exheres-0 b/packages/net-im/zoom/zoom-7.2.1.5760.exheres-0 new file mode 100644 index 0000000..9e1fd0c --- /dev/null +++ b/packages/net-im/zoom/zoom-7.2.1.5760.exheres-0 @@ -0,0 +1,86 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require freedesktop-desktop freedesktop-mime gtk-icon-cache + +SUMMARY="Video conferencing client" +HOMEPAGE="https://www.zoom.com/" +DOWNLOADS="https://zoom.us/client/${PV}/zoom_x86_64.tar.xz -> ${PNV}.tar.xz" + +LICENCES="all-rights-reserved" +SLOT="0" +PLATFORMS="~amd64" +RESTRICT="mirror strip test" + +DEPENDENCIES=" + run: + app-arch/zstd + app-crypt/krb5 + dev-libs/at-spi2-core + dev-libs/expat + dev-libs/glib:2 + dev-libs/libglvnd + dev-libs/nspr + dev-libs/nss + media-libs/fontconfig + media-libs/freetype + media-sound/pulseaudio + net-print/cups + sys-apps/dbus + sys-apps/util-linux + sys-libs/libatomic + sys-libs/wayland + sys-libs/zlib + sys-sound/alsa-lib + x11-dri/libdrm + x11-dri/mesa + x11-libs/cairo + x11-libs/libX11 + x11-libs/libXcomposite + x11-libs/libXdamage + x11-libs/libXext + x11-libs/libXfixes + x11-libs/libXrandr + x11-libs/libXtst + x11-libs/libxcb + x11-libs/libxkbcommon + x11-libs/pango + x11-utils/xcb-util + x11-utils/xcb-util-cursor + x11-utils/xcb-util-image + x11-utils/xcb-util-keysyms + x11-utils/xcb-util-renderutil + x11-utils/xcb-util-wm +" + +WORK="${WORKBASE}/zoom" + +pkg_setup() { + exdirectory --allow /opt +} + +src_install() { + edo mkdir -p "${IMAGE}/opt/zoom" + edo cp -a "${WORK}/." "${IMAGE}/opt/zoom/" + edo find "${IMAGE}/opt/zoom" -depth -type d -empty -delete + + insinto /usr/share/applications + doins "${FILES}/zoom.desktop" + insinto /usr/share/icons/hicolor/scalable/apps + newins "${FILES}/zoom.svg" zoom.svg + + dodir /usr/$(exhost --target)/bin + dosym /opt/zoom/ZoomLauncher /usr/$(exhost --target)/bin/zoom +} + +pkg_postinst() { + freedesktop-mime_pkg_postinst + freedesktop-desktop_pkg_postinst + gtk-icon-cache_pkg_postinst +} + +pkg_postrm() { + freedesktop-mime_pkg_postrm + freedesktop-desktop_pkg_postrm + gtk-icon-cache_pkg_postrm +} diff --git a/packages/net-libs/tde2e/tde2e-1.8.49.exheres-0 b/packages/net-libs/tde2e/tde2e-1.8.49.exheres-0 new file mode 100644 index 0000000..e8aeaee --- /dev/null +++ b/packages/net-libs/tde2e/tde2e-1.8.49.exheres-0 @@ -0,0 +1,33 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cmake + +TDLIB_COMMIT="51743dfd01dff6179e2d8f7095729caa4e2222e9" + +SUMMARY="End-to-end encryption library from TDLib" +HOMEPAGE="https://github.com/tdlib/td" +DOWNLOADS="https://github.com/tdlib/td/archive/${TDLIB_COMMIT}.tar.gz -> ${PNV}.tar.gz" + +LICENCES="Boost-1.0" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + dev-util/gperf + + build+run: + dev-libs/openssl + sys-libs/zlib +" + +CMAKE_SOURCE="${WORKBASE}/td-${TDLIB_COMMIT}" + +CMAKE_SRC_CONFIGURE_PARAMS=( + -DTD_E2E_ONLY=ON + -DTD_INSTALL_STATIC_LIBRARIES=ON + -DTD_INSTALL_SHARED_LIBRARIES=OFF + -DTD_ENABLE_LTO=OFF + -DBUILD_TESTING=OFF +) diff --git a/packages/net-misc/rustdesk/rustdesk-1.5.0.exheres-0 b/packages/net-misc/rustdesk/rustdesk-1.5.0.exheres-0 new file mode 100644 index 0000000..a5a11c4 --- /dev/null +++ b/packages/net-misc/rustdesk/rustdesk-1.5.0.exheres-0 @@ -0,0 +1,86 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require freedesktop-desktop freedesktop-mime gtk-icon-cache \ + systemd-service [ systemd_files=[ usr/share/rustdesk/files/systemd/rustdesk.service ] ] + +SUMMARY="Remote desktop client and server" +HOMEPAGE="https://rustdesk.com/" +DOWNLOADS="https://github.com/rustdesk/rustdesk/releases/download/${PV}/${PNV}-x86_64.deb" + +LICENCES="AGPL-3" +SLOT="0" +PLATFORMS="~amd64" +RESTRICT="mirror strip test" + +DEPENDENCIES=" + run: + dev-libs/glib:2 + media-libs/gstreamer:1.0 + media-plugins/gst-plugins-base:1.0 + media-sound/pulseaudio + media/pipewire[gstreamer] + net-misc/curl + sys-apps/dbus + sys-apps/systemd + sys-libs/wayland + sys-sound/alsa-lib + x11-apps/xdotool + x11-libs/cairo + x11-libs/gdk-pixbuf:2.0 + x11-libs/gtk+:3 + x11-libs/libX11 + x11-libs/libXfixes + x11-libs/libXtst + x11-libs/libva[X] + x11-libs/libxcb + x11-libs/libxkbcommon + x11-libs/pango +" + +WORK="${WORKBASE}" + +src_unpack() { + default + unpack ./data.tar.xz +} + +src_prepare() { + default + edo sed -i '/^ExecStop=pkill -f /d; /^# kill --tray and --server both/d; /^# below two lines do not work/d; /^#ExecStop=/d' \ + usr/share/rustdesk/files/systemd/rustdesk.service + edo sed -i "s@/usr/bin/rustdesk@/usr/$(exhost --target)/bin/rustdesk@" \ + usr/share/rustdesk/files/systemd/rustdesk.service +} + +src_compile() { + : +} + +src_install() { + edo mkdir -p "${IMAGE}/usr/share/rustdesk" + edo cp -a usr/share/rustdesk/. "${IMAGE}/usr/share/rustdesk/" + + insinto /usr/share/applications + doins usr/share/applications/{rustdesk,rustdesk-link}.desktop + insinto /usr/share/icons/hicolor/256x256/apps + doins usr/share/icons/hicolor/256x256/apps/rustdesk.png + insinto /usr/share/icons/hicolor/scalable/apps + doins usr/share/icons/hicolor/scalable/apps/rustdesk.svg + + dodir /usr/$(exhost --target)/bin + dosym /usr/share/rustdesk/rustdesk /usr/$(exhost --target)/bin/rustdesk + install_systemd_files +} + +pkg_postinst() { + freedesktop-mime_pkg_postinst + freedesktop-desktop_pkg_postinst + gtk-icon-cache_pkg_postinst +} + +pkg_postrm() { + freedesktop-mime_pkg_postrm + freedesktop-desktop_pkg_postrm + gtk-icon-cache_pkg_postrm +} diff --git a/packages/net-vpn/mullvad-vpn/mullvad-vpn-2026.5.exheres-0 b/packages/net-vpn/mullvad-vpn/mullvad-vpn-2026.5.exheres-0 new file mode 100644 index 0000000..4a3da5b --- /dev/null +++ b/packages/net-vpn/mullvad-vpn/mullvad-vpn-2026.5.exheres-0 @@ -0,0 +1,62 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +SUMMARY="Mullvad VPN desktop client and daemon" +HOMEPAGE="https://mullvad.net/" + +DOWNLOADS="https://cdn.mullvad.net/app/desktop/releases/${PV}/MullvadVPN-${PV}_amd64.deb -> ${PNV}.deb" + +LICENCES="GPL-3" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + app-arch/xz + + run: + dev-libs/at-spi2-core + sys-sound/alsa-lib + x11-dri/mesa + x11-dri/libdrm + sys-apps/dbus +" + +WORK="${WORKBASE}" + +pkg_setup() { + exdirectory --allow /opt +} + +src_unpack() { + local checksum + checksum=$(sha256sum "${FETCHEDDIR}/${PNV}.deb") || die "Cannot checksum Mullvad archive" + [[ ${checksum%% *} == aa6bd00452588597f50e8ca2f02bb91e9c295c4f01b0ae907354552e7428e7ab ]] || + die "Mullvad archive changed; check version before updating checksum" + + default + unpack ./data.tar.xz +} + +src_install() { + edo mkdir -p "${IMAGE}/opt" "${IMAGE}/usr" + edo cp -rT "${WORK}/opt" "${IMAGE}/opt" + edo cp -rT "${WORK}/usr" "${IMAGE}/usr" + + edo mkdir -p "${IMAGE}/usr/${CHOST}" + edo mv "${IMAGE}/usr/bin" "${IMAGE}/usr/${CHOST}/" + + if [[ -d "${IMAGE}/usr/lib" ]]; then + edo mv "${IMAGE}/usr/lib" "${IMAGE}/usr/${CHOST}/" + fi + + local helper="${IMAGE}/usr/${CHOST}/bin/mullvad-exclude" + [[ -f ${helper} && ! -L ${helper} ]] || die "Mullvad exclusion helper is missing or not a regular file" + edo chown root:root "${helper}" + edo chmod 4755 "${helper}" + + edo mkdir -p "${IMAGE}/usr/share/zsh/site-functions" + edo mv "${IMAGE}/usr/local/share/zsh/site-functions/_mullvad" "${IMAGE}/usr/share/zsh/site-functions/" + edo rmdir "${IMAGE}/usr/local/share/zsh/site-functions" "${IMAGE}/usr/local/share/zsh" \ + "${IMAGE}/usr/local/share" "${IMAGE}/usr/local" +} diff --git a/packages/sys-kernel/kernel-cachyos/kernel-cachyos-7.2.9-r1.exheres-0 b/packages/sys-kernel/kernel-cachyos/kernel-cachyos-7.2.9-r1.exheres-0 new file mode 100644 index 0000000..0fb85d0 --- /dev/null +++ b/packages/sys-kernel/kernel-cachyos/kernel-cachyos-7.2.9-r1.exheres-0 @@ -0,0 +1,110 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +SUMMARY="Prebuilt CachyOS Linux kernel with matching module headers" +HOMEPAGE="https://github.com/CachyOS/linux-cachyos" + +MY_RELEASE="${PV}-2" +MY_KERNEL="linux-cachyos-${MY_RELEASE}-x86_64_v3.pkg.tar.zst" +MY_HEADERS="linux-cachyos-headers-${MY_RELEASE}-x86_64_v3.pkg.tar.zst" +KERNEL_RELEASE="${MY_RELEASE}-cachyos" +DOWNLOADS=" + https://mirror.cachyos.org/repo/x86_64_v3/cachyos-v3/${MY_KERNEL} + https://mirror.cachyos.org/repo/x86_64_v3/cachyos-v3/${MY_HEADERS} +" + +LICENCES="GPL-2" +SLOT="0" +PLATFORMS="~amd64" +RESTRICT="mirror strip test" + +DEPENDENCIES=" + build: + app-arch/zstd + + build+run: + sys-apps/kmod[zstd] + + run: + app-arch/zstd + dev-lang/clang + dev-lang/llvm + dev-libs/openssl + dev-libs/xxHash + dev-util/dwarves + dev-util/elfutils + sys-apps/systemd + sys-boot/dracut + sys-devel/binutils + sys-devel/lld + sys-libs/zlib +" + +WORK="${WORKBASE}" + +pkg_pretend() { + if exhost --is-native -q && [[ ${ROOT} == / ]]; then + local flags flag + flags=$(grep -m1 '^flags[[:space:]]*:' /proc/cpuinfo) || die "Cannot check CPU features" + for flag in avx avx2 bmi1 bmi2 f16c fma movbe sse4_1 sse4_2 popcnt abm; do + [[ " ${flags} " == *" ${flag} "* ]] || die "CachyOS x86-64-v3 kernel requires CPU feature ${flag}" + done + fi +} + +src_unpack() { + local archive checksum expected + for archive in "${MY_KERNEL}" "${MY_HEADERS}"; do + case ${archive} in + "${MY_KERNEL}") expected=1cb3b27ee69d0ef743d8c30e5811e128376ecf23bc62536405f4e86ffedf1086 ;; + "${MY_HEADERS}") expected=ba982020097ef03b43ae5644e3ce6ec0942c468032f62d15b47d6be475b7d2af ;; + esac + checksum=$(sha256sum "${FETCHEDDIR}/${archive}") || die "Cannot checksum ${archive}" + [[ ${checksum%% *} == ${expected} ]] || die "CachyOS archive changed: ${archive}" + done + + edo mkdir -p "${WORK}/binary" "${WORK}/headers" + edo tar --zstd -xf "${FETCHEDDIR}/${MY_KERNEL}" -C "${WORK}/binary" + edo tar --zstd -xf "${FETCHEDDIR}/${MY_HEADERS}" -C "${WORK}/headers" +} + +src_compile() { + : +} + +src_install() { + local modules="/usr/$(exhost --target)/lib/modules/${KERNEL_RELEASE}" + local binary="${WORK}/binary/usr/lib/modules/${KERNEL_RELEASE}" + local headers="${WORK}/headers/usr/lib/modules/${KERNEL_RELEASE}" + + [[ -f ${binary}/vmlinuz && -d ${binary}/kernel && -f ${headers}/build/.config && + -f ${headers}/build/Module.symvers && -f ${headers}/build/System.map && + -d ${headers}/vdso ]] || die "CachyOS kernel or matching headers are missing" + + dodir "${modules}" + edo cp -a "${binary}/." "${IMAGE}${modules}/" + edo cp -a "${headers}/." "${IMAGE}${modules}/" + edo depmod -b "${IMAGE}" -m "/usr/$(exhost --target)/lib/modules" -a "${KERNEL_RELEASE}" +} + +pkg_postinst() { + local image="/usr/lib/modules/${KERNEL_RELEASE}/vmlinuz" + local retry="kernel-install add ${KERNEL_RELEASE} ${image}" + + if [[ ${ROOT} != / ]] || ! exhost --is-native -q; then + elog "Boot setup skipped for non-native or alternate-root installation." + elog "On the target system, run: ${retry}" + elif ! mountpoint -q /boot || ! command -v kernel-install >/dev/null || + ! command -v dracut >/dev/null; then + ewarn "Boot setup skipped: /boot must be mounted and kernel-install and dracut available." + ewarn "After fixing boot setup, run: ${retry}" + elif ! kernel-install add "${KERNEL_RELEASE}" "${image}"; then + ewarn "Boot entry or initramfs creation failed; check output above." + ewarn "After fixing boot setup, run: ${retry}" + else + elog "CachyOS boot entry and initramfs installed via kernel-install." + fi + + ewarn "With Secure Boot enabled, kernel-install does not guarantee a trusted kernel signature." + ewarn "Verify signing and boot entry before booting CachyOS; keep your working kernel as fallback." +} diff --git a/packages/sys-kernel/scx-loader/scx-loader-1.1.3.exheres-0 b/packages/sys-kernel/scx-loader/scx-loader-1.1.3.exheres-0 new file mode 100644 index 0000000..ef2a6f3 --- /dev/null +++ b/packages/sys-kernel/scx-loader/scx-loader-1.1.3.exheres-0 @@ -0,0 +1,53 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cargo [ rust_minimum_version=1.95 ] github [ user=sched-ext tag=v${PV} ] \ + systemd-service [ systemd_files=[ services/scx_loader.service ] ] + +SUMMARY="D-Bus loader and controls for sched_ext schedulers" + +LICENCES="GPL-2" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES+=" + run: + sys-kernel/scx[~${PV}] + sys-apps/dbus + sys-apps/systemd + sys-auth/polkit:1 +" + +CARGO_SRC_COMPILE_PARAMS=( -p scx_loader -p scxctl -p scxtui ) +CARGO_SRC_TEST_PARAMS=( "${CARGO_SRC_COMPILE_PARAMS[@]}" ) + +src_prepare() { + default + edo sed -i "s@/usr/bin/scx_loader@/usr/$(exhost --target)/bin/scx_loader@" \ + services/scx_loader.service services/org.scx.Loader.service + edo sed -i "/^ExecStart=/i Environment=\"PATH=/usr/$(exhost --target)/bin:/usr/bin:/bin\"" \ + services/scx_loader.service +} + +src_install() { + exeinto /usr/$(exhost --target)/bin + local binary + for binary in scx_loader scxctl scxtui ; do + doexe "target/$(rust_target_arch_name)/release/${binary}" + done + + install_systemd_files + + insinto /usr/share/dbus-1/system-services + doins services/org.scx.Loader.service + insinto /usr/share/dbus-1/system.d + doins configs/org.scx.Loader.conf + insinto /usr/share/dbus-1/interfaces + doins configs/org.scx.Loader.xml + insinto /usr/share/polkit-1/actions + doins configs/org.scx.Loader.policy + insinto /usr/share/scx_loader + newins configs/scx_loader.toml config.toml + + emagicdocs +} diff --git a/packages/sys-kernel/scx/scx-1.1.3.exheres-0 b/packages/sys-kernel/scx/scx-1.1.3.exheres-0 new file mode 100644 index 0000000..8412c9e --- /dev/null +++ b/packages/sys-kernel/scx/scx-1.1.3.exheres-0 @@ -0,0 +1,84 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cargo [ rust_minimum_version=1.94.1 ] github [ user=sched-ext tag=v${PV} ] \ + systemd-service [ systemd_files=[ services/scx.service ] ] + +SUMMARY="sched_ext BPF schedulers and tools" + +LICENCES="GPL-2" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES+=" + build: + dev-lang/clang[>=16] + dev-util/pkgconf + + build+run: + dev-util/elfutils + dev-libs/libbpf[>=1.7.0] + sys-libs/libseccomp + sys-libs/zlib + app-arch/zstd + + run: + sys-apps/systemd +" + +SCX_BINARIES=( + scx_beerland scx_bpfland scx_cake scx_chaos scx_cosmos scx_flash + scx_forge scx_lavd scx_layered scx_mitosis scx_p2dq + scx_pandemonium scx_rustland scx_rusty scx_tickless + scxtop vmlinux_docify +) + +CARGO_SRC_COMPILE_PARAMS=() +for scheduler in "${SCX_BINARIES[@]}" ; do + CARGO_SRC_COMPILE_PARAMS+=( -p "${scheduler}" ) +done +CARGO_SRC_TEST_PARAMS=( "${CARGO_SRC_COMPILE_PARAMS[@]}" ) + +export BPF_CLANG="/usr/$(exhost --target)/bin/clang" +export LIBBPF_SYS_LIBRARY_PATH="/usr/$(exhost --target)/lib" + +src_prepare() { + default + + local manifest count=0 + for manifest in rust/scx_arena/scx_arena/Cargo.toml \ + rust/scx_bpf_compat/Cargo.toml rust/scx_cargo/Cargo.toml \ + rust/scx_rustland_core/Cargo.toml rust/scx_userspace_arena/Cargo.toml \ + rust/scx_utils/Cargo.toml scheds/rust/scx_*/Cargo.toml \ + tools/scxtop/Cargo.toml ; do + [[ -f ${manifest} ]] || die "Missing Cargo manifest: ${manifest}" + local before after + before=$(grep -Ec '^libbpf-(rs|cargo|sys) = ' "${manifest}") || : + [[ ${before} -gt 0 ]] || die "Unexpected libbpf declarations in ${manifest}" + edo sed -i -E \ + -e 's/^(libbpf-(rs|cargo|sys) = )"(=[^"]+)"$/\1{ version = "\3", default-features = false }/' \ + -e 's/^(libbpf-(rs|cargo|sys) = \{ version = "[^"]+") \}$/\1, default-features = false }/' \ + "${manifest}" + after=$(grep -Ec '^libbpf-(rs|cargo|sys) = \{ version = "[^"]+", default-features = false \}$' "${manifest}") || : + [[ ${before} -eq ${after} ]] || die "Could not disable libbpf defaults in ${manifest}" + (( count += before )) + done + [[ ${count} -eq 26 ]] || die "Expected 26 libbpf dependency declarations, found ${count}" + + edo sed -i "/^ExecStart=/i Environment=\"PATH=/usr/$(exhost --target)/bin:/usr/bin:/bin\"" \ + services/scx.service +} + +src_install() { + exeinto /usr/$(exhost --target)/bin + local binary + for binary in "${SCX_BINARIES[@]}" ; do + doexe "target/$(rust_target_arch_name)/release/${binary}" + done + + install_systemd_files + insinto /etc/default + doins services/scx + + emagicdocs +} diff --git a/packages/wayland-apps/fnott/fnott-1.8.0.exheres-0 b/packages/wayland-apps/fnott/fnott-1.8.0.exheres-0 new file mode 100644 index 0000000..c9b829c --- /dev/null +++ b/packages/wayland-apps/fnott/fnott-1.8.0.exheres-0 @@ -0,0 +1,45 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require meson [ meson_minimum_version=0.59.0 ] +require systemd-service + +SUMMARY="Keyboard driven and lightweight Wayland notification daemon" +HOMEPAGE="https://codeberg.org/dnkl/fnott" +DOWNLOADS="${HOMEPAGE}/releases/download/${PV}/${PNV}.tar.gz" + +LICENCES="MIT ZLIB" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + app-doc/scdoc + dev-libs/tllist[>=1.0.1] + sys-libs/wayland-protocols[>=1.32] + + build+run: + media-libs/fcft[<4.0.0&>=3.0.0] + media-libs/fontconfig + media-libs/freetype + media-libs/libpng:= + media-libs/nanosvg + sys-apps/dbus + sys-libs/wayland + x11-libs/pixman:1 +" + +MESON_SOURCE="${WORKBASE}/${PNV}" +MESON_SRC_CONFIGURE_PARAMS=( + -Ddocs=enabled + -Dsystemd-units-dir="${SYSTEMDUSERUNITDIR}" + -Dsystem-nanosvg=enabled +) + +src_install() { + meson_src_install + edo mkdir -p "${IMAGE}${SYSTEMDUSERUNITDIR}" + edo mv "${IMAGE}/usr/lib/systemd/user/fnott.service" "${IMAGE}${SYSTEMDUSERUNITDIR}/" + edo rmdir "${IMAGE}/usr/lib/systemd/user" "${IMAGE}/usr/lib/systemd" "${IMAGE}/usr/lib" + edo rm -r "${IMAGE}/usr/share/doc/${PN}" +} diff --git a/packages/wayland-apps/fuzzel/fuzzel-1.15.0.exheres-0 b/packages/wayland-apps/fuzzel/fuzzel-1.15.0.exheres-0 new file mode 100644 index 0000000..a8dacf5 --- /dev/null +++ b/packages/wayland-apps/fuzzel/fuzzel-1.15.0.exheres-0 @@ -0,0 +1,62 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require meson + +SUMMARY="Application launcher for wlroots based Wayland compositors" +HOMEPAGE="https://codeberg.org/dnkl/fuzzel" +DOWNLOADS="${HOMEPAGE}/releases/download/${PV}/${PNV}.tar.gz" + +LICENCES="MIT" +SLOT="0" +PLATFORMS="~amd64" +MYOPTIONS=" + png [[ + description = [ Build with PNG icon support ] + ]] + + svg [[ + description = [ Build with SVG icon support ] + ]] +" + +DEPENDENCIES=" + build: + app-doc/scdoc + dev-libs/tllist[>=1.0.1] + sys-libs/wayland-protocols[>=1.41] + + build+run: + media-libs/fcft[<4.0.0&>=3.3.1] + media-libs/fontconfig + sys-libs/wayland + x11-libs/libxkbcommon + x11-libs/pixman:1[>=0.46.0] + + png? ( + media-libs/libpng + ) + + svg? ( + media-libs/nanosvg + ) +" + +src_configure() { + meson_src_configure \ + -Denable-cairo=disabled \ + -Dpng-backend="$(option png libpng none)" \ + -Dsvg-backend="$(option svg nanosvg none)" \ + -Dsystem-nanosvg="$(option svg enabled disabled)" +} + +src_install() { + meson_src_install + edo rm -rf "${IMAGE}/usr/share/doc/fuzzel" +} + +pkg_postinst() { + einfo "An example configuration file is installed at" + einfo "/etc/xdg/fuzzel/fuzzel.ini" + einfo "Copy it to ~/.config/fuzzel/ and edit it as needed." +} diff --git a/packages/wayland-apps/wlsunset/wlsunset-0.4.0.exheres-0 b/packages/wayland-apps/wlsunset/wlsunset-0.4.0.exheres-0 new file mode 100644 index 0000000..ddf4f04 --- /dev/null +++ b/packages/wayland-apps/wlsunset/wlsunset-0.4.0.exheres-0 @@ -0,0 +1,24 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require meson [ meson_minimum_version=0.56.0 ] + +SUMMARY="Day/night gamma adjustments for Wayland" +HOMEPAGE="https://sr.ht/~kennylevinsen/wlsunset/" +DOWNLOADS="https://git.sr.ht/~kennylevinsen/wlsunset/archive/${PV}.tar.gz -> ${PNV}.tar.gz" + +LICENCES="MIT" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + app-doc/scdoc[>=1.9.7] + sys-libs/wayland-protocols + + build+run: + sys-libs/wayland +" + +MESON_SOURCE="${WORKBASE}/${PNV}" +MESON_SRC_CONFIGURE_PARAMS=( -Dwerror=false -Dman-pages=enabled ) diff --git a/packages/x11-apps/flameshot/flameshot-14.0.0.exheres-0 b/packages/x11-apps/flameshot/flameshot-14.0.0.exheres-0 new file mode 100644 index 0000000..480ffff --- /dev/null +++ b/packages/x11-apps/flameshot/flameshot-14.0.0.exheres-0 @@ -0,0 +1,65 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cmake + +SUMMARY="Powerful yet simple to use screenshot software" +HOMEPAGE="https://flameshot.org https://github.com/flameshot-org/flameshot" + +DOWNLOADS=" + https://github.com/flameshot-org/flameshot/archive/refs/tags/v${PV}.tar.gz + -> ${PNV}.tar.gz +" + +LICENCES=" + Apache-2.0 + FAL-1.3 + GPL-3+ +" +SLOT="0" +PLATFORMS="~amd64" + +MYOPTIONS=" + imgur [[ + description = [ Enable Imgur uploader ] + ]] + + wayland [[ + description = [ Enable Wayland clipboard support ] + ]] +" + +DEPENDENCIES=" + build: + x11-libs/qttools:6[linguist] + + build+run: + dev-libs/kdsingleapplication + gui-libs/qt-color-widgets + sys-apps/dbus + x11-libs/qtbase:6[gui] + x11-libs/qtsvg:6 + + wayland? ( + kde-frameworks/kguiaddons:6[wayland] + ) +" + +src_configure() { + CMAKE_SRC_CONFIGURE_PARAMS=( + -DCMAKE_DISABLE_FIND_PACKAGE_Git=ON + -DDISABLE_UPDATE_CHECKER=ON + -DENABLE_CACHE=0 + -DENABLE_IMGUR="$(option imgur ON OFF)" + -DFETCHCONTENT_TRY_FIND_PACKAGE_MODE=ALWAYS + -DUSE_BUNDLED_KDSINGLEAPPLICATION=OFF + -DUSE_KDSINGLEAPPLICATION=ON + -DUSE_WAYLAND_CLIPBOARD="$(option wayland ON OFF)" + ) + + cmake_src_configure +} + +src_install() { + cmake_src_install +} diff --git a/packages/x11-apps/qt6ct/files/qt6ct-0.9-qt-6.10.patch b/packages/x11-apps/qt6ct/files/qt6ct-0.9-qt-6.10.patch new file mode 100644 index 0000000..69e52d0 --- /dev/null +++ b/packages/x11-apps/qt6ct/files/qt6ct-0.9-qt-6.10.patch @@ -0,0 +1,22 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -24,7 +24,7 @@ + + add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x060000 -DUSE_WIDGETS) + +-find_package(Qt6 REQUIRED COMPONENTS BuildInternals Core Widgets OPTIONAL_COMPONENTS LinguistTools) ++find_package(Qt6 REQUIRED COMPONENTS BuildInternals Core Widgets GuiPrivate WidgetsPrivate OPTIONAL_COMPONENTS LinguistTools) + + get_target_property(QT_QTPATHS_EXECUTABLE Qt6::qtpaths IMPORTED_LOCATION) + +--- a/src/qt6ct-qtplugin/qt6ctplatformtheme.h ++++ b/src/qt6ct-qtplugin/qt6ctplatformtheme.h +@@ -30,7 +30,7 @@ + #define QT6CTPLATFORMTHEME_H + + #include +-#include ++#include + #include + #include + #include diff --git a/packages/x11-apps/qt6ct/qt6ct-0.9.exheres-0 b/packages/x11-apps/qt6ct/qt6ct-0.9.exheres-0 new file mode 100644 index 0000000..2dbea7d --- /dev/null +++ b/packages/x11-apps/qt6ct/qt6ct-0.9.exheres-0 @@ -0,0 +1,40 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require cmake + +SUMMARY="Qt6 configuration tool for desktops without Qt integration" +HOMEPAGE="https://www.opencode.net/trialuser/qt6ct/" +DOWNLOADS="https://www.opencode.net/api/v4/projects/5459/packages/generic/qt6ct/${PV}/${PNV}.tar.xz" + +LICENCES="BSD-2" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + x11-libs/qttools:6[linguist] + + build+run: + x11-libs/qtbase:6[gui] + + run: + x11-libs/qtsvg:6 +" + +DEFAULT_SRC_PREPARE_PATCHES=( + "${FILES}/${PNV}-qt-6.10.patch" +) + +src_install() { + cmake_src_install + + hereenvd 98${PN} < +# Distributed under the terms of the GNU General Public License v2 + +SUMMARY="Command-line X11 automation and libxdo library" +HOMEPAGE="https://github.com/jordansissel/xdotool" +DOWNLOADS="${HOMEPAGE}/archive/refs/tags/v${PV}.tar.gz -> ${PNV}.tar.gz" + +LICENCES="BSD-3" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + dev-util/pkgconf + dev-lang/perl + + build+run: + x11-libs/libX11 + x11-libs/libXinerama + x11-libs/libXtst + x11-libs/libxkbcommon +" + +MAKE_PARAMS=( + PREFIX=/usr + INSTALLBIN=/usr/$(exhost --target)/bin + INSTALLLIB=/usr/$(exhost --target)/lib + INSTALLPC=/usr/$(exhost --target)/lib/pkgconfig + INSTALLINCLUDE=/usr/$(exhost --target)/include + INSTALLMAN=/usr/share/man +) + +src_prepare() { + default + edo sed -i "s@pkg-config --@/usr/$(exhost --target)/bin/$(exhost --tool-prefix)pkg-config --@g" Makefile +} + +src_compile() { + emake "${MAKE_PARAMS[@]}" +} + +src_install() { + emake "${MAKE_PARAMS[@]}" DESTDIR="${IMAGE}" LDCONFIG=: install + dodoc COPYRIGHT +} diff --git a/packages/x11-misc/nwg-look/nwg-look-1.1.2.exheres-0 b/packages/x11-misc/nwg-look/nwg-look-1.1.2.exheres-0 new file mode 100644 index 0000000..a3f74be --- /dev/null +++ b/packages/x11-misc/nwg-look/nwg-look-1.1.2.exheres-0 @@ -0,0 +1,66 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +SUMMARY="GTK3 settings editor adapted to work in wlroots-based compositors" +HOMEPAGE="https://github.com/nwg-piotr/nwg-look" + +DOWNLOADS=" + https://github.com/nwg-piotr/nwg-look/archive/refs/tags/v${PV}.tar.gz + -> ${PNV}.tar.gz +" + +LICENCES="MIT" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + dev-lang/go[>=1.26] + + build+run: + dev-libs/glib + media-libs/fontconfig + media-libs/freetype + x11-libs/harfbuzz + x11-misc/xcur2png + x11-libs/cairo + x11-libs/gdk-pixbuf + x11-libs/gtk+:3 + x11-libs/pango +" + +src_prepare() { + default + + export GOMODCACHE="${WORKBASE}/gomodcache" + export GOCACHE="${WORKBASE}/gocache" + + esandbox disable_net + edo go mod download + esandbox enable_net +} + +src_compile() { + export GOMODCACHE="${WORKBASE}/gomodcache" + export GOCACHE="${WORKBASE}/gocache" + + emake build +} + +src_install() { + insinto /usr/share/nwg-look + doins stuff/main.glade + doins -r langs + + insinto /usr/share/pixmaps + doins stuff/nwg-look.svg + + insinto /usr/share/applications + doins stuff/nwg-look.desktop + + dobin bin/nwg-look + + docinto nwg-look + dodoc README.md + dodoc LICENSE +} diff --git a/packages/x11-misc/xcur2png/xcur2png-0.7.1.exheres-0 b/packages/x11-misc/xcur2png/xcur2png-0.7.1.exheres-0 new file mode 100644 index 0000000..f388b3b --- /dev/null +++ b/packages/x11-misc/xcur2png/xcur2png-0.7.1.exheres-0 @@ -0,0 +1,34 @@ +# Copyright 2026 Gurov +# Distributed under the terms of the GNU General Public License v2 + +require autotools [ supported_autoconf=[ 2.7 ] supported_automake=[ 1.18 ] ] flag-o-matic + +SUMMARY="Convert X cursors to PNG images" +HOMEPAGE="https://github.com/eworm-de/xcur2png" + +DOWNLOADS=" + https://github.com/eworm-de/xcur2png/releases/download/${PV}/${PNV}.tar.gz +" + +LICENCES="GPL-3" +SLOT="0" +PLATFORMS="~amd64" + +DEPENDENCIES=" + build: + dev-util/pkgconf + + build+run: + media-libs/libpng + x11-libs/libXcursor +" + +src_prepare() { + default + eautoreconf +} + +src_configure() { + append-cflags "-std=gnu89" + default +} -- cgit v1.3