{ config, lib, pkgs, self, ... }: { config = { hardware.graphics = { enable = true; enable32Bit = true; }; # Workaround for nvidia driver ghost display boot.kernelParams = [ "nvidia_drm.fbdev=1" ]; services.xserver.videoDrivers = ["nvidia"]; hardware.nvidia = { modesetting.enable = true; powerManagement.enable = true; open = false; nvidiaSettings = true; package = let mkDriverArgs = { version = "575.51.02"; sha256_64bit = "sha256-XZ0N8ISmoAC8p28DrGHk/YN1rJsInJ2dZNL8O+Tuaa0="; sha256_aarch64 = "sha256-NNeQU9sPfH1sq3d5RUq1MWT6+7mTo1SpVfzabYSVMVI="; openSha256 = "sha256-NQg+QDm9Gt+5bapbUO96UFsPnz1hG1dtEwT/g/vKHkw="; settingsSha256 = "sha256-6n9mVkEL39wJj5FB1HBml7TTJhNAhS/j5hqpNGFQE4w="; persistencedSha256 = "sha256-dgmco+clEIY8bedxHC4wp+fH5JavTzyI1BI8BxoeJJI="; }; in ( config.boot.kernelPackages.nvidiaPackages.mkDriver mkDriverArgs ).overrideAttrs (super: { passthru = super.passthru or {} // { urls = { x86_64 = [ "https://download.nvidia.com/XFree86/Linux-x86_64/${mkDriverArgs.version}/NVIDIA-Linux-x86_64-${mkDriverArgs.version}.run" "https://us.download.nvidia.com/XFree86/Linux-x86_64/${mkDriverArgs.version}/NVIDIA-Linux-x86_64-${mkDriverArgs.version}.run" ]; aarch64 = [ "https://us.download.nvidia.com/XFree86/aarch64/${mkDriverArgs.version}/NVIDIA-Linux-aarch64-${mkDriverArgs.version}.run" "https://download.nvidia.com/XFree86/Linux-aarch64/${mkDriverArgs.version}/NVIDIA-Linux-aarch64-${mkDriverArgs.version}.run" ]; }; updateScript = pkgs.den-http-get-updater { fileLocation = ( builtins.unsafeGetAttrPos "any" { any = null; } ).file; previousVersion = mkDriverArgs.version; versionUrl = "https://raw.githubusercontent.com/aaronp24/nvidia-versions/master/nvidia-versions.txt"; extraPackages = with pkgs; [ coreutils gawk gnugrep ]; contentParser = lib.concatStringsSep " | " [ "echo \"$newVersion\"" "grep current" "awk '{print $3}'" "sort -V" "tail -n 1" ]; unpack = false; prefetchList = lib.map (x: { inherit (x) previousHash; unpack = x.unpack or true; prefetchUrlLocation = { file = builtins.toString self + "/outputs.nix"; # TODO: don't use already existing NixOS configuration attrpath = "nixosConfigurations.main.config.hardware.nvidia.package.${x.locationAttrpath}"; }; }) [ { previousHash = mkDriverArgs.sha256_64bit; locationAttrpath = "urls.x86_64"; unpack = false; } { previousHash = mkDriverArgs.sha256_aarch64; locationAttrpath = "urls.aarch64"; unpack = false; } { previousHash = mkDriverArgs.openSha256; locationAttrpath = "open.src.urls"; } { previousHash = mkDriverArgs.settingsSha256; locationAttrpath = "settings.src.urls"; } { previousHash = mkDriverArgs.persistencedSha256; locationAttrpath = "persistenced.src.urls"; } ]; }; }; }); }; nixpkgs.config.nvidia.acceptLicense = true; }; }