summaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/app-admin/ananicy-cpp/ananicy-cpp-1.2.0.exheres-047
-rw-r--r--packages/app-admin/ananicy-rules-cachyos/ananicy-rules-cachyos-1.1.49.exheres-027
-rw-r--r--packages/app-admin/sudo-rs/files/sudo-rs-0.2.15-pam-service.patch11
-rw-r--r--packages/app-admin/sudo-rs/files/sudoers-rs11
-rw-r--r--packages/app-admin/sudo-rs/sudo-rs-0.2.15.exheres-060
-rw-r--r--packages/app-crypt/veracrypt/files/veracrypt-1.26.29-argon2-avx2-avx512f.patch98
-rw-r--r--packages/app-crypt/veracrypt/files/veracrypt-1.26.29-fix-nosse2.patch31
-rw-r--r--packages/app-crypt/veracrypt/files/veracrypt-1.26.29-fix-release-date.patch19
-rw-r--r--packages/app-crypt/veracrypt/veracrypt-1.26.29.exheres-0101
-rw-r--r--packages/app-misc/cachyos-settings/cachyos-settings-1.4.1.exheres-087
-rw-r--r--packages/app-misc/dmemcg-booster/dmemcg-booster-0.1.3.exheres-040
-rw-r--r--packages/app-misc/ente-auth/ente-auth-4.4.25.exheres-076
-rw-r--r--packages/app-misc/ente-auth/files/enteauth-launcher3
-rw-r--r--packages/app-misc/nvchecker/nvchecker-2.22.exheres-019
-rw-r--r--packages/app-misc/protonplus/protonplus-0.6.8.exheres-055
-rw-r--r--packages/app-misc/shuck/shuck-0.2.4.exheres-010
-rw-r--r--packages/app-misc/ydotool/ydotool-1.0.4.exheres-029
-rw-r--r--packages/app-virtualization/bubblejail/bubblejail-0.10.4.exheres-073
-rw-r--r--packages/app-virtualization/distrobox/distrobox-1.8.2.5.exheres-054
-rw-r--r--packages/dev-cpp/ada/ada-4.0.0.exheres-019
-rw-r--r--packages/dev-libs/libbpf/libbpf-1.8.0.exheres-033
-rw-r--r--packages/dev-libs/tlottie/files/tlottie-0_pre20260911-tdesktop-compat.patch160
-rw-r--r--packages/dev-libs/tlottie/tlottie-0_pre20260911.exheres-030
-rw-r--r--packages/dev-python/structlog/structlog-26.1.0.exheres-019
-rw-r--r--packages/games-misc/hydra-launcher/hydra-launcher-4.1.6.exheres-087
-rw-r--r--packages/games-misc/prismlauncher/prismlauncher-11.1.1.exheres-063
-rw-r--r--packages/gui-libs/adwaita-qt/adwaita-qt-1.4.2.exheres-021
-rw-r--r--packages/gui-libs/qt-color-widgets/qt-color-widgets-3.0.0.exheres-043
-rw-r--r--packages/media-libs/libmysofa/libmysofa-1.3.5.exheres-036
-rw-r--r--packages/media-libs/nanosvg/files/nanosvg.patch248
-rw-r--r--packages/media-libs/nanosvg/nanosvg-0.1.0.1.exheres-035
-rw-r--r--packages/media-libs/tg_owt/files/tg_owt-0_pre20260803-abseil.patch159
-rw-r--r--packages/media-libs/tg_owt/tg_owt-0_pre20260803.exheres-090
-rw-r--r--packages/media-libs/zita-convolver/files/zita-convolver-4.0.3-makefile.patch23
-rw-r--r--packages/media-libs/zita-convolver/zita-convolver-4.0.3.exheres-033
-rw-r--r--packages/media-sound/easyeffects/easyeffects-8.3.0.exheres-061
-rw-r--r--packages/media-sound/pear-desktop/pear-desktop-3.12.0.exheres-084
-rw-r--r--packages/net-firewall/ufw/files/systemd/ufw.service18
-rw-r--r--packages/net-firewall/ufw/files/ufw-0.36-bash-completion.patch16
-rw-r--r--packages/net-firewall/ufw/files/ufw-0.36.1-distutils.patch14
-rw-r--r--packages/net-firewall/ufw/files/ufw-0.36.1-dont-check-iptables.patch50
-rw-r--r--packages/net-firewall/ufw/files/ufw-0.36.1-move-path.patch124
-rw-r--r--packages/net-firewall/ufw/files/ufw-0.36.1-shebang.patch15
-rw-r--r--packages/net-firewall/ufw/ufw-0.36.2.exheres-057
-rw-r--r--packages/net-im/ayugram-desktop/ayugram-desktop-7.2.9.exheres-072
-rw-r--r--packages/net-im/discord/discord-1.0.161.exheres-0120
-rw-r--r--packages/net-im/discord/files/discord-launcher4
-rw-r--r--packages/net-im/discord/files/discord.desktop9
-rw-r--r--packages/net-im/discord/files/manifest.json11
-rw-r--r--packages/net-im/viber/viber-27.3.0.2.exheres-0122
-rw-r--r--packages/net-im/zoom/files/zoom.desktop8
-rw-r--r--packages/net-im/zoom/files/zoom.svg22
-rw-r--r--packages/net-im/zoom/zoom-7.2.1.5760.exheres-086
-rw-r--r--packages/net-libs/tde2e/tde2e-1.8.49.exheres-033
-rw-r--r--packages/net-misc/rustdesk/rustdesk-1.5.0.exheres-086
-rw-r--r--packages/net-vpn/mullvad-vpn/mullvad-vpn-2026.5.exheres-062
-rw-r--r--packages/sys-kernel/kernel-cachyos/kernel-cachyos-7.2.9-r1.exheres-0110
-rw-r--r--packages/sys-kernel/scx-loader/scx-loader-1.1.3.exheres-053
-rw-r--r--packages/sys-kernel/scx/scx-1.1.3.exheres-084
-rw-r--r--packages/wayland-apps/fnott/fnott-1.8.0.exheres-045
-rw-r--r--packages/wayland-apps/fuzzel/fuzzel-1.15.0.exheres-062
-rw-r--r--packages/wayland-apps/wlsunset/wlsunset-0.4.0.exheres-024
-rw-r--r--packages/x11-apps/flameshot/flameshot-14.0.0.exheres-065
-rw-r--r--packages/x11-apps/qt6ct/files/qt6ct-0.9-qt-6.10.patch22
-rw-r--r--packages/x11-apps/qt6ct/qt6ct-0.9.exheres-040
-rw-r--r--packages/x11-apps/xdotool/xdotool-4.20260303.1.exheres-045
-rw-r--r--packages/x11-misc/nwg-look/nwg-look-1.1.2.exheres-066
-rw-r--r--packages/x11-misc/xcur2png/xcur2png-0.7.1.exheres-034
68 files changed, 3674 insertions, 0 deletions
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 <thuggerthugger1@duck.com>
+# 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 <string_view>/a #include <unistd.h>' src/platform/linux/debug.cpp
+ edo sed -i '/#include <thread>/a #include <unistd.h>' src/platform/linux/process.cpp
+ edo sed -i '/#include <systemd\/sd-login.h>/a #include <unistd.h>' src/platform/systemd/service.cpp
+ edo sed -i '/#include <cstdlib>/a #include <cstdint>' src/platform/linux/backtrace.cpp
+ edo sed -i '/#include <cstdlib>/a #include <cstring>' src/utility/argument_parsing/argument.cpp
+ edo sed -i '/#include <cerrno>/a #include <cstring>' 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 <thuggerthugger1@duck.com>
+# 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<PamContext> {
+ 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 <thuggerthugger1@duck.com>
+# 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 $(<F)
+@@ -24,6 +24,10 @@ clean:
+ @echo Compiling $(<F)
+ $(CC) $(CFLAGS) -O0 -c $< -o $@
+
++%.osse2: %.c
++ @echo Compiling $(<F)
++ $(CC) $(CFLAGS) -msse2 -mno-avx2 -mno-avx512f -c $< -o $@
++
+ %.osse41: %.c
+ @echo Compiling $(<F)
+ $(CC) $(CFLAGS) -mssse3 -msse4.1 -c $< -o $@
+@@ -42,7 +46,7 @@ clean:
+
+ %.oavx2: %.c
+ @echo Compiling $(<F)
+- $(CC) $(CFLAGS) -mavx2 -c $< -o $@
++ $(CC) $(CFLAGS) -mavx2 -mno-avx512f -c $< -o $@
+
+ %.oarmv8crypto: %.c
+ @echo Compiling $(<F)
+@@ -122,7 +126,7 @@ TR_SED_BIN := tr '\n' ' ' | tr -s ' ' ',' | sed -e 's/^,//g' -e 's/,$$/n/' | tr
+
+
+ # Dependencies
+--include $(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)
++-include $(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)
+
+
+ # Deterministic static library: the 'D' modifier zeroes member mtime/uid/gid
+@@ -135,8 +139,8 @@ TR_SED_BIN := tr '\n' ' ' | tr -s ' ' ',' | sed -e 's/^,//g' -e 's/,$$/n/' | tr
+ AR_DETERMINISTIC := $(shell t=$$(mktemp); rm -f $$t.a; $(AR) Drc $$t.a $$t >/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 <stddef.h>
+-#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 <mounir.idrassi@amcrypto.jp>
+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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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<Vec2> {
+ 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<ParsedItem> {
+
+ 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<ParsedItem> {
+ 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<usize>| -> 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <AlbrechtS.svn@fltk.example.org>
+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 <thuggerthugger1@duck.com>
+# 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
+ $<BUILD_INTERFACE:${libabsl_loc}>
+ $<INSTALL_INTERFACE:${webrtc_includedir}/third_party/abseil-cpp>
+ )
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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_3_36)">
+<path d="M32 16C32 17.7107 31.8646 19.3846 31.5939 21.0216C30.72 26.4369 26.4369 30.7323 21.0216 31.5939C19.3846 31.8523 17.7107 32 16 32C14.2893 32 12.6154 31.8646 10.9784 31.5939C5.56308 30.72 1.26769 26.4369 0.406154 21.0216C0.135384 19.3846 0 17.7107 0 16C0 14.2893 0.135384 12.6154 0.406154 10.9784C1.28 5.56308 5.56308 1.26769 10.9784 0.406154C12.6154 0.135384 14.2893 0 16 0C17.7107 0 19.3846 0.135384 21.0216 0.406154C26.4369 1.28 30.7323 5.56308 31.5939 10.9784C31.8646 12.6154 32 14.2893 32 16Z" fill="url(#paint0_linear_3_36)"/>
+<path d="M9.55076 18.4492H5.61231C5.35385 18.4492 5.1077 18.3138 4.98462 18.08C4.84924 17.8092 4.89847 17.4892 5.1077 17.28L7.85232 14.5354H5.88308C5.34154 14.5354 4.89847 14.0923 4.89847 13.5507H8.54157C8.80001 13.5507 9.04613 13.6861 9.16926 13.92C9.30463 14.1907 9.25538 14.5107 9.04613 14.72L6.30157 17.4646H8.57844C9.12001 17.4646 9.55076 17.9077 9.55076 18.4492ZM25.1938 13.4769C24.6277 13.4769 24.1231 13.7231 23.7661 14.1169C23.4216 13.7231 22.9046 13.4769 22.3384 13.4769C21.2923 13.4769 20.4308 14.3754 20.4308 15.4216V18.4492C20.9723 18.4492 21.4154 18.0061 21.4154 17.4646V15.4092C21.4154 14.9046 21.8093 14.4739 22.3139 14.4616C22.8431 14.4369 23.2861 14.8677 23.2861 15.3969V17.4769C23.2861 18.0184 23.7293 18.4616 24.2708 18.4616V15.4216C24.2708 14.9169 24.6646 14.4861 25.1693 14.4739C25.6984 14.4492 26.1416 14.88 26.1416 15.4092V17.4892C26.1416 18.0307 26.5846 18.4739 27.1261 18.4739V15.4461C27.1016 14.3754 26.24 13.4769 25.1938 13.4769ZM14.5108 16C14.5108 17.3907 13.3784 18.5231 11.9877 18.5231C10.5969 18.5231 9.46463 17.3907 9.46463 16C9.46463 14.6092 10.5969 13.4769 11.9877 13.4769C13.3784 13.4769 14.5108 14.6092 14.5108 16ZM13.5261 16C13.5261 15.1507 12.8369 14.4616 11.9877 14.4616C11.1384 14.4616 10.4493 15.1507 10.4493 16C10.4493 16.8492 11.1384 17.5384 11.9877 17.5384C12.8369 17.5384 13.5261 16.8492 13.5261 16ZM19.9508 16C19.9508 17.3907 18.8184 18.5231 17.4277 18.5231C16.0369 18.5231 14.9046 17.3907 14.9046 16C14.9046 14.6092 16.0369 13.4769 17.4277 13.4769C18.8184 13.4769 19.9508 14.6092 19.9508 16ZM18.9661 16C18.9661 15.1507 18.2769 14.4616 17.4277 14.4616C16.5784 14.4616 15.8893 15.1507 15.8893 16C15.8893 16.8492 16.5784 17.5384 17.4277 17.5384C18.2769 17.5384 18.9661 16.8492 18.9661 16Z" fill="white"/>
+</g>
+<defs>
+<linearGradient id="paint0_linear_3_36" x1="7.57312" y1="30.5958" x2="24.4269" y2="1.40423" gradientUnits="userSpaceOnUse">
+<stop offset="5.79195e-07" stop-color="#0845BF"/>
+<stop offset="0.1911" stop-color="#0950DE"/>
+<stop offset="0.3823" stop-color="#0B59F6"/>
+<stop offset="0.5" stop-color="#0B5CFF"/>
+<stop offset="0.6732" stop-color="#0E5EFE"/>
+<stop offset="0.7774" stop-color="#1665FC"/>
+<stop offset="0.8633" stop-color="#246FF9"/>
+<stop offset="0.9388" stop-color="#387FF4"/>
+<stop offset="1" stop-color="#4F90EE"/>
+</linearGradient>
+<clipPath id="clip0_3_36">
+<rect width="32" height="32" fill="white"/>
+</clipPath>
+</defs>
+</svg> \ 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <qpa/qplatformtheme.h>
+-#include <private/qgenericunixthemes_p.h>
++#include <private/qgenericunixtheme_p.h>
+ #include <QObject>
+ #include <QFont>
+ #include <QPalette>
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 <thuggerthugger1@duck.com>
+# 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} <<EOF
+QT_QPA_PLATFORMTHEME=qt5ct
+EOF
+}
+
+pkg_postinst() {
+ einfo "QT_QPA_PLATFORMTHEME=qt5ct enables qt6ct after re-login."
+ einfo "Avoid qt6ct on desktops with their own Qt integration, such as Plasma."
+}
diff --git a/packages/x11-apps/xdotool/xdotool-4.20260303.1.exheres-0 b/packages/x11-apps/xdotool/xdotool-4.20260303.1.exheres-0
new file mode 100644
index 0000000..e4c5ecf
--- /dev/null
+++ b/packages/x11-apps/xdotool/xdotool-4.20260303.1.exheres-0
@@ -0,0 +1,45 @@
+# Copyright 2026 Gurov <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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 <thuggerthugger1@duck.com>
+# 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
+}