#!/bin/bash architecture="x86_64" linux_packages="linux linux-lts" declare -A module2package module2package[nvidia]="$(pacman -Qqs nvidia dkms)" module2package[vboxhost]=virtualbox-host-dkms module2package[broadcom-wl]=broadcom-wl-dkms module2package[spl]=spl-dkms module2package[zfs]=zfs-dkms echo "# Running: $(uname -r)" for linux in $linux_packages; do echo "# Installed: $(pacman -Q "$linux")" done echo find /var/lib/dkms/ -maxdepth 2 -type l -name 'kernel-*' | while read line; do module_name="$(echo "$line" | cut -d/ -f5)" package_name="${module2package[$module_name]}" if [ -z "$package_name" ]; then echo "Unknown module: $module_name" exit 1 fi module_version="$(pacman -Q "${package_name}" | cut -d' ' -f2 | cut -d'-' -f1)" long_kernel_version="$(echo "$line" | cut -d/ -f6)" kernel_version="$(echo "$long_kernel_version" | sed -e 's/^kernel-//' -e "s/-${architecture}\$//")" if [ "$kernel_version" = "$(uname -r)" ]; then continue fi echo dkms remove -m "$module_name" -v "$module_version" -k "$kernel_version" done echo find /lib/modules/ -maxdepth 1 -type d -name '[0-9]*' | while read line; do if pacman -Qo "$line" &> /dev/null; then continue fi echo rm -rf "$line" done