# Overriding nvidia-persistenced for NixOS

As an overlay:

nvidia = _: super: {
linuxPackages_5_8 = super.linuxPackages_5_8.extend (_: superLinux: {
nvidia_x11 = superLinux.nvidia_x11 // {
persistenced = superLinux.nvidia_x11.passthru.persistenced.overrideAttrs
(o: {
nativeBuildInputs = [ super.m4 super.pkg-config ];
buildInputs = [ super.libtirpc ];
});
};
});
};

Explanation:

• linuxPackages must be extended rather than overridden
• nvidia_x11 is both an attrset and a derivation, but I’m interested in overriding persistenced which is just attached to the derivation as an attribute. Consequently, // is used rather than .overrideAttrs.
• passthru is required to override the “real” persistenced. overrideAttrs should be greatly preferred over override or overrideDerivation; both of which don’t behave like you would intuitively expect.
• Finally, the override can take place as normal.

A complete integration example might look something like this:

let
overlays = [ nvidia ]; # where "nvidia" is the function defined above
pkgs = import <nixpkgs> { inherit overlays; };
in {
# rest of config goes here
}

Although it’s important to note that this example isn’t necessarily “production ready”. If you’re going to make deep and custom changes like this, it’s a very good idea to start pinning your nixpkgs explicitly.