Я честно пытался осилить сам. Но… я не знаю, документация по NixOS это полный провал. Не знаю как это цензурно описать.
Задача: есть .config файл, заранее подготовленный. Получить конфигурацию на ядре с таким конфигом.
По этому поводу в NixOS Manual (https://nixos.org/manual/nixos/unstable/#sec-linux-config-customizing) вижу вот это:
custom-kernel = let base_kernel = linuxKernel.kernels.linux_4_9;
in super.linuxKernel.manualConfig {
inherit (super) stdenv hostPlatform;
inherit (base_kernel) src;
version = "${base_kernel.version}-custom";
configfile = /home/me/my_kernel_config;
allowImportFromDerivation = true;
};
Сразу вохникает вопрос. Что это? К чему это? Куда это пихать?
Вообще вопрос «куда это пихать» возникает на каждом первом примере по Nix. Начинаю подозревать что это какой-то заговор - давать куски кода совершенно без контекста, чтобы было максимально непонятно как их применить.
Ну ладно, по .super я догадываюсь что наверное это внутренности оверлея (но я честно не уверен). Делаю тогда так в configuration.nix:
boot.kernelPackages = pkgs.custom_kernel;
nixpkgs.overlays = [(self: super: {
custom_kernel = let base_kernel = pkgs.linuxKernel.kernels.linux_5_15;
in super.linuxKernel.manualConfig {
inherit (super) stdenv lib;
inherit (base_kernel) src;
version = "${base_kernel.version}-custom";
configfile = ./config;
allowImportFromDerivation = true;
};
}) ];
Как видно код не совпадает с тем что в Manual, потому что в том мануальном коде сразу возникает ряд ошибок - нет параметра lib, лишний параметр hostPlatform. Спрашивается, почему так? Не понятно.
В итоге с вот этим кодом выше - получаю ошибку:
error: attribute 'extend' missing
at /nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/system/boot/kernel.nix:40:31:
39| type = types.unspecified // { merge = mergeEqualOption; };
40| apply = kernelPackages: kernelPackages.extend (self: super: {
| ^
41| kernel = super.kernel.override (originalArgs: {
что с этим делать?
Вот как для этой простейшей задачи (и очень распространенной) простейший пример из документации я должен применить? Я не понимаю…