2023-02-27 21:18:25 +01:00
|
|
|
#!/usr/bin/env bash
|
2023-08-11 17:19:18 +02:00
|
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
2023-02-27 21:18:25 +01:00
|
|
|
# written by Tobias Powalowski <tpowa@archlinux.org>
|
2023-09-03 22:02:48 +02:00
|
|
|
. /usr/lib/archboot/common.sh
|
2024-03-20 16:48:05 +01:00
|
|
|
_TITLE="archboot.com | ${_RUNNING_ARCH} | ${_RUNNING_KERNEL} | Basic Setup | Localization"
|
2023-02-27 21:18:25 +01:00
|
|
|
|
2023-07-21 15:15:42 +02:00
|
|
|
_locale_menu() {
|
2023-02-27 21:18:25 +01:00
|
|
|
_LOCALE=""
|
2023-07-21 15:19:41 +02:00
|
|
|
while [[ -z "${_LOCALE}" ]]; do
|
|
|
|
_LOCALE=""
|
|
|
|
_LOCALES="en_US English de_DE German es_ES Spanish fr_FR French pt_PT Portuguese OTHER Other"
|
2023-09-24 22:24:16 +02:00
|
|
|
_OTHER_LOCALES="be_BY Belarusian bg_BG Bulgarian cs_CZ Czech da_DK Dansk fi_FI Finnish el_GR Greek hu_HU Hungarian it_IT Italian lt_LT Lithuanian lv_LV Latvian mk_MK Macedonian nl_NL Dutch nn_NO Norwegian pl_PL Polish ro_RO Romanian ru_RU Russian sk_SK Slovak sr_RS Serbian sv_SE Swedish tr_TR Turkish uk_UA Ukrainian"
|
2023-07-21 15:19:41 +02:00
|
|
|
_CANCEL=""
|
2023-03-05 14:05:51 +01:00
|
|
|
#shellcheck disable=SC2086
|
2023-09-06 09:27:01 +02:00
|
|
|
_dialog --cancel-label "${_LABEL}" --title " Locale " --menu "" 12 35 5 ${_LOCALES} 2>${_ANSWER} || _abort
|
2023-07-21 15:25:22 +02:00
|
|
|
_LOCALE=$(cat "${_ANSWER}")
|
2023-07-21 15:19:41 +02:00
|
|
|
if [[ "${_LOCALE}" == "OTHER" ]]; then
|
|
|
|
#shellcheck disable=SC2086
|
2023-09-06 09:09:26 +02:00
|
|
|
if _dialog --title " Other Locale " --menu "" 17 35 11 ${_OTHER_LOCALES} 2>${_ANSWER}; then
|
2023-07-21 15:19:41 +02:00
|
|
|
_LOCALE=$(cat ${_ANSWER})
|
|
|
|
else
|
|
|
|
_LOCALE=""
|
|
|
|
fi
|
2023-07-14 16:44:30 +02:00
|
|
|
fi
|
2023-07-21 15:19:41 +02:00
|
|
|
done
|
2023-02-27 21:18:25 +01:00
|
|
|
}
|
|
|
|
|
2023-07-21 14:50:27 +02:00
|
|
|
_vconsole_keymap() {
|
2023-07-21 14:59:02 +02:00
|
|
|
_LIST_MAPS="localectl list-keymaps --no-pager"
|
2023-09-24 22:24:16 +02:00
|
|
|
_KEYMAPS="us de es fr pt be bg br ca cz dk et fi gr hu it lt lv mk nl no pl ro ru sk sr sv tr ua"
|
2023-07-21 15:25:22 +02:00
|
|
|
_LOW_LOCALE="$(echo "${_LOCALE}" | tr "[:upper:]" "[:lower:]")"
|
2023-07-21 14:59:02 +02:00
|
|
|
for i in ${_KEYMAPS}; do
|
2024-06-26 20:29:55 +02:00
|
|
|
echo "${_LOW_LOCALE}" | rg -q "${i}" && _DETECTED_KEYMAP="${i}"
|
2023-09-22 21:39:55 +02:00
|
|
|
[[ -n ${_DETECTED_KEYMAP} ]] && break
|
2023-07-21 14:50:27 +02:00
|
|
|
done
|
2023-09-22 21:43:34 +02:00
|
|
|
_KEYMAP=""
|
2023-09-22 22:31:05 +02:00
|
|
|
# Germany and Estonian
|
2024-06-26 20:29:55 +02:00
|
|
|
if ${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}" | rg -q "nodeadkeys"; then
|
|
|
|
_KEYMAP="$(${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}" | rg "nodeadkeys")"
|
2023-09-22 22:31:05 +02:00
|
|
|
# Europe
|
2024-06-26 20:29:55 +02:00
|
|
|
elif ${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}" | rg -q "^${_DETECTED_KEYMAP}-latin1$"; then
|
|
|
|
_KEYMAP="$(${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}" | rg "^${_DETECTED_KEYMAP}-latin1$")"
|
2023-09-22 22:31:05 +02:00
|
|
|
# Bulgarian
|
2024-06-26 20:29:55 +02:00
|
|
|
elif ${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}" | rg -q "^${_DETECTED_KEYMAP}_pho-utf8$"; then
|
|
|
|
_KEYMAP="$(${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}" | rg "^${_DETECTED_KEYMAP}_pho-utf8$")"
|
2023-09-22 22:31:05 +02:00
|
|
|
# Czech and Slovak
|
2024-06-26 20:29:55 +02:00
|
|
|
elif ${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}" | rg -q "^${_DETECTED_KEYMAP}-qwertz"; then
|
|
|
|
_KEYMAP="$(${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}" | rg "^${_DETECTED_KEYMAP}-qwertz$")"
|
2023-09-22 22:31:05 +02:00
|
|
|
# Serbian
|
2024-06-26 20:29:55 +02:00
|
|
|
elif ${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}" | rg -q "^${_DETECTED_KEYMAP}-latin"; then
|
|
|
|
_KEYMAP="$(${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}" | rg "^${_DETECTED_KEYMAP}-latin$")"
|
2023-09-24 22:24:16 +02:00
|
|
|
# Turkish
|
2024-06-26 20:29:55 +02:00
|
|
|
elif ${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}" | rg -q "^${_DETECTED_KEYMAP}q$"; then
|
|
|
|
_KEYMAP="$(${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}" | rg "^${_DETECTED_KEYMAP}q$")"
|
2023-09-22 22:31:05 +02:00
|
|
|
# Ukrainian
|
2024-06-26 20:29:55 +02:00
|
|
|
elif ${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}" | rg -q "^${_DETECTED_KEYMAP}-utf"; then
|
|
|
|
_KEYMAP="$(${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}" | rg "^${_DETECTED_KEYMAP}-utf$")"
|
2023-09-23 07:35:30 +02:00
|
|
|
# fallback to plain ${_KEYMAP}
|
2024-06-26 20:29:55 +02:00
|
|
|
elif ${_LIST_MAPS} | rg -q "^${_DETECTED_KEYMAP}$"; then
|
|
|
|
_KEYMAP="$(${_LIST_MAPS} | rg "^${_DETECTED_KEYMAP}$")"
|
2023-07-21 14:59:02 +02:00
|
|
|
fi
|
2023-07-21 14:50:27 +02:00
|
|
|
}
|
|
|
|
|
2023-08-30 21:51:43 +02:00
|
|
|
_localize_task() {
|
2023-08-30 21:41:56 +02:00
|
|
|
echo "LANG=${_LOCALE}.UTF-8" > /etc/locale.conf
|
|
|
|
echo "LANG=${_LOCALE}.UTF-8" > /.localize
|
|
|
|
echo LC_COLLATE=C >> /etc/locale.conf
|
|
|
|
localectl set-locale "${_LOCALE}.UTF-8" &>"${_NO_LOG}"
|
2024-07-10 21:40:20 +02:00
|
|
|
#shellcheck disable=SC2016
|
2024-06-27 07:36:04 +02:00
|
|
|
sd '(^[a-z])' '#$1' /etc/locale.gen
|
|
|
|
sd "^#${_LOCALE}.UTF-8" "${_LOCALE}.UTF-8" /etc/locale.gen
|
2023-08-30 21:41:56 +02:00
|
|
|
locale-gen &>"${_NO_LOG}"
|
2023-07-21 15:07:04 +02:00
|
|
|
# Terminus font size detection
|
2024-06-26 20:29:55 +02:00
|
|
|
if rg -q '^FONT=.*32' /etc/vconsole.conf; then
|
2023-07-21 15:07:04 +02:00
|
|
|
_FONT="ter-v32n"
|
|
|
|
else
|
|
|
|
_FONT="ter-v16n"
|
|
|
|
fi
|
2023-07-21 14:50:27 +02:00
|
|
|
echo KEYMAP="${_KEYMAP}" > /etc/vconsole.conf
|
|
|
|
echo FONT="${_FONT}" >> /etc/vconsole.conf
|
|
|
|
systemctl restart systemd-vconsole-setup
|
2024-06-14 08:12:50 +02:00
|
|
|
# set running VC too
|
|
|
|
export LANG="${_LOCALE}.UTF-8"
|
2023-08-30 21:35:02 +02:00
|
|
|
rm /.archboot
|
2023-07-21 14:50:27 +02:00
|
|
|
}
|
|
|
|
|
2023-08-30 21:35:02 +02:00
|
|
|
_run() {
|
|
|
|
: >/.archboot
|
2023-08-30 21:51:43 +02:00
|
|
|
_localize_task &
|
2023-08-31 08:56:01 +02:00
|
|
|
_progress_wait "0" "99" "Using ${_LOCALE}.UTF-8 and ${_KEYMAP}..." "0.25"
|
2023-08-01 19:12:57 +02:00
|
|
|
_progress "100" "Localization completed successfully."
|
2023-08-01 19:58:22 +02:00
|
|
|
sleep 2
|
2023-08-01 19:12:57 +02:00
|
|
|
}
|
|
|
|
|
2023-07-21 15:07:04 +02:00
|
|
|
_localize() {
|
2023-08-30 21:41:56 +02:00
|
|
|
_run | _dialog --title " Localization " --no-mouse --gauge "Using ${_LOCALE}.UTF-8 and ${_KEYMAP}..." 6 50 0
|
2023-07-21 15:07:04 +02:00
|
|
|
}
|
|
|
|
|
2023-07-17 09:18:53 +02:00
|
|
|
_check
|
2023-07-21 15:21:04 +02:00
|
|
|
while [[ -z "${_LOCALE}" ]]; do
|
2023-07-21 15:15:42 +02:00
|
|
|
_locale_menu
|
2023-07-21 15:04:33 +02:00
|
|
|
_vconsole_keymap
|
2023-02-27 21:18:25 +01:00
|
|
|
done
|
2023-07-14 10:22:11 +02:00
|
|
|
_localize
|
2023-07-17 09:18:53 +02:00
|
|
|
_cleanup
|