nixos-configuration/nix-os/nvidia.nix
2025-04-23 04:10:03 +02:00

101 lines
3.7 KiB
Nix

{
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;
};
}