HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs) # The proprietary NVIDIA driver does early KMS itself: nvidia.conf (written by # install/hardware/nvidia.sh, sourced before this file) early-loads nvidia_drm # with modeset=1. Keeping the kms hook on such a system makes autodetect pull # in nouveau — and ~100 MB of its GSP firmware — for a driver that never runs. # Drop kms only when nvidia_drm is early-loaded and NVIDIA owns every display # controller. Hybrid systems keep kms: their iGPU still needs it for early # KMS at the LUKS prompt. So does anything unexpected, like a PCI tree that # cannot be read. # # This reads MODULES midway through mkinitcpio's drop-in sourcing, so a # later-sorting drop-in that resets MODULES outright — surface_device_modules.conf # does — would strip nvidia_drm after kms was already dropped. Every machine # Omarchy writes such a file for carries an Intel iGPU, which keeps kms here # through the scan below; keep it that way. if [[ " ${MODULES[*]:-} " == *" nvidia_drm "* ]]; then _omarchy_nvidia_gpu=0 _omarchy_other_gpu=0 for _omarchy_pci in "${OMARCHY_PCI_DEVICES_PATH:-/sys/bus/pci/devices}"/*; do if [[ ! -r $_omarchy_pci/class || ! -r $_omarchy_pci/vendor ]]; then # An unreadable device could be another GPU. Inconclusive keeps kms. _omarchy_other_gpu=1 continue fi [[ $(<"$_omarchy_pci/class") == "0x03"* ]] || continue if [[ $(<"$_omarchy_pci/vendor") == "0x10de" ]]; then _omarchy_nvidia_gpu=1 else _omarchy_other_gpu=1 fi done if ((_omarchy_nvidia_gpu && !_omarchy_other_gpu)); then _omarchy_hooks=() for _omarchy_hook in "${HOOKS[@]}"; do [[ $_omarchy_hook == "kms" ]] || _omarchy_hooks+=("$_omarchy_hook") done HOOKS=("${_omarchy_hooks[@]}") fi unset _omarchy_nvidia_gpu _omarchy_other_gpu _omarchy_pci _omarchy_hooks _omarchy_hook fi # Bundle vconsole.conf so Plymouth uses the configured keyboard layout at the # LUKS prompt, but only when that layout types Latin letters. Passphrases are # Latin characters, so bundling a Hebrew/Greek/Cyrillic/Arabic layout would # make the correct passphrase untypeable and lock the user out. if [[ -f /etc/vconsole.conf ]]; then case $(. /etc/vconsole.conf && echo "${XKBLAYOUT%%,*}") in af | am | ara | bd | bg | by | et | ge | gr | il | in | iq | ir | kg | kh | kz | la | lk | mk | mm | mn | mv | np | rs | ru | sy | th | tj | ua) ;; *) FILES+=(/etc/vconsole.conf) ;; esac fi