Unverified Commit 0d3c3735 authored by Rafael Fernández López's avatar Rafael Fernández López
Browse files

nvidia-container-toolkit: add "nvidia" to services.xserver.videoDrivers

This will ensure that all requirements are met when the
nvidia-container-toolkit is enabled in order to generate the CDI specs
for the machine.

Also, if `config.virtualisation.docker.rootless.enable` is true,
automatically enable the CDI feature if the Docker version > 25 for
the rootless installation.
parent fc140242
Loading
Loading
Loading
Loading
+57 −44
Original line number Diff line number Diff line
@@ -77,15 +77,24 @@

  };

  config = {
  config = lib.mkIf config.hardware.nvidia-container-toolkit.enable {
    virtualisation.docker = {
      daemon.settings = lib.mkIf
        (lib.versionAtLeast config.virtualisation.docker.package.version "25") {
          features.cdi = true;
        };

    virtualisation.docker.daemon.settings = lib.mkIf
      (config.hardware.nvidia-container-toolkit.enable &&
      rootless.daemon.settings = lib.mkIf
        (config.virtualisation.docker.rootless.enable &&
         (lib.versionAtLeast config.virtualisation.docker.package.version "25")) {
           features.cdi = true;
         };
    };

    hardware.nvidia-container-toolkit.mounts = let
    hardware = {
      graphics.enable = lib.mkIf (!config.hardware.nvidia.datacenter.enable) true;

      nvidia-container-toolkit.mounts = let
        nvidia-driver = config.hardware.nvidia.package;
      in (lib.mkMerge [
        [{ hostPath = pkgs.addDriverRunpath.driverLink;
@@ -119,8 +128,12 @@
           { hostPath = "${lib.getLib nvidia-driver}/lib";
             containerPath = "/usr/local/nvidia/lib64"; }])
      ]);
    };

    services.xserver.videoDrivers = lib.mkIf
      (!config.hardware.nvidia.datacenter.enable) [ "nvidia" ];

    systemd.services.nvidia-container-toolkit-cdi-generator = lib.mkIf config.hardware.nvidia-container-toolkit.enable {
    systemd.services.nvidia-container-toolkit-cdi-generator = {
      description = "Container Device Interface (CDI) for Nvidia generator";
      wantedBy = [ "multi-user.target" ];
      after = [ "systemd-udev-settle.service" ];