Skip to content

Instantly share code, notes, and snippets.

@sineemore
Last active May 3, 2026 20:55
Show Gist options
  • Select an option

  • Save sineemore/161e4051b2d03f9e3b0f3e16221463ce to your computer and use it in GitHub Desktop.

Select an option

Save sineemore/161e4051b2d03f9e3b0f3e16221463ce to your computer and use it in GitHub Desktop.
NVIDIA on musl
NVIDIA on Void Linux x86_64-musl
================================
Proprietray NVIDIA kernel modules + nvidia-modprobe binary for Void Linux x86_64-musl.
- DMKS-only + nvidia-modprobe binary for device files creation
- both drivers and binary from NVIDIA upstream
How it works: kernel modules are libc-independent already,
userspace nvidia libraries can live in glibc Flatpak/chroot/container.
INSTALL
cd ~/void-packages
curl -sL 'https://gist.githubusercontent.com/sineemore/161e4051b2d03f9e3b0f3e16221463ce/raw/0932ae5fd55557b96b136cc2e6b143a4a05b1141/nvidia-dkms-standalone-580.126.18.patch' | git apply
./xbps-src pkg nvidia-dkms-standalone
xi nvidia-dkms-standalone
reboot
VERIFY
lsmod | grep nvidia
ls -la /dev/nvidia*
# should see: nvidia0, nvidiactl, nvidia-modeset, nvidia-uvm, nvidia-uvm-tools
USAGE
# Flatpak ships its own nvidia libs, driver version detection should works by checking kernel module version
flatpak --gl-drivers
flatpak install org.freedesktop.Platform.GL.nvidia-580-126-18
flatpak install org.freedesktop.Platform.GL32.nvidia-580-126-18
From bc7e85c563eb2c11ae16d5e943eda89e927dfd72 Mon Sep 17 00:00:00 2001
From: sineemore <sineemore@disroot.org>
Date: Sun, 19 Apr 2026 15:55:04 +0000
Subject: [PATCH] New package: nvidia-dkms-standalone-580.126.18
---
.../files/99-nvidia.rules | 6 ++
.../nvidia-dkms-standalone/files/dkms.conf | 19 +++++
.../files/nvidia-modprobe.conf | 3 +
.../files/nvidia-modules-load.conf | 2 +
.../patches/nvidia-tegra-bpmp.patch | 13 +++
srcpkgs/nvidia-dkms-standalone/template | 81 +++++++++++++++++++
6 files changed, 124 insertions(+)
create mode 100644 srcpkgs/nvidia-dkms-standalone/files/99-nvidia.rules
create mode 100644 srcpkgs/nvidia-dkms-standalone/files/dkms.conf
create mode 100644 srcpkgs/nvidia-dkms-standalone/files/nvidia-modprobe.conf
create mode 100644 srcpkgs/nvidia-dkms-standalone/files/nvidia-modules-load.conf
create mode 100644 srcpkgs/nvidia-dkms-standalone/patches/nvidia-tegra-bpmp.patch
create mode 100644 srcpkgs/nvidia-dkms-standalone/template
diff --git a/srcpkgs/nvidia-dkms-standalone/files/99-nvidia.rules b/srcpkgs/nvidia-dkms-standalone/files/99-nvidia.rules
new file mode 100644
index 00000000000..9bb7525b8c7
--- /dev/null
+++ b/srcpkgs/nvidia-dkms-standalone/files/99-nvidia.rules
@@ -0,0 +1,6 @@
+# Create NVIDIA device nodes when the kernel module loads
+SUBSYSTEM=="module", KERNEL=="nvidia", ACTION=="add", RUN+="/usr/bin/nvidia-modprobe -c0 -c255 -m"
+SUBSYSTEM=="module", KERNEL=="nvidia", ACTION=="add", RUN+="/usr/bin/nvidia-modprobe -u -c0"
+
+# Set permissions on NVIDIA device nodes
+KERNEL=="nvidia[0-9]*|nvidiactl|nvidia-modeset|nvidia-uvm|nvidia-uvm-tools", MODE="0666"
diff --git a/srcpkgs/nvidia-dkms-standalone/files/dkms.conf b/srcpkgs/nvidia-dkms-standalone/files/dkms.conf
new file mode 100644
index 00000000000..6e4e30c927d
--- /dev/null
+++ b/srcpkgs/nvidia-dkms-standalone/files/dkms.conf
@@ -0,0 +1,19 @@
+PACKAGE_NAME="nvidia"
+PACKAGE_VERSION="__PKGVER"
+AUTOINSTALL="yes"
+
+# By default, DKMS will add KERNELRELEASE to the make command line; however,
+# this will cause the kernel module build to infer that it was invoked via
+# Kbuild directly instead of DKMS. The dkms(8) manual page recommends quoting
+# the 'make' command name to suppress this behavior.
+MAKE[0]="'make' __MAKEJOBS NV_EXCLUDE_BUILD_MODULES='' KERNEL_UNAME=${kernelver} modules"
+
+# The list of kernel modules was generated by nvidia-installer at runtime.
+BUILT_MODULE_NAME[0]="nvidia"
+DEST_MODULE_LOCATION[0]="/kernel/drivers/video"
+BUILT_MODULE_NAME[1]="nvidia-uvm"
+DEST_MODULE_LOCATION[1]="/kernel/drivers/video"
+BUILT_MODULE_NAME[2]="nvidia-modeset"
+DEST_MODULE_LOCATION[2]="/kernel/drivers/video"
+BUILT_MODULE_NAME[3]="nvidia-drm"
+DEST_MODULE_LOCATION[3]="/kernel/drivers/video"
diff --git a/srcpkgs/nvidia-dkms-standalone/files/nvidia-modprobe.conf b/srcpkgs/nvidia-dkms-standalone/files/nvidia-modprobe.conf
new file mode 100644
index 00000000000..b7022d2a4ed
--- /dev/null
+++ b/srcpkgs/nvidia-dkms-standalone/files/nvidia-modprobe.conf
@@ -0,0 +1,3 @@
+blacklist nouveau
+blacklist nova_core
+blacklist nova_drm
diff --git a/srcpkgs/nvidia-dkms-standalone/files/nvidia-modules-load.conf b/srcpkgs/nvidia-dkms-standalone/files/nvidia-modules-load.conf
new file mode 100644
index 00000000000..2097337fbb8
--- /dev/null
+++ b/srcpkgs/nvidia-dkms-standalone/files/nvidia-modules-load.conf
@@ -0,0 +1,2 @@
+nvidia
+nvidia-drm
diff --git a/srcpkgs/nvidia-dkms-standalone/patches/nvidia-tegra-bpmp.patch b/srcpkgs/nvidia-dkms-standalone/patches/nvidia-tegra-bpmp.patch
new file mode 100644
index 00000000000..dcf8fa56ae2
--- /dev/null
+++ b/srcpkgs/nvidia-dkms-standalone/patches/nvidia-tegra-bpmp.patch
@@ -0,0 +1,13 @@
+--- a/kernel/nvidia/nv-clk.c
++++ b/kernel/nvidia/nv-clk.c
+@@ -27,8 +27,10 @@
+ #include "nv-linux.h"
+ #include "nv-platform.h"
+
++#if IS_ENABLED(CONFIG_TEGRA_BPMP)
+ #include <soc/tegra/bpmp-abi.h>
+ #include <soc/tegra/bpmp.h>
++#endif // IS_ENABLED(CONFIG_TEGRA_BPMP)
+
+ // Use the CCF APIs if enabled in Kernel config and RM build
+ // has Dual license define enabled.
diff --git a/srcpkgs/nvidia-dkms-standalone/template b/srcpkgs/nvidia-dkms-standalone/template
new file mode 100644
index 00000000000..3b28da05671
--- /dev/null
+++ b/srcpkgs/nvidia-dkms-standalone/template
@@ -0,0 +1,81 @@
+# Template file for 'nvidia-dkms-standalone'
+
+_desc="NVIDIA kernel modules (DKMS) - standalone package"
+
+pkgname=nvidia-dkms-standalone
+version=580.126.18
+revision=1
+maintainer="sineemore <sineemore@disroot.org>"
+license="custom:NVIDIA Proprietary"
+homepage="https://www.nvidia.com/en-us/drivers/unix/"
+
+archs="x86_64 x86_64-musl"
+nopie=yes
+repository="nonfree"
+create_wrksrc=yes
+short_desc="${_desc}"
+hostmakedepends="tar zstd m4"
+makedepends="kernel-libc-headers"
+depends="dkms xbps-triggers>=0.121_1 kmod"
+conflicts="nvidia-dkms>=0 nvidia470-dkms>=0 nvidia390-dkms>=0"
+
+dkms_modules="nvidia ${version}"
+# dkms must be before initramfs-regenerate to build modules before images
+triggers="dkms initramfs-regenerate"
+
+_pkg="NVIDIA-Linux-x86_64-${version}"
+_modprobe_src="nvidia-modprobe-${version}"
+distfiles="http://uk.download.nvidia.com/XFree86/Linux-x86_64/${version}/${_pkg}.run
+ https://github.com/NVIDIA/nvidia-modprobe/archive/refs/tags/${version}.tar.gz>${_modprobe_src}.tar.gz"
+checksum="a7781b2e1c2d65c6580914c76e79ed454d02945df84711c033070a092a9ab49d
+ 7addd647e12f37c662d818bd8be0547d880369b8464f280fa2b24eb382ba19e1"
+
+patch_args="-Np1 --directory=${XBPS_BUILDDIR}/${pkgname}-${version}/${_pkg}"
+
+do_extract() {
+ install -m755 ${XBPS_SRCDISTDIR}/${pkgname}-${version}/${_pkg}.run ${wrksrc}
+ cd ${wrksrc}
+ ./${_pkg}.run --extract-only --target ${_pkg}
+ rm -f ${_pkg}.run
+
+ # Extract nvidia-modprobe source
+ tar xzf ${XBPS_SRCDISTDIR}/${pkgname}-${version}/${_modprobe_src}.tar.gz -C ${wrksrc}
+}
+
+do_build() {
+ cd ${wrksrc}/${_modprobe_src}
+ make ${makejobs} PREFIX=/usr BIN_LDFLAGS="${LDFLAGS}" \
+ DO_STRIP= STRIP_CMD=true
+}
+
+do_install() {
+ cd ${_pkg}
+
+ # DKMS kernel module source
+ vmkdir usr/src/nvidia-${version}
+ vcopy "kernel/*" usr/src/nvidia-${version}
+ vcopy ${FILESDIR}/dkms.conf usr/src/nvidia-${version}
+ sed -e "s/__PKGVER/${version}/g" \
+ -e 's/__MAKEJOBS/-j$(nproc)/g' \
+ -i ${DESTDIR}/usr/src/nvidia-${version}/dkms.conf
+
+ # GSP firmware (needed for modern GPUs)
+ for fw in gsp_ga10x.bin gsp_tu10x.bin; do
+ vinstall "firmware/${fw}" 644 "usr/lib/firmware/nvidia/${version}"
+ done
+
+ # Blacklist nouveau
+ vinstall ${FILESDIR}/nvidia-modprobe.conf 644 usr/lib/modprobe.d
+
+ # nvidia-modprobe (built from source for musl compatibility)
+ vinstall ${wrksrc}/${_modprobe_src}/_out/Linux_x86_64/nvidia-modprobe 4755 usr/bin
+
+ # udev rule - creates device nodes when modules load
+ vinstall ${FILESDIR}/99-nvidia.rules 644 usr/lib/udev/rules.d
+
+ # Auto-load modules at boot
+ vinstall ${FILESDIR}/nvidia-modules-load.conf 644 usr/lib/modules-load.d
+
+ # License
+ vlicense LICENSE
+}
--
2.53.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment