#!/bin/bash # ============================================================================ # DarkForge Linux Installer — Locale Module # ============================================================================ # Configures locale, timezone, and keyboard layout. # ============================================================================ configure_locale() { # --- Timezone --- info "Available timezones: /usr/share/zoneinfo/" echo " Common: America/New_York, America/Chicago, America/Denver," echo " America/Los_Angeles, Europe/London, Europe/Berlin" echo "" ask "Timezone [America/New_York]: " read -r tz tz="${tz:-America/New_York}" if [ -f "${MOUNT_POINT}/usr/share/zoneinfo/${tz}" ]; then ln -sf "/usr/share/zoneinfo/${tz}" "${MOUNT_POINT}/etc/localtime" ok "Timezone set to ${tz}" else warn "Timezone '${tz}' not found — using UTC" ln -sf /usr/share/zoneinfo/UTC "${MOUNT_POINT}/etc/localtime" tz="UTC" fi # --- Locale --- echo "" ask "Locale [en_US.UTF-8]: " read -r locale locale="${locale:-en_US.UTF-8}" # Generate locale using localedef (glibc provides this, locale-gen is a wrapper # that may not exist on from-scratch systems) echo "${locale} UTF-8" > "${MOUNT_POINT}/etc/locale.gen" locale_name="${locale%%.*}" # e.g., "en_US" from "en_US.UTF-8" charset="${locale##*.}" # e.g., "UTF-8" from "en_US.UTF-8" mkdir -p "${MOUNT_POINT}/usr/lib/locale" chroot "${MOUNT_POINT}" localedef -i "${locale_name}" -f "${charset}" "${locale}" 2>/dev/null || \ warn "localedef failed — locale may not be fully generated" echo "LANG=${locale}" > "${MOUNT_POINT}/etc/locale.conf" ok "Locale set to ${locale}" # --- Keyboard --- echo "" ask "Keyboard layout [us]: " read -r keymap keymap="${keymap:-us}" echo "KEYMAP=${keymap}" > "${MOUNT_POINT}/etc/vconsole.conf" ok "Keyboard layout set to ${keymap}" # Store for rc.conf generation export INSTALL_TIMEZONE="${tz}" export INSTALL_LOCALE="${locale}" export INSTALL_KEYMAP="${keymap}" }