{ 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 = "570.133.07"; sha256_64bit = "sha256-LUPmTFgb5e9VTemIixqpADfvbUX1QoTT2dztwI3E3CY="; sha256_aarch64 = "sha256-yTovUno/1TkakemRlNpNB91U+V04ACTMwPEhDok7jI0="; openSha256 = "sha256-9l8N83Spj0MccA8+8R1uqiXBS0Ag4JrLPjrU3TaXHnM="; settingsSha256 = "sha256-XMk+FvTlGpMquM8aE8kgYK2PIEszUZD2+Zmj2OpYrzU="; persistencedSha256 = "sha256-G1V7JtHQbfnSRfVjz/LE2fYTlh9okpCbE4dfX9oYSg8="; }; 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; }; }