Hi all,
I wanted to share my current refactor of nvidia-driver-assistant.
Earlier this year I already worked on improving the Manjaro version with additional fallback logic and detection changes. Over the last couple of days I rebased that work onto the current upstream NVIDIA codebase (v51).
The goal is to keep upstream compatibility while preserving Manjaro-specific behavior, since Manjaro packaging differs from upstream assumptions. In particular, Manjaro still provides the full driver stack down to legacy 390, so treating everything below 580 as unsupported does not reflect Manjaro reality.
One edge case is still being finalized:
when a legacy 580-only GPU is present together with a GPU capable of open kernel modules, upstream logic currently prefers open kernel drivers, which is incorrect for mixed setups because the legacy 580 device cannot operate with that selection.
This mixed-GPU handling will be completed tomorrow, after which the refactor should be essentially production-ready.
Note: no supported-gpus.json changes are needed..
( BTW, you can also test it with the broken supported-gpus.json, which maps openkernel to the legacy580 branch. The nvidia-driver-assistant script contains logic that forces every legacy branch up to and including 580 onto the proprietary kernel module.)
Branch:
I’m sharing this here since it includes both my work and Manjaro-specific logic/workflows, and may be useful for future sync/update efforts.
Please adjust if you think this is not the correct place/topic
*update: i digg more today (May 05) in the code and the newest supported gpus json, they removed legacy580 branch (thats correctly does not have the openkernel) in the latest ubuntu2604 051 version.
However does not matter with my version.
I digg more… I checked debian13 v51 that has legacy 580.xx branch (but still has the openkernel as well
checked the 24.04 v51 same, has legacy580xx branch and still has openkernel.
BTW PKGBUILD and iso for testing, WIll come, please dont close this topic!
(This will pull always the laest .deb from developer.nvidia.com from the ubuntu2404)
*update: 2026.05.17 Now this puppy is a modular python program with yaml to easyer maintance. Since i open this topic the program was changed, and current README.md is the current source of truth.
PKGBUILD:
# Maintainer: Gyöngyösi Gábor <gabor at gshoots dot hu>
pkgname=nvidia-driver-assistant
pkgver=0.51.71.05_1.gcf643c078b
pkgrel=1
pkgdesc="Detect and install the best NVIDIA driver packages for the system"
arch=('any')
url="https://github.com/megvadulthangya/nvidia-driver-assistant"
license=('MIT' 'custom')
depends=('python' 'python-pyyaml')
makedepends=('git' 'curl' 'libarchive' 'gzip')
# The source code comes from the git repo; the DEB is pulled in prepare()
# only for the production supported-gpus.json and NVIDIA EULA.
source=("git+https://github.com/megvadulthangya/nvidia-driver-assistant.git#branch=master")
sha256sums=('SKIP')
_nvidia_repo_base='https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64'
_latest_deb_info() {
local html latest_file ver
html=$(curl -fsSL --retry 3 --retry-delay 2 --connect-timeout 10 "${_nvidia_repo_base}/") || return 1
latest_file=$(echo "$html" | grep -oP 'nvidia-driver-assistant_[\d\.-]+_all\.deb' | sort -V | tail -n1)
if [[ -z "$latest_file" ]]; then
return 1
fi
ver=$(echo "$latest_file" | sed -E 's/nvidia-driver-assistant_(.*)_all\.deb/\1/')
echo "${ver}|${latest_file}"
}
pkgver() {
cd "${srcdir}/${pkgname}"
local meta deb_ver git_hash
meta="$(_latest_deb_info)" || return 1
deb_ver="${meta%%|*}"
deb_ver="${deb_ver//-/_}"
git_hash="$(git rev-parse --short=10 HEAD)"
printf '%s.g%s' "${deb_ver}" "${git_hash}"
}
prepare() {
cd "${srcdir}"
local meta deb_file deb_url
meta="$(_latest_deb_info)" || return 1
deb_file="${meta#*|}"
deb_url="${_nvidia_repo_base}/${deb_file}"
rm -rf "debroot"
mkdir -p "debroot"
echo "==> Downloading upstream DEB for assets: ${deb_file}..."
curl -fL --retry 5 -o "upstream.deb" "${deb_url}"
echo "==> Unpacking DEB payload..."
bsdtar -xf "upstream.deb" -C "debroot"
local data_tar
data_tar=$(find "debroot" -maxdepth 1 -type f \( -name 'data.tar.*' -o -name 'data.tar' \) | head -n 1)
if [[ -n "$data_tar" ]]; then
bsdtar -xf "$data_tar" -C "debroot"
rm "$data_tar"
fi
}
package() {
# 1. Directory structure
install -d "${pkgdir}/usr/bin"
install -d "${pkgdir}/usr/share/${pkgname}"
install -d "${pkgdir}/usr/share/doc/${pkgname}"
install -d "${pkgdir}/usr/share/licenses/${pkgname}"
# Determine Python site-packages path
local site_packages
site_packages="$(python -c 'import site; print(site.getsitepackages()[0])')"
install -d "${pkgdir}${site_packages}/nvidia_driver_assistant/data"
# 2. Main wrapper script from git → /usr/bin/
msg2 "Installing main script from git source..."
install -m755 "${srcdir}/${pkgname}/nvidia-driver-assistant" \
"${pkgdir}/usr/bin/nvidia-driver-assistant"
# 3. Python package from git → site-packages
# (modules + YAML configuration data)
msg2 "Installing Python package (nvidia_driver_assistant/)..."
install -m644 "${srcdir}/${pkgname}/nvidia_driver_assistant/"*.py \
"${pkgdir}${site_packages}/nvidia_driver_assistant/"
install -m644 "${srcdir}/${pkgname}/nvidia_driver_assistant/data/"*.yaml \
"${pkgdir}${site_packages}/nvidia_driver_assistant/data/"
# NOTE: data/supported-gpus.json is a symlink used only for testing;
# the production supported-gpus.json comes from the DEB (step 5).
# 4. Other git-sourced utilities (if present)
if [[ -f "${srcdir}/${pkgname}/show-driver" ]]; then
install -m755 "${srcdir}/${pkgname}/show-driver" \
"${pkgdir}/usr/bin/nvidia-recommended-driver"
fi
# 5. Data files from DEB (production supported-gpus.json, icons, etc.)
# The CLI resolves supported-gpus.json at:
# /usr/share/nvidia-driver-assistant/supported-gpus/supported-gpus.json
if [[ -d "${srcdir}/debroot/usr/share/${pkgname}" ]]; then
cp -ra "${srcdir}/debroot/usr/share/${pkgname}"/* "${pkgdir}/usr/share/${pkgname}/"
fi
# 6. Documentation from git
install -m644 "${srcdir}/${pkgname}/README.md" \
"${pkgdir}/usr/share/doc/${pkgname}/README.md"
install -m644 "${srcdir}/${pkgname}/COPYING" \
"${pkgdir}/usr/share/licenses/${pkgname}/COPYING"
# 7. Licenses from DEB (copyright + NVIDIA EULA)
local deb_doc="${srcdir}/debroot/usr/share/doc/${pkgname}"
if [[ -f "${deb_doc}/copyright" ]]; then
install -m644 "${deb_doc}/copyright" "${pkgdir}/usr/share/licenses/${pkgname}/copyright"
fi
local eula="${srcdir}/debroot/usr/share/${pkgname}/driver_eula/LICENSE"
if [[ -f "$eula" ]]; then
install -m644 "$eula" "${pkgdir}/usr/share/licenses/${pkgname}/NVIDIA-EULA"
fi
}