diff --git a/setup/arch-autoinstall.sh b/setup/arch-autoinstall.sh index 29799d7..fb443c6 100755 --- a/setup/arch-autoinstall.sh +++ b/setup/arch-autoinstall.sh @@ -4,7 +4,7 @@ # If /answerfile.json exists (e.g. embedded in the ISO via build.sh --preconf), # all prompts are answered from it. Missing fields fall back to interactive prompts. # -# Answerfile fields: drive, kernel, hostname, username, encrypt, fido2_root, +# Answerfile fields: drive, kernel, keymap, hostname, username, encrypt, fido2_root, # fido2_user, run_tui (password always prompted interactively) set -euo pipefail @@ -55,6 +55,35 @@ if $AF_MODE; then command -v jq &>/dev/null || pacman -Sy --noconfirm jq fi +############################################ +# KEYMAP +# To add more layouts: append "code|Display Name" to KEYMAPS +############################################ +KEYMAPS=( + "us|English US" + "de|German" +) + +if $AF_MODE; then + LIVE_KEYMAP=$(af_get '.keymap' 'us') +else + echo "Select keyboard layout:" + for i in "${!KEYMAPS[@]}"; do + _km_code="${KEYMAPS[$i]%%|*}" + _km_name="${KEYMAPS[$i]##*|}" + printf " %d) %-14s (%s)\n" $((i+1)) "$_km_name" "$_km_code" + done + read -rp "Choice [1]: " _KM_IDX + _KM_IDX=$(( ${_KM_IDX:-1} - 1 )) + if (( _KM_IDX >= 0 && _KM_IDX < ${#KEYMAPS[@]} )); then + LIVE_KEYMAP="${KEYMAPS[$_KM_IDX]%%|*}" + else + LIVE_KEYMAP="${KEYMAPS[0]%%|*}" + fi +fi +loadkeys "$LIVE_KEYMAP" +KEYMAP="$LIVE_KEYMAP" + ############################################ # SAFETY WARNING ############################################ @@ -263,7 +292,7 @@ fi ############################################ # PASS VARIABLES INTO CHROOT ############################################ -export HOSTNAME USERNAME USERPASS ROOT_PART KERNEL FIDO_ROOT FIDO_USER ENCRYPT_DISK +export HOSTNAME USERNAME USERPASS ROOT_PART KERNEL FIDO_ROOT FIDO_USER ENCRYPT_DISK KEYMAP ############################################ # CHROOT CONFIGURATION @@ -275,6 +304,7 @@ set -euo pipefail echo "en_US.UTF-8 UTF-8" > /etc/locale.gen locale-gen echo "LANG=en_US.UTF-8" > /etc/locale.conf +echo "KEYMAP=${KEYMAP}" > /etc/vconsole.conf # Time / hostname ln -sf /usr/share/zoneinfo/Europe/Vienna /etc/localtime diff --git a/setup/generate-answerfile.sh b/setup/generate-answerfile.sh index 6e05e95..8bc7e45 100644 --- a/setup/generate-answerfile.sh +++ b/setup/generate-answerfile.sh @@ -118,6 +118,14 @@ AF_KERNEL=$(dialog --backtitle "$BACKTITLE" \ "linux-zen" "Zen performance kernel" \ 3>&1 1>&2 2>&3) || AF_KERNEL="linux" +# ── Keymap ──────────────────────────────────────────────────────────────────── +AF_KEYMAP=$(dialog --backtitle "$BACKTITLE" \ + --title " Keyboard Layout " \ + --menu "Select keyboard layout (live environment + installed system):" 10 60 2 \ + "us" "English US" \ + "de" "German" \ + 3>&1 1>&2 2>&3) || AF_KEYMAP="us" + # ── Hostname ────────────────────────────────────────────────────────────────── AF_HOSTNAME=$(dialog --backtitle "$BACKTITLE" \ --title " Hostname " \ @@ -315,6 +323,7 @@ fi SUMMARY="" [[ -n "$AF_DRIVE" ]] && SUMMARY+=" Drive: $AF_DRIVE\n" [[ -n "$AF_KERNEL" ]] && SUMMARY+=" Kernel: $AF_KERNEL\n" +[[ -n "$AF_KEYMAP" ]] && SUMMARY+=" Keymap: $AF_KEYMAP\n" [[ -n "$AF_HOSTNAME" ]] && SUMMARY+=" Hostname: $AF_HOSTNAME (+ MAC suffix at deploy)\n" [[ -n "$AF_USERNAME" ]] && SUMMARY+=" Username: $AF_USERNAME\n" SUMMARY+=" Encrypt: $AF_ENCRYPT\n" @@ -349,6 +358,7 @@ mkdir -p "$(dirname "$OUTPUT")" printf ' "_generated": "%s",\n' "$(date -Iseconds)" printf ' "drive": %s,\n' "$(json_str "$AF_DRIVE")" printf ' "kernel": %s,\n' "$(json_str "$AF_KERNEL")" + printf ' "keymap": %s,\n' "$(json_str "$AF_KEYMAP")" printf ' "hostname": %s,\n' "$(json_str "$AF_HOSTNAME")" printf ' "username": %s,\n' "$(json_str "$AF_USERNAME")" printf ' "encrypt": %s,\n' "$AF_ENCRYPT"