diff --git a/nix-os/nvidia.nix b/nix-os/nvidia.nix index a9433f3..5da8b1d 100644 --- a/nix-os/nvidia.nix +++ b/nix-os/nvidia.nix @@ -1,4 +1,10 @@ -{ config, lib, pkgs, ...}: +{ + config, + lib, + pkgs, + self, + ... +}: { config = { @@ -16,14 +22,79 @@ powerManagement.enable = true; open = false; nvidiaSettings = true; - package = config.boot.kernelPackages.nvidiaPackages.mkDriver { - 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="; - }; + 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; }; diff --git a/update-list.nix b/update-list.nix index 9ce74c3..eaaa200 100644 --- a/update-list.nix +++ b/update-list.nix @@ -11,3 +11,26 @@ in { "inputs/cosmic-modules" = inputsWithPackages.cosmic-modules; "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" ] {}; +})