# Copyright 2026 Gentoo Authors # Distributed under the terms of the MIT License EAPI=8 GITHUB_REPOSITORY="c0deJedi/nbd-vram" GITHUB_COMMIT="e2f1144f93c6f508b01a2ff435509e27853c0632" inherit toolchain-funcs systemd udev github-archive DESCRIPTION="Use your NVIDIA GPU's VRAM as swap space on Linux via NBD" LICENSE="MIT" SLOT="0" KEYWORDS="~amd64" IUSE="systemd" # libcuda.so is dlopened at runtime from nvidia-drivers RDEPEND=" virtual/udev sys-block/nbd x11-drivers/nvidia-drivers systemd? ( sys-apps/systemd ) !systemd? ( virtual/cron ) " src_compile() { $(tc-getCC) ${CFLAGS} ${CPPFLAGS} -o nbd-vram nbd-vram.c ${LDFLAGS} -ldl -lpthread || die } src_install() { # Service files reference /usr/local/bin — fix to /usr/bin for Gentoo FHS sed -i 's|/usr/local/bin/|/usr/bin/|g' systemd/*.service || die # Main daemon and init-system-agnostic helpers dobin nbd-vram dobin nbd-vram-connect.sh dobin nbd-vram-disconnect.sh if use systemd; then dobin nbd-vram-sleep.sh dobin nbd-vram-power-check.sh systemd_dounit systemd/vram-swap-nbd.service systemd_dounit systemd/vram-swap-nbd-suspend.service systemd_dounit systemd/nbd-vram-power-check.service systemd_dounit systemd/nbd-vram-battery-watch.service systemd_dounit systemd/nbd-vram-battery-watch.timer udev_dorules udev/99-nbd-vram-power.rules else # nbd-vram-power-check.sh is called directly by udev and cron dobin "${FILESDIR}/nbd-vram-power-check.sh" doinitd "${FILESDIR}/nbd-vram-swap.initd" doconfd "${FILESDIR}/nbd-vram-swap.confd" # Sleep hook for elogind (suspend/resume) insinto /lib/elogind/system-sleep newins "${FILESDIR}/nbd-vram-sleep.sh" nbd-vram fperms 0755 /lib/elogind/system-sleep/nbd-vram # Battery watch via cron (replaces nbd-vram-battery-watch.timer) insinto /etc/cron.d newins "${FILESDIR}/nbd-vram.cron" nbd-vram # Udev rule: call script directly, no systemctl udev_dorules "${FILESDIR}/99-nbd-vram-power-openrc.rules" fi # Runtime config (protected by CONFIG_PROTECT; user edits are preserved) insinto /etc doins nbd-vram.conf einstalldocs } pkg_postinst() { elog "To use nbd-vram, ensure your Linux kernel has NBD support enabled:" elog " Device Drivers --->" elog " [*] Block devices --->" elog " Network block device support" elog "" if use systemd; then elog "Edit VRAM_SETUP_SIZE_MB in /etc/systemd/system/vram-swap-nbd.service" elog "to set how much VRAM to dedicate to swap before enabling the service." elog "" elog "To start automatically on boot:" elog " systemctl enable --now vram-swap-nbd" else elog "Edit VRAM_SETUP_SIZE_MB in /etc/conf.d/nbd-vram-swap" elog "to set how much VRAM to dedicate to swap before enabling the service." elog "" elog "To start automatically on boot:" elog " rc-update add nbd-vram-swap default" elog " rc-service nbd-vram-swap start" fi udev_reload } pkg_postrm() { udev_reload }