diff options
| author | Hilton Chain <hako@ultrarare.space> | 2026-05-01 15:58:41 +0800 |
|---|---|---|
| committer | Hilton Chain <hako@ultrarare.space> | 2026-05-01 23:41:51 +0800 |
| commit | 898fd3ced237b51141cd234bce52817850e3c3ca (patch) | |
| tree | 6b4d75c2ebe78bc5678fbd1221df95c4f9804d6f /nongnu | |
| parent | 4d1c41db80e04de45af93c8432bf331b449ee57d (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')
| -rw-r--r-- | nongnu/packages/nvidia.scm | 180 |
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)) ;;; |
