{ lib, config, pkgs, ... }: let inherit (lib) mkIf optionals; cfg = config.nvidia; in { config = mkIf cfg.enable { # kernel modules boot.blacklistedKernelModules = ["nouveau"]; services.xserver.videoDrivers = ["modesetting" "nvidia"]; # nvidia driver hardware.nvidia = { modesetting.enable = true; powerManagement = { enable = false; finegrained = false; }; prime = cfg.primeBusIds // { offload = { enable = true; enableOffloadCmd = true; }; }; open = true; nvidiaSettings = true; package = config.boot.kernelPackages.nvidiaPackages.latest; }; # cuda environment = mkIf cfg.cuda.enable { systemPackages = with pkgs; [ cudaPackages.cuda_cudart cudaPackages.cudnn cudatoolkit ]; variables = { NVIDIA_VISIBLE_DEVICES = "all"; NVIDIA_DRIVER_CAPABILITIES = "compute,utility"; CUDA_VISIBLE_DEVICES = 0; CUDA_PATH = "${pkgs.cudatoolkit}"; }; }; nix.settings = mkIf cfg.cuda.enable { substituters = ["https://cache.nixos-cuda.org"]; trusted-public-keys = ["cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M="]; }; unfreePackages = [ "nvidia-x11" "nvidia-settings" ] ++ (optionals cfg.cuda.enable [ "cuda-merged" "cuda_cccl" "cuda_cudart" "cuda_cuobjdump" "cuda_cupti" "cuda_cuxxfilt" "cuda_gdb" "cuda_nvcc" "cuda_nvdisasm" "cuda_nvml_dev" "cuda_nvprune" "cuda_nvrtc" "cuda_nvtx" "cuda_profiler_api" "cuda_sanitizer_api" "cudnn" "libcublas" "libcufft" "libcurand" "libcusolver" "libcusparse" "libnpp" "libnvjitlink" ]); }; }