Hi!
I think this is because services, in their configuration, reference versions of packages that you haven’t changed with replace-mesa, creating a package conflict between the version referencing mesa and the one referencing nvda. To solve this, you can either use modify-services to override the packages with the output of replace-mesa, or you can opt to not reference %desktop-services and explicitly define the services you need with the appropriate mesa-fied packages in their configuration. Here’s an example of some desktop services I defined to use nvda:
(service network-manager-service-type
(network-manager-configuration
(network-manager (replace-mesa network-manager))))
(simple-service 'network-manager-applet
profile-service-type
(list (replace-mesa network-manager-applet)))
;; GNOME
(service gdm-service-type
(gdm-configuration
(gdm (replace-mesa gdm))
(wayland? #t)))
(service gnome-desktop-service-type
(gnome-desktop-configuration
(core-services
(list
(replace-mesa gnome-meta-core-services)))
(shell
(list (replace-mesa gnome-meta-core-shell)))
(utilities
(list (replace-mesa gnome-meta-core-utilities)))
(extra-packages
(list (replace-mesa gnome-essential-extras)))))