summaryrefslogtreecommitdiff
path: root/nongnu/packages/nvidia.scm
diff options
context:
space:
mode:
authorHilton Chain <hako@ultrarare.space>2026-05-01 15:58:41 +0800
committerHilton Chain <hako@ultrarare.space>2026-05-01 23:41:51 +0800
commit898fd3ced237b51141cd234bce52817850e3c3ca (patch)
tree6b4d75c2ebe78bc5678fbd1221df95c4f9804d6f /nongnu/packages/nvidia.scm
parent4d1c41db80e04de45af93c8432bf331b449ee57d (diff)
nongnu: nvidia: Avoid transformations in package definitions.
Packages can only be transformed once. Avoid using transformations in definitions so that these packages can be transformed by the user. * nongnu/packages/nvidia.scm (replace-nvidia-driver): Remove procedure. (make-nvda, make-ffmpeg-nvidia): Adjust accordingly. (replace-mesa): Use make-ffmpeg-nvidia.
Diffstat (limited to 'nongnu/packages/nvidia.scm')
-rw-r--r--nongnu/packages/nvidia.scm180
1 files changed, 96 insertions, 84 deletions
diff --git a/nongnu/packages/nvidia.scm b/nongnu/packages/nvidia.scm
index daf83d2..ecce310 100644
--- a/nongnu/packages/nvidia.scm
+++ b/nongnu/packages/nvidia.scm
@@ -1422,9 +1422,6 @@ configuration, application profiles, GPU monitoring and more.")
;;; ‘nvda’ packages
;;;
-(define (replace-nvidia-driver driver)
- (package-input-rewriting `((,nvidia-driver . ,driver))))
-
(define-public libglvnd-for-nvda
(hidden-package
(package
@@ -1467,66 +1464,78 @@ configuration, application profiles, GPU monitoring and more.")
;; nvda is used as a name because it has the same length as mesa which is
;; required for grafting
(define (make-nvda driver)
- ((replace-nvidia-driver driver)
- (package
- (name "nvda")
- (version (string-pad-right
- (package-version driver)
- (string-length (package-version mesa-for-nvda))
- #\0))
- (source #f)
- (build-system trivial-build-system)
- (arguments
- (list #:modules '((guix build union))
- #:builder
- #~(begin
- (use-modules (guix build union))
- (union-build
- #$output
- '#$(list (this-package-input "libglvnd")
- (this-package-input "mesa")
- (this-package-input "nvidia-driver")
- (this-package-input "nvidia-vaapi-driver"))))))
- (native-search-paths
- (list
- ;; https://github.com/NVIDIA/egl-wayland/issues/39
- (search-path-specification
- (variable "__EGL_EXTERNAL_PLATFORM_CONFIG_DIRS")
- (files '("share/egl/egl_external_platform.d")))
- ;; https://gitlab.freedesktop.org/glvnd/libglvnd/-/blob/master/src/EGL/icd_enumeration.md
- (search-path-specification
- (variable "__EGL_VENDOR_LIBRARY_DIRS")
- (files '("share/glvnd/egl_vendor.d")))
- ;; See also: ‘src/gbm/main/backend.c’ in mesa source.
- (search-path-specification
- (variable "GBM_BACKENDS_PATH")
- (files '("lib/gbm")))
- ;; XXX Because of <https://issues.guix.gnu.org/issue/22138>, we need to add
- ;; this to all VA-API back ends instead of once to libva.
- (search-path-specification
- (variable "LIBVA_DRIVERS_PATH")
- (files '("lib/dri")))
- (search-path-specification
- (variable "VDPAU_DRIVER_PATH")
- (files '("lib/vdpau"))
- (separator #f))
- ;; https://github.com/KhronosGroup/Vulkan-Loader/blob/main/docs/LoaderLayerInterface.md
- (search-path-specification
- (variable "XDG_DATA_DIRS")
- (files '("share")))))
- (synopsis "Nonguix's user-facing NVIDIA driver package")
- (description
- "This package provides a @code{mesa} variant with NVIDIA proprietary driver
+ (define nv-codec-headers/rebuilt
+ (package/inherit nv-codec-headers
+ (inputs
+ (modify-inputs inputs
+ (replace "nvidia-driver" driver)))))
+
+ (define nvidia-vaapi-driver/rebuilt
+ (package/inherit nvidia-vaapi-driver
+ (inputs
+ (modify-inputs inputs
+ (replace "nv-codec-headers" nv-codec-headers/rebuilt)))))
+
+ (package
+ (name "nvda")
+ (version (string-pad-right
+ (package-version driver)
+ (string-length (package-version mesa-for-nvda))
+ #\0))
+ (source #f)
+ (build-system trivial-build-system)
+ (arguments
+ (list #:modules '((guix build union))
+ #:builder
+ #~(begin
+ (use-modules (guix build union))
+ (union-build
+ #$output
+ '#$(list (this-package-input "libglvnd")
+ (this-package-input "mesa")
+ (or (this-package-input "nvidia-driver")
+ (this-package-input "nvidia-driver-beta"))
+ (this-package-input "nvidia-vaapi-driver"))))))
+ (native-search-paths
+ (list
+ ;; https://github.com/NVIDIA/egl-wayland/issues/39
+ (search-path-specification
+ (variable "__EGL_EXTERNAL_PLATFORM_CONFIG_DIRS")
+ (files '("share/egl/egl_external_platform.d")))
+ ;; https://gitlab.freedesktop.org/glvnd/libglvnd/-/blob/master/src/EGL/icd_enumeration.md
+ (search-path-specification
+ (variable "__EGL_VENDOR_LIBRARY_DIRS")
+ (files '("share/glvnd/egl_vendor.d")))
+ ;; See also: ‘src/gbm/main/backend.c’ in mesa source.
+ (search-path-specification
+ (variable "GBM_BACKENDS_PATH")
+ (files '("lib/gbm")))
+ ;; XXX Because of <https://issues.guix.gnu.org/issue/22138>, we need to add
+ ;; this to all VA-API back ends instead of once to libva.
+ (search-path-specification
+ (variable "LIBVA_DRIVERS_PATH")
+ (files '("lib/dri")))
+ (search-path-specification
+ (variable "VDPAU_DRIVER_PATH")
+ (files '("lib/vdpau"))
+ (separator #f))
+ ;; https://github.com/KhronosGroup/Vulkan-Loader/blob/main/docs/LoaderLayerInterface.md
+ (search-path-specification
+ (variable "XDG_DATA_DIRS")
+ (files '("share")))))
+ (synopsis "Nonguix's user-facing NVIDIA driver package")
+ (description
+ "This package provides a @code{mesa} variant with NVIDIA proprietary driver
support. For dependency of other packages, use @code{nvidia-driver} instead.")
- (native-inputs '())
- (propagated-inputs
- (append
- (package-propagated-inputs mesa-for-nvda)
- (package-propagated-inputs driver)))
- (inputs (list mesa-for-nvda nvidia-driver nvidia-vaapi-driver))
- (outputs '("out"))
- (license (package-license driver))
- (home-page (package-home-page driver)))))
+ (native-inputs '())
+ (propagated-inputs
+ (append
+ (package-propagated-inputs mesa-for-nvda)
+ (package-propagated-inputs driver)))
+ (inputs (list mesa-for-nvda driver nvidia-vaapi-driver/rebuilt))
+ (outputs '("out"))
+ (license (package-license driver))
+ (home-page (package-home-page driver))))
(define-syntax define-nvda-package
(syntax-rules ()
@@ -1647,20 +1656,24 @@ support. For dependency of other packages, use @code{nvidia-driver} instead.")
(package-version nvidia-driver-beta))
(define (make-ffmpeg-nvidia ffmpeg driver)
- ((replace-nvidia-driver driver)
- (package
- (inherit ffmpeg)
- (inputs
- (modify-inputs inputs
- (prepend nv-codec-headers)))
- (arguments
- (substitute-keyword-arguments arguments
- ((#:configure-flags flags)
- #~(cons* "--enable-cuvid"
- "--enable-ffnvcodec"
- "--enable-encoder=hevc_nvenc"
- "--enable-encoder=h264_nvenc"
- #$flags)))))))
+ (define nv-codec-headers/rebuilt
+ (package/inherit nv-codec-headers
+ (inputs
+ (modify-inputs inputs
+ (replace "nvidia-driver" driver)))))
+
+ (package/inherit ffmpeg
+ (inputs
+ (modify-inputs inputs
+ (prepend nv-codec-headers/rebuilt)))
+ (arguments
+ (substitute-keyword-arguments arguments
+ ((#:configure-flags flags)
+ #~(cons* "--enable-cuvid"
+ "--enable-ffnvcodec"
+ "--enable-encoder=hevc_nvenc"
+ "--enable-encoder=h264_nvenc"
+ #$flags))))))
(define-syntax define-ffmpeg-nvidia
(syntax-rules ()
@@ -1729,14 +1742,13 @@ support. For dependency of other packages, use @code{nvidia-driver} instead.")
(package-version nvidia-driver-beta))
(define* (replace-mesa obj #:key (driver nvda))
- (let ((rebuild (replace-nvidia-driver driver)))
- (with-transformation
- (package-input-grafting
- `((,mesa . ,driver)
- (,nvidia-driver . ,driver)
- (,ffmpeg . ,(rebuild ffmpeg/nvidia))
- (,ffmpeg-6 . ,(rebuild ffmpeg-6/nvidia))))
- obj)))
+ (with-transformation
+ (package-input-grafting
+ `((,mesa . ,driver)
+ (,nvidia-driver . ,driver)
+ (,ffmpeg . ,(make-ffmpeg-nvidia ffmpeg driver))
+ (,ffmpeg-6 . ,(make-ffmpeg-nvidia ffmpeg-6 driver))))
+ obj))
;;;