192 lines
5.1 KiB
Bash

#!/bin/bash
# 设置错误时立即退出
set -e
# 日志函数
log_info() {
echo "[INFO] $1"
}
log_warn() {
echo "[WARN] $1"
}
log_error() {
echo "[ERROR] $1"
}
# 检查是否为root用户
if [ "$EUID" -ne 0 ]; then
log_error "请使用root权限运行此脚本"
exit 1
fi
# 获取当前用户名
CURRENT_USER=$SUDO_USER
if [ -z "$CURRENT_USER" ]; then
CURRENT_USER=$(who | awk '{print $1}' | head -n1)
fi
# 设置用户主目录
USER_HOME="/home/$CURRENT_USER"
# 更新系统包
log_info "更新系统包..."
apt-get update
apt-get upgrade -y
# 安装必要的依赖
log_info "安装必要的依赖..."
apt-get install -y \
git \
curl \
wget \
build-essential \
zsh \
sudo \
fontconfig
# 安装 Oh My Zsh
log_info "安装 Oh My Zsh..."
# 删除已存在的 Oh My Zsh 目录
if [ -d "${USER_HOME}/.oh-my-zsh" ]; then
log_info "删除已存在的 Oh My Zsh 目录..."
rm -rf ${USER_HOME}/.oh-my-zsh
fi
# 切换到用户目录
cd ${USER_HOME}
# 安装 Oh My Zsh
su - $CURRENT_USER -c 'sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended'
# 设置 zsh 为默认 shell
log_info "设置 zsh 为默认 shell..."
chsh -s $(which zsh) $CURRENT_USER
# 安装常用插件
log_info "安装常用插件..."
su - $CURRENT_USER -c "git clone https://github.com/zsh-users/zsh-autosuggestions ${USER_HOME}/.oh-my-zsh/custom/plugins/zsh-autosuggestions"
su - $CURRENT_USER -c "git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${USER_HOME}/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting"
# 配置 .zshrc
log_info "配置 .zshrc..."
# 备份现有的 .zshrc 文件
if [ -f "${USER_HOME}/.zshrc" ]; then
log_info "备份现有的 .zshrc 文件..."
mv ${USER_HOME}/.zshrc ${USER_HOME}/.zshrc.backup
fi
cat > ${USER_HOME}/.zshrc << 'EOL'
# Enable Powerlevel10k instant prompt
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# Path to oh-my-zsh installation
export ZSH="$HOME/.oh-my-zsh"
# Theme
ZSH_THEME="powerlevel10k/powerlevel10k"
# Plugins
plugins=(
git
docker
docker-compose
npm
node
python
pip
zsh-autosuggestions
zsh-syntax-highlighting
)
# Source oh-my-zsh
source $ZSH/oh-my-zsh.sh
# User configuration
export LANG=en_US.UTF-8
export EDITOR='vim'
export VISUAL='vim'
# 设置自动补全快捷键为逗号
bindkey ',' autosuggest-accept
# 历史记录配置
HISTSIZE=10000
SAVEHIST=10000
HISTFILE=~/.zsh_history
setopt SHARE_HISTORY
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_REDUCE_BLANKS
# 目录栈配置
setopt AUTO_PUSHD
setopt PUSHD_IGNORE_DUPS
setopt PUSHD_SILENT
# 自动补全配置
autoload -Uz compinit && compinit
zstyle ':completion:*' menu select
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
# Aliases
alias ll='ls -la'
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias grep='grep --color=auto'
alias mkdir='mkdir -pv'
alias wget='wget -c'
alias hist='history | grep'
alias ports='netstat -tulanp'
alias path='echo -e ${PATH//:/\\n}'
alias now='date +"%T"'
alias nowdate='date +"%d-%m-%Y"'
alias update='sudo apt-get update'
alias upgrade='sudo apt-get upgrade'
alias meminfo='free -m -l -t'
alias psmem='ps auxf | sort -nr -k 4'
alias pscpu='ps auxf | sort -nr -k 3'
alias wget='wget -c'
alias getpass="openssl rand -base64 20"
alias sha1='openssl sha1'
alias ping='ping -c 5'
alias mkdir='mkdir -pv'
alias diff='colordiff'
alias mount='mount |column -t'
alias h='history'
alias j='jobs -l'
alias vi=vim
alias svi='sudo vim'
alias vis='vim "+set si"'
alias edit='vim'
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
EOL
# 安装 Powerlevel10k 主题
log_info "安装 Powerlevel10k 主题..."
su - $CURRENT_USER -c "git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${USER_HOME}/.oh-my-zsh/custom/themes/powerlevel10k"
# 安装字体
log_info "安装字体..."
su - $CURRENT_USER -c "mkdir -p ${USER_HOME}/.local/share/fonts"
su - $CURRENT_USER -c "cd ${USER_HOME}/.local/share/fonts && curl -LO https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf"
su - $CURRENT_USER -c "cd ${USER_HOME}/.local/share/fonts && curl -LO https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf"
su - $CURRENT_USER -c "cd ${USER_HOME}/.local/share/fonts && curl -LO https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf"
su - $CURRENT_USER -c "cd ${USER_HOME}/.local/share/fonts && curl -LO https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf"
su - $CURRENT_USER -c "fc-cache -f -v"
# 设置权限
log_info "设置权限..."
chown -R $CURRENT_USER:$CURRENT_USER ${USER_HOME}/.oh-my-zsh
chown -R $CURRENT_USER:$CURRENT_USER ${USER_HOME}/.zshrc
chown -R $CURRENT_USER:$CURRENT_USER ${USER_HOME}/.local
log_info "Zsh 环境配置完成!"
log_info "请重新打开终端或运行 'source ~/.zshrc' 使配置生效"
log_info "首次登录后,运行 p10k configure 来配置 Powerlevel10k 主题"