Install matching kernel headers for every DKMS setup

This commit is contained in:
Ryan Hughes committed 2026-09-15 00:06:17 -04:00
1 parent d237995b3b
commit 662051ecde
13 files changed
+138 -13

No files matched your search

+2 -1
View File
@@ -10,7 +10,8 @@ set -e
echo "Installing Xbox controller Bluetooth support..."
# Install xpadneo to ensure controllers work out of the box
omarchy-pkg-add linux-headers xpadneo-dkms
omarchy-pkg-add-kernel-headers
omarchy-pkg-add xpadneo-dkms
# Prevent xpad/xpadneo driver conflict
echo blacklist xpad | sudo tee /etc/modprobe.d/blacklist-xpad.conf >/dev/null
+13
View File
@@ -0,0 +1,13 @@
#!/bin/bash
# omarchy:summary=Install headers for the supported system kernel
# omarchy:hidden=true
# omarchy:requires-sudo=true
# Inspect the target's packages: uname reports the live ISO kernel in a chroot.
# A retained stock kernel must not take precedence over the Omarchy kernel.
if omarchy-pkg-present linux-t2; then
omarchy-pkg-add linux-t2-headers
else
omarchy-pkg-add linux-omarchy-headers
fi
@@ -3,6 +3,7 @@ product_name="$(cat /sys/class/dmi/id/product_name 2>/dev/null)"
if [[ $product_name =~ MacBook[89],1|MacBook1[02],1|MacBookPro13,[123]|MacBookPro14,[123] ]]; then
echo "Detected MacBook with SPI keyboard"
omarchy-pkg-add-kernel-headers
omarchy-pkg-add macbook12-spi-driver-dkms
sudo mkdir -p /etc/mkinitcpio.conf.d
if [[ $product_name == "MacBook8,1" ]]; then
+2 -1
View File
@@ -6,5 +6,6 @@ pci_info=$(lspci -nn)
if (echo "$pci_info" | grep -q "14e4:43a0" || echo "$pci_info" | grep -q "14e4:4331"); then
echo "BCM4360 / BCM4331 detected"
omarchy-pkg-add broadcom-wl-dkms linux-omarchy-headers
omarchy-pkg-add-kernel-headers
omarchy-pkg-add broadcom-wl-dkms
fi
+2 -2
View File
@@ -4,8 +4,8 @@
# v4l2-relayd re-exposes it at 1280x720 under the same name.
if omarchy-hw-elgato-camlink-4k; then
mapfile -t kernel_headers < <(pacman -Qqs '^linux(-zen|-lts|-hardened|-t2|-ptl|-omarchy(-bore|-ptl-novrr-mm)?)?$' | sed 's/$/-headers/')
omarchy-pkg-add "${kernel_headers[@]}" v4l2loopback-dkms v4l2loopback-utils v4l2-relayd
omarchy-pkg-add-kernel-headers
omarchy-pkg-add v4l2loopback-dkms v4l2loopback-utils v4l2-relayd
sudo install -Dm644 "$OMARCHY_PATH/default/udev/elgato-camlink-4k.rules" /etc/udev/rules.d/71-elgato-camlink-4k.rules
sudo install -Dm644 "$OMARCHY_PATH/default/v4l2-relayd/camlink.conf" /etc/v4l2-relayd.d/camlink.conf
+2 -1
View File
@@ -1,7 +1,8 @@
# Install Tuxedo drivers for keyboard backlighting on Tuxedo laptops and
# compatible devices like the Slimbook Executive (Clevo/Tuxedo chassis).
if cat /sys/class/dmi/id/sys_vendor 2>/dev/null | grep -qi "TUXEDO\|Slimbook"; then
omarchy-pkg-add linux-omarchy-headers tuxedo-drivers-nocompatcheck-dkms
omarchy-pkg-add-kernel-headers
omarchy-pkg-add tuxedo-drivers-nocompatcheck-dkms
# Blacklist the legacy clevo_xsm_wmi module which conflicts with the tuxedo-drivers
# clevo_wmi module. When clevo_xsm_wmi loads first, it grabs the Clevo WMI GUIDs,
@@ -1,4 +1,5 @@
# Install drivers for Motorcomm YT6801 ethernet adapter used by the Slimbook Executive
if lspci | grep -i "YT6801\|Motorcomm.*Ethernet"; then
omarchy-pkg-add linux-omarchy-headers yt6801-dkms
omarchy-pkg-add-kernel-headers
omarchy-pkg-add yt6801-dkms
fi
+1
View File
@@ -1,5 +1,6 @@
# Install MIPI camera support for Intel IPU7 hardware
if grep -q "OVTI08F4" /sys/bus/acpi/devices/*/hid 2>/dev/null; then
omarchy-pkg-add-kernel-headers
omarchy-pkg-add intel-ipu7-camera
fi
+1 -4
View File
@@ -1,8 +1,4 @@
if lspci | grep -qi 'nvidia'; then
# Check which kernel is installed and set appropriate headers package
KERNEL_PACKAGE=$(pacman -Qqs '^linux(-zen|-lts|-hardened|-t2|-ptl|-omarchy(-bore|-ptl-novrr-mm)?)?$' | head -1 || true)
[[ -n $KERNEL_PACKAGE ]] && omarchy-pkg-add "$KERNEL_PACKAGE-headers"
if omarchy-hw-nvidia-gsp; then
PACKAGES=(nvidia-open-dkms nvidia-utils lib32-nvidia-utils libva-nvidia-driver)
elif omarchy-hw-nvidia-without-gsp; then
@@ -15,6 +11,7 @@ if lspci | grep -qi 'nvidia'; then
exit 0
fi
omarchy-pkg-add-kernel-headers
omarchy-pkg-add "${PACKAGES[@]}"
# Per-session Hyprland NVIDIA env vars are handled by default/hypr/nvidia.lua.
-2
View File
@@ -20,9 +20,7 @@ libva-nvidia-driver
limine
limine-mkinitcpio-hook
limine-snapper-sync
linux
linux-firmware
linux-headers
linux-omarchy
linux-omarchy-headers
macbook12-spi-driver-dkms
+8
View File
@@ -0,0 +1,8 @@
echo "Install missing headers for the Omarchy or T2 kernel"
# Fresh ISO installs mark earlier migrations complete, so the kernel migration
# cannot repair headers omitted by those installers. Package installation is
# idempotent when another user has already applied this repair.
if omarchy-pkg-present linux-omarchy || omarchy-pkg-present linux-t2; then
omarchy-pkg-add-kernel-headers
fi
+15 -1
View File
@@ -24,6 +24,20 @@ verify_core_packages() {
pass "all Omarchy core packages are installed (${#missing[@]} missing)"
}
verify_kernel_headers() {
local kernel=linux-omarchy
local release
release=$(uname -r)
omarchy-pkg-present linux-t2 && kernel=linux-t2
[[ $(cat "/usr/lib/modules/$release/pkgbase") == "$kernel" ]] ||
fail "the installed system boots the supported kernel" "$release is not $kernel"
omarchy-pkg-present "$kernel-headers" || fail "kernel headers are installed" "$kernel-headers is missing"
[[ $(cat "/usr/lib/modules/$release/build/include/config/kernel.release") == "$release" ]] ||
fail "headers match the running kernel" "$release has missing or mismatched headers"
pass "the running $kernel kernel has matching headers ($release)"
}
verify_defaults() {
[[ $(omarchy-default-browser) == "chromium" ]] || fail "Chromium is the default browser"
pass "Chromium is the default browser"
@@ -112,7 +126,7 @@ verify_user_setup() {
pass "Omarchy user state and shell configuration exist"
}
for check in verify_core_packages verify_defaults verify_services verify_runtime_tools verify_user_setup; do
for check in verify_core_packages verify_kernel_headers verify_defaults verify_services verify_runtime_tools verify_user_setup; do
if ! ("$check"); then
status=1
fi
+89
View File
@@ -0,0 +1,89 @@
#!/bin/bash
set -euo pipefail
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"
tmp_dir=$(mktemp -d)
trap 'rm -rf "$tmp_dir"' EXIT
mkdir -p "$tmp_dir/bin" "$tmp_dir/etc/modprobe.d" "$tmp_dir/sys/class/dmi/id" "$tmp_dir/sys/bus/acpi/devices/camera"
export INSTALLED_PACKAGES="$tmp_dir/installed" CALL_LOG="$tmp_dir/calls"
export PATH="$tmp_dir/bin:$ROOT/bin:$PATH" OMARCHY_PATH="$ROOT"
cat > "$tmp_dir/bin/pacman" <<'SH'
#!/bin/bash
[[ $1 == "-Q" ]] || exit 1
grep -Fxq -- "$2" "$INSTALLED_PACKAGES"
SH
cat > "$tmp_dir/bin/omarchy-pkg-add" <<'SH'
#!/bin/bash
printf '%s\n' "$*" >> "$CALL_LOG"
[[ ${FAIL_HEADERS:-0} != 1 || $* != *-headers* ]]
SH
cat > "$tmp_dir/bin/lspci" <<'SH'
#!/bin/bash
printf '%s\n' 'NVIDIA [10de:2560]' 'Broadcom [14e4:43a0]' 'Motorcomm YT6801 Ethernet'
SH
cat > "$tmp_dir/bin/id" <<'SH'
#!/bin/bash
echo input
SH
for command in sudo lsmod omarchy-hw-nvidia-gsp omarchy-hw-elgato-camlink-4k; do
printf '#!/bin/bash\nexit 0\n' > "$tmp_dir/bin/$command"
done
chmod +x "$tmp_dir/bin/"*
for installed in linux-omarchy linux-t2 linux; do
echo "$installed" > "$INSTALLED_PACKAGES"
: > "$CALL_LOG"
bash -euo pipefail "$ROOT/migrations/1789444024.sh" >/dev/null
if [[ $installed == "linux" ]]; then
[[ ! -s $CALL_LOG ]] || fail "header repair skips systems without a supported kernel"
else
[[ $(cat "$CALL_LOG") == "$installed-headers" ]] || fail "header repair covers existing $installed installs"
fi
done
pass "header repair covers existing Omarchy and T2 installs"
echo MacBook8,1 > "$tmp_dir/sys/class/dmi/id/product_name"
echo TUXEDO > "$tmp_dir/sys/class/dmi/id/sys_vendor"
echo OVTI08F4 > "$tmp_dir/sys/bus/acpi/devices/camera/hid"
for installed in 'linux-omarchy' 'linux linux-omarchy' 'linux' 'linux-t2' 'linux linux-omarchy linux-t2'; do
expected=linux-omarchy-headers
[[ $installed == *linux-t2* ]] && expected=linux-t2-headers
read -ra packages <<< "$installed"
printf '%s\n' "${packages[@]}" > "$INSTALLED_PACKAGES"
: > "$CALL_LOG"
omarchy-pkg-add-kernel-headers
[[ $(cat "$CALL_LOG") == "$expected" ]] || fail "headers match supported kernel with $installed installed"
pass "headers match supported kernel with $installed installed"
done
# Run every DKMS installer against hardware fixtures and stub package writes.
# Redirect absolute filesystem paths in sourced leaves into the fixture too.
for family in linux-omarchy linux-t2; do
printf '%s\n' linux "$family" > "$INSTALLED_PACKAGES"
for script in \
bin/omarchy-install-gaming-xbox-controllers \
install/hardware/nvidia.sh \
install/hardware/apple/fix-spi-keyboard.sh \
install/hardware/intel/ipu7-camera.sh \
install/hardware/fix-bcm43xx.sh \
install/hardware/fix-tuxedo-backlight.sh \
install/hardware/fix-yt6801-ethernet-adapter.sh \
install/hardware/fix-elgato-camlink-4k.sh; do
sed -e "s|/etc/|$tmp_dir/etc/|g" -e "s|/sys/|$tmp_dir/sys/|g" \
-e "s|/lib/modules/|$tmp_dir/lib/modules/|g" "$ROOT/$script" > "$tmp_dir/installer.sh"
: > "$CALL_LOG"
bash -e "$tmp_dir/installer.sh" >/dev/null
[[ $(head -1 "$CALL_LOG") == "$family-headers" ]] || fail "$script installs $family headers first" "$(cat "$CALL_LOG")"
(( $(wc -l < "$CALL_LOG") == 2 )) || fail "$script installs its driver after the headers"
! grep -wq linux-headers "$CALL_LOG" || fail "$script avoids stock headers"
: > "$CALL_LOG"
if FAIL_HEADERS=1 bash -e "$tmp_dir/installer.sh" >/dev/null; then
fail "$script stops when headers cannot be installed"
fi
[[ $(cat "$CALL_LOG") == "$family-headers" ]] || fail "$script must not install DKMS drivers without headers"
pass "$script uses $family headers and stops on header installation failure"
done
done