diff --git a/etc/mkinitcpio.conf.d/omarchy_hooks.conf b/etc/mkinitcpio.conf.d/omarchy_hooks.conf index d75f4ac1..a8e39629 100644 --- a/etc/mkinitcpio.conf.d/omarchy_hooks.conf +++ b/etc/mkinitcpio.conf.d/omarchy_hooks.conf @@ -1,2 +1,12 @@ HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs) -FILES+=(/etc/vconsole.conf) + +# 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 diff --git a/migrations/1784476564.sh b/migrations/1784476564.sh new file mode 100644 index 00000000..1de97cd4 --- /dev/null +++ b/migrations/1784476564.sh @@ -0,0 +1,20 @@ +echo "Keep non-Latin keyboard layouts out of the initramfs so the LUKS passphrase stays typeable" + +# Bundling vconsole.conf in the initramfs makes Plymouth apply the user's +# layout at the LUKS prompt. For layouts that don't type Latin letters, that +# makes the (Latin) passphrase untypeable and locks the user out (#6229). +# Drop the bundling for those layouts and rebuild the UKI. The packaged +# omarchy_hooks.conf now applies the same condition on every rebuild. + +hooks_conf="/etc/mkinitcpio.conf.d/omarchy_hooks.conf" + +layout=$(. /etc/vconsole.conf 2>/dev/null && echo "${XKBLAYOUT%%,*}") + +if [[ $layout =~ ^(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)$ ]] && + [[ -f $hooks_conf ]] && grep -qx 'FILES+=(/etc/vconsole.conf)' "$hooks_conf"; then + sudo sed -i '\|^FILES+=(/etc/vconsole.conf)$|d' "$hooks_conf" + + if omarchy-cmd-present limine-mkinitcpio; then + sudo limine-mkinitcpio + fi +fi