{ 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.64"; sha256_64bit = "sha256-6wG8/nOwbH0ktgg8J+ZBT2l5VC8G5lYBQhtkzMCtaLE="; sha256_aarch64 = "sha256-uHj8fB1sSJfX0NWZEE1eZN1LQQkf7J0jPV3EeQCSG10="; openSha256 = "sha256-y93FdR5TZuurDlxc/p5D5+a7OH93qU4hwQqMXorcs/g="; settingsSha256 = "sha256-3BvryH7p0ioweNN4S8oLDCTSS47fQPWVYwNq4AuWQgQ="; persistencedSha256 = "sha256-QkDNQKwCsakZOLcSie1NBiFCM5e5NFGiIKtPSFeWdXs="; patches = [ (pkgs.fetchpatch { url = "https://raw.githubusercontent.com/rpmfusion/nvidia-kmod/020f5fabfb067150f8dd0d6e470a7a694f59eb59/Workaround-nv_vm_flags_-calling-GPL-only-code.patch"; hash = "sha256-2WQs8WDVzNivwUSWn7t2hoduUVvmem5e+JpGt04380c="; }) ]; }; 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; }; }