nixos/nvidia: add updater for the driver package

This commit is contained in:
Wroclaw 2025-04-07 21:56:41 +02:00
parent 735a41ca0f
commit 5bddee4588
2 changed files with 103 additions and 9 deletions

View file

@ -1,4 +1,10 @@
{ config, lib, pkgs, ...}: {
config,
lib,
pkgs,
self,
...
}:
{ {
config = { config = {
@ -16,14 +22,79 @@
powerManagement.enable = true; powerManagement.enable = true;
open = false; open = false;
nvidiaSettings = true; nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.mkDriver { package = let
version = "570.133.07"; mkDriverArgs = {
sha256_64bit = "sha256-LUPmTFgb5e9VTemIixqpADfvbUX1QoTT2dztwI3E3CY="; version = "570.133.07";
sha256_aarch64 = "sha256-yTovUno/1TkakemRlNpNB91U+V04ACTMwPEhDok7jI0="; sha256_64bit = "sha256-LUPmTFgb5e9VTemIixqpADfvbUX1QoTT2dztwI3E3CY=";
openSha256 = "sha256-9l8N83Spj0MccA8+8R1uqiXBS0Ag4JrLPjrU3TaXHnM="; sha256_aarch64 = "sha256-yTovUno/1TkakemRlNpNB91U+V04ACTMwPEhDok7jI0=";
settingsSha256 = "sha256-XMk+FvTlGpMquM8aE8kgYK2PIEszUZD2+Zmj2OpYrzU="; openSha256 = "sha256-9l8N83Spj0MccA8+8R1uqiXBS0Ag4JrLPjrU3TaXHnM=";
persistencedSha256 = "sha256-G1V7JtHQbfnSRfVjz/LE2fYTlh9okpCbE4dfX9oYSg8="; 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; nixpkgs.config.nvidia.acceptLicense = true;
}; };

View file

@ -11,3 +11,26 @@ in {
"inputs/cosmic-modules" = inputsWithPackages.cosmic-modules; "inputs/cosmic-modules" = inputsWithPackages.cosmic-modules;
"inputs/nixos-vscode-server" = inputsWithPackages.nixos-vscode-server; "inputs/nixos-vscode-server" = inputsWithPackages.nixos-vscode-server;
}) })
# MARK: NixOS modules
// ( let
pkgs = self.modifiedNixpkgsPure {
localSystem = builtins.currentSystem;
config.allowUnfree = true;
};
lib = pkgs.lib;
mkUpdater = path: attrpath: extraModule: let
system = pkgs.nixos {
imports = [ path extraModule ];
config = {
_module.args = {
inherit self;
inherit (self) inputs;
};
system.stateVersion = lib.versions.pad 2 lib.trivial.verison;
};
};
in lib.getAttrFromPath ( [ "config" ] ++ attrpath ) system;
in {
"NixOS/nvidia" = mkUpdater ./nix-os/nvidia.nix [ "hardware" "nvidia" "package" ] {};
})