@@ -458,26 +458,58 @@ def gather_device_data(self, device):
458458 except KeyError :
459459 pass
460460
461- # -open nvidia drivers are recommended now over normal ones. Go thru the list and get the version of the recommended one,
462- # then we can flag the non-'open' one instead.
463- new_recommended = None
461+ """
462+ - Never show server drivers.
463+ - Pre 560: closed source drivers are recommended. Override any recommended -open drivers with the closed
464+ source equivalent.
465+ - Post 560 (02/13/2025: open-source drivers are recommended by their devs, and closed source drivers may
466+ not be available for a given version.
467+ """
468+ ignored = []
469+
464470 for pkg_driver_name in device ['drivers' ]:
465- current_driver = device ['drivers' ][pkg_driver_name ]
471+ if not pkg_driver_name .startswith ("nvidia-" ):
472+ continue
473+ if pkg_driver_name in ignored :
474+ print ("Skipping ignored NVIDIA driver '%s'" % pkg_driver_name )
475+ continue
476+ if pkg_driver_name .endswith (("-server" , "-server-open" )):
477+ print ("Ignoring server NVIDIA driver '%s'" % pkg_driver_name )
478+ ignored .append (pkg_driver_name )
479+ continue
480+
466481 try :
467- if current_driver ['recommended' ] and current_driver ['from_distro' ]:
468- driver_status = 'recommended'
469- if pkg_driver_name .endswith ("-open" ):
470- new_recommended = pkg_driver_name .replace ("-open" , "" )
471- except KeyError :
472- pass
482+ version = int (re .search (r"nvidia-driver-([0-9]{3}).*" , pkg_driver_name ).groups ()[0 ])
483+ open_preferred = version >= 560
484+ except :
485+ open_preferred = False
486+
487+ is_open = pkg_driver_name .endswith ("-open" )
488+ current_driver = device ['drivers' ][pkg_driver_name ]
489+ recommended = current_driver .get ("recommended" , False ) and current_driver .get ("from_distro" , False )
490+
491+ if is_open :
492+ closed_name = pkg_driver_name .replace ("-open" , "" )
493+ has_closed = closed_name in device ['drivers' ]
494+ if has_closed :
495+ if open_preferred :
496+ print ("Ignoring closed NVIDIA driver '%s' as the open one is preferred." % closed_name )
497+ ignored .append (closed_name )
498+ else :
499+ print ("Ignoring open NVIDIA driver '%s' as a closed one exists and is preferred." % pkg_driver_name )
500+ if recommended :
501+ device ['drivers' ][closed_name ]["recommended" ] = True
502+ ignored .append (pkg_driver_name )
473503
474504 for pkg_driver_name in device ['drivers' ]:
505+ if pkg_driver_name in ignored :
506+ continue
475507 current_driver = device ['drivers' ][pkg_driver_name ]
476508
477509 # get general status
478510 driver_status = 'alternative'
479511 try :
480- if (current_driver ['recommended' ] and current_driver ['from_distro' ]) or pkg_driver_name == new_recommended :
512+ if (current_driver ['recommended' ] and current_driver ['from_distro' ]):
481513 driver_status = 'recommended'
482514 except KeyError :
483515 pass
@@ -657,9 +689,6 @@ def show_drivers(self):
657689 # define the order of introspection
658690 for section in ('recommended' , 'alternative' , 'manually_installed' , 'no_driver' ):
659691 for driver in sorted (drivers [section ], key = lambda x : self .sort_string (drivers [section ], x ), reverse = True ):
660- if str (driver ).startswith ("nvidia-driver" ) and str (driver ).endswith (("-server" , "-open" )):
661- print ("Ignoring server or open NVIDIA driver: " , driver )
662- continue
663692 radio_button = Gtk .RadioButton .new (None )
664693 label = Gtk .Label ()
665694 label .set_markup (drivers [section ][driver ]['description' ])
0 commit comments