Kernels

Choosing one

A_KERNEL=Arctic-base-kernel
Arctic-base-kernel the default. Linux 7.1.3, broad hardware support, most drivers as modules.
Arctic-kernel Linux 6.12 LTS with the ZEN patchset merged on top.
Arctic-libre-kernel no binary blob loading, no nonfree microcode.
Arctic-small-kernel monolithic, no module loader, no initramfs needed. Fast boot, fixed hardware.
Arctic-rt-kernel realtime preemption.
Arctic-hardened-kernel hardening options turned up.

More than one can be installed at once; the bootloader lists each.

Arctic-kernel

A real fork, not a config change: github.com/apiwo/arctic-kernel. Linux 6.12 LTS with the ZEN patchset merged on top, plus an Arctic patch of its own.

What ZEN brings:

The Arctic patch on top raises default readahead to 512 KiB.

The merge was reconciled by hand against 83 upstream point releases of drift (6.12.17 to 6.12.100). What applied cleanly, what needed rework and what was dropped is written down honestly in the repo's PATCHES.md — including the one hunk that was dropped rather than guessed at.

The kernel Arctic ships is built with the same configuration Arctic-base-kernel uses, so the difference between them is the patchset, not the options.

The Arctic kernel configuration

Both kernels start from the distribution config and apply the same delta, for reasons worth knowing:

Arctic-small-kernel additionally disables the module loader entirely: everything it can do, it does without modules, and it needs no initramfs.

Building a kernel yourself

git clone https://github.com/apiwo/arctic-kernel
cd arctic-kernel
container/build.sh Default-config/config default bzImage modules

The build runs inside bubblewrap: the host toolchain bound read-only, no network, and the build's own output directory the only writable path. No docker or podman needed.

Four configurations ship: Default-config, Hardened-config, Small-config, RT-config.

To build it as an Arctic package instead, with Arctic's own configuration, see building from source.

Microcode and firmware

A_MICROCODE=auto     # or intel, amd, none

auto reads /proc/cpuinfo and installs intel-ucode or amd-ucode. Firmware comes from linux-firmware, which Arctic-libre-kernel deliberately skips.

Changing kernel later

The kernel is a package like any other, so it is declared like one:

SYS_PACKAGES="
	Arctic-kernel
	...
"
arctic-rebuild

Which means a kernel change is a generation, and a kernel that does not boot is one boot-menu entry away from being undone. See generations.

More: arctic linux docs · install · declarative configuration · generations and rollback · init systems · packages (alpm) · desktops and audio · ephemeral shells · musl · building from source