Files
arch/scripts/01-base.sh

173 lines
6.4 KiB
Bash
Raw Permalink Normal View History

2026-03-31 20:13:15 +08:00
#!/bin/bash
# ==============================================================================
# 01-base.sh - Base System Configuration
# ==============================================================================
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/00-utils.sh"
check_root
log "Starting Phase 1: Base System Configuration..."
# ------------------------------------------------------------------------------
# 1. Set Global Default Editor
# ------------------------------------------------------------------------------
section "Step 1/6" "Global Default Editor"
TARGET_EDITOR="vim"
if command -v nvim &> /dev/null; then
TARGET_EDITOR="nvim"
log "Neovim detected."
elif command -v nano &> /dev/null; then
TARGET_EDITOR="nano"
log "Nano detected."
else
log "Neovim or Nano not found. Installing Vim..."
if ! command -v vim &> /dev/null; then
exe pacman -Syu --noconfirm gvim
fi
fi
log "Setting EDITOR=$TARGET_EDITOR in /etc/environment..."
if grep -q "^EDITOR=" /etc/environment; then
exe sed -i "s/^EDITOR=.*/EDITOR=${TARGET_EDITOR}/" /etc/environment
else
# exe handles simple commands, for redirection we wrap in bash -c or just run it
# For simplicity in logging, we just run it and log success
echo "EDITOR=${TARGET_EDITOR}" >> /etc/environment
fi
success "Global EDITOR set to: ${TARGET_EDITOR}"
# ------------------------------------------------------------------------------
# 2. Enable 32-bit (multilib) Repository
# ------------------------------------------------------------------------------
section "Step 2/6" "Multilib Repository"
if grep -q "^\[multilib\]" /etc/pacman.conf; then
success "[multilib] is already enabled."
else
log "Uncommenting [multilib]..."
# Uncomment [multilib] and the following Include line
exe sed -i "/\[multilib\]/,/Include/"'s/^#//' /etc/pacman.conf
log "Refreshing database..."
exe pacman -Syu
success "[multilib] enabled."
fi
# ------------------------------------------------------------------------------
# 3. Install Base Fonts
# ------------------------------------------------------------------------------
section "Step 3/6" "Base Fonts"
log "Installing adobe-source-han-serif-cn-fonts adobe-source-han-sans-cn-fonts , ttf-liberation, emoji..."
exe pacman -S --noconfirm --needed ttf-liberation noto-fonts noto-fonts-cjk noto-fonts-emoji ttf-jetbrains-mono-nerd otf-font-awesome
log "Base fonts installed."
log "Installing terminus-font..."
# 安装 terminus-font 包
exe pacman -S --noconfirm --needed terminus-font
log "Setting font for current session..."
exe setfont ter-v28n
log "Configuring permanent vconsole font..."
if [ -f /etc/vconsole.conf ] && grep -q "^FONT=" /etc/vconsole.conf; then
exe sed -i 's/^FONT=.*/FONT=ter-v28n/' /etc/vconsole.conf
else
echo "FONT=ter-v28n" >> /etc/vconsole.conf
fi
log "Restarting systemd-vconsole-setup..."
exe systemctl restart systemd-vconsole-setup
success "TTY font configured (ter-v28n)."
# ------------------------------------------------------------------------------
# 4. Configure archlinuxcn Repository
# ------------------------------------------------------------------------------
section "Step 4/6" "ArchLinuxCN Repository"
if grep -q "\[archlinuxcn\]" /etc/pacman.conf; then
success "archlinuxcn repository already exists."
else
log "Adding archlinuxcn mirrors to pacman.conf..."
# Timezone check: KISS approach, works reliably inside arch-chroot and host system
LOCAL_TZ=""
if [ -L /etc/localtime ]; then
LOCAL_TZ=$(readlink -f /etc/localtime)
fi
echo "" >> /etc/pacman.conf
echo "[archlinuxcn]" >> /etc/pacman.conf
if [[ "$LOCAL_TZ" == *"Asia/Shanghai"* ]]; then
log "Timezone is Asia/Shanghai. Applying mainland mirrors..."
cat <<EOT >> /etc/pacman.conf
Server = https://mirrors.ustc.edu.cn/archlinuxcn/\$arch
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/\$arch
Server = https://mirrors.hit.edu.cn/archlinuxcn/\$arch
Server = https://repo.huaweicloud.com/archlinuxcn/\$arch
EOT
else
log "Non-Shanghai timezone detected. Prepending global repo.archlinuxcn.org mirror..."
cat <<EOT >> /etc/pacman.conf
Server = https://repo.archlinuxcn.org/\$arch
Server = https://mirrors.ustc.edu.cn/archlinuxcn/\$arch
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/\$arch
Server = https://mirrors.hit.edu.cn/archlinuxcn/\$arch
Server = https://repo.huaweicloud.com/archlinuxcn/\$arch
EOT
fi
success "Mirrors added based on timezone."
fi
log "Installing archlinuxcn-keyring..."
# Keyring installation often needs -Sy specifically, but -Syu is safe too
exe pacman -Syu --noconfirm archlinuxcn-keyring
success "ArchLinuxCN configured."
# ------------------------------------------------------------------------------
# 5. Install AUR Helpers
# ------------------------------------------------------------------------------
section "Step 5/6" "AUR Helpers"
log "Installing yay and paru..."
exe pacman -S --noconfirm --needed base-devel yay paru
success "Helpers installed."
# ------------------------------------------------------------------------------
# 6. Configure NetworkManager Backend (iwd)
# ------------------------------------------------------------------------------
section "Step 6/6" "Network Backend (iwd)"
# Check if NetworkManager is installed before attempting configuration
if pacman -Qi networkmanager &> /dev/null; then
log "NetworkManager detected. Proceeding with iwd backend configuration..."
log "Configuring NetworkManager to use iwd backend..."
exe pacman -S --noconfirm --needed iwd impala
exe systemctl enable iwd
# Ensure directory exists
if [ ! -d /etc/NetworkManager/conf.d ]; then
mkdir -p /etc/NetworkManager/conf.d
fi
if [ -f /etc/NetworkManager/conf.d/wifi_backend.conf ];then
rm /etc/NetworkManager/conf.d/wifi_backend.conf
fi
if [ ! -f /etc/NetworkManager/conf.d/iwd.conf ];then
echo -e "[device]\nwifi.backend=iwd" >> /etc/NetworkManager/conf.d/iwd.conf
rm -rfv /etc/NetworkManager/system-connections/*
fi
log "Notice: NetworkManager restart deferred. Changes will apply after reboot."
success "Network backend configured (iwd)."
else
log "NetworkManager not found. Skipping iwd configuration."
fi
# ------------------------------------------------------------------------------
log "Module 01 completed."