Without the change `primusLib.glvnd.settings` fails the eval without a
chance of recovery (uncatchable error):
$ NIXPKGS_ALLOW_UNFREE=1 nix build --no-link -f. primusLib.glvnd.settings
error:
… while calling the 'derivationStrict' builtin
at /derivation-internal.nix:9:12:
8|
9| strict = derivationStrict drvAttrs;
| ^
10|
… while evaluating derivation 'nvidia-settings-545.29.06'
whose name attribute is located at pkgs/stdenv/generic/make-derivation.nix:348:7
… while evaluating attribute 'postPatch' of derivation 'nvidia-settings-545.29.06'
at pkgs/os-specific/linux/nvidia-x11/settings.nix:81:3:
80|
81| postPatch = lib.optionalString nvidia_x11.useProfiles ''
| ^
82| sed -i 's,/usr/share/nvidia/,${nvidia_x11.bin}/share/nvidia/,g' src/gtk+-2.x/ctkappprofile.c
error: attribute 'bin' missing
at pkgs/os-specific/linux/nvidia-x11/settings.nix:82:36:
81| postPatch = lib.optionalString nvidia_x11.useProfiles ''
82| sed -i 's,/usr/share/nvidia/,${nvidia_x11.bin}/share/nvidia/,g' src/gtk+-2.x/ctkappprofile.c
| ^
83| '';
After the change `builtins.tryEval` can catch errors thrown by `assert`.
Right now, hashes for 4.14 are kept (and thus also maintained by the
hardened updater) even though we don't support that anymore, the oldest
supported branch is 4.19.
To avoid having to remember too many places where to drop a kernel when
dropping an old one (next will be 4.19), the oldest kernel branch will
be determined by the lowest version number in the keys of
`kernels-org.json`. That way, it's sufficient to drop an old branch
from this file and it will be ignored on the upcoming update runs.
Yes, the code to read from that file is duplicated, but I'd expect the
min version to change way more often than 3 lines of code reading a
version from a JSON file[1].
The logic is fairly simple though: if the branch (i.e. MAJOR.MINOR) of a
kernel that's listed on kernel.org[2] is older than the oldest version
in `kernels-org.json`, it's omitted on update and a message is printed
like this:
[...]
linux_5_4: 5.4.265 is latest, skipping...
linux_4_19: 4.19.303 is latest, skipping...
4.14 is too old and not supported anymore, skipping...
Kernels that have the branch `testing` are excluded from that check and
always allowed.
[1] Also, I'm unhappy already that I can't just do a relative import in
here to deduplicate the function and for 3 lines of code it seems
like unnecessarily much effort to create a python package structure
here.
[2] Kernels that got unlisted there are too old to be added/kept here
anyways.
This one isn't 4.14 anymore and that should've been updated while
removing 4.14, but is easy to miss.
Since it's not expected that we have versions older than the oldest
mainline version from `kernels-org.json`, determine the minimum
supported version by reading it from there.
Also, this means lesser places to update when dropping old kernels.
This needs an additional change for the mainline updater to make sure
that no older versions appear there[1]. This will be implemented in
the next commit.
[1] At the time of implementing this, the oldest supported kernel was
4.19, however 4.14 wasn't EOL yet and thus still picked up by the
mainline updater.