#!/usr/bin/zsh export PATH=/usr/sbin:$PATH # 让apt包管理器处于非交互模式运行 export DEBIAN_FRONTEND=noninteractive # 加载系统配置 source /etc/os-release # 脚本在执行过程中遇到任何非零返回码的命令时立即退出 set -e ############################################################################### # 全局变量 # ############################################################################### typeset -a 通用_包列表=('wget' 'curl' 'git' 'vim' 'sudo') typeset -a 架构_包列表=() typeset -a 系统_包列表=() readonly CPU_架构="$(uname -m)" readonly 系统_类型="$(uname -s)" readonly 系统_版本="$(uname -r)" # ID_LIKE不为空,则输出ID_LIKE的值,否则输出ID的值 readonly 系统_发行版=$( ([ -n "${ID_LIKE}" ] && echo "${ID_LIKE}") || ([ -n "${ID}" ] && echo "${ID}")) readonly 系统_发行版_名称=$(echo "${NAME}") # 龙架构区分新旧世界的标志位 世界_类型="新世界" ############################################################################### # 函数/方法 # ############################################################################### # 调用包管理器批量安装 批量安装(){ typeset -a 包列表=($@) 输出 2 "计划安装列表: ${包列表}" for 包 in "${包列表[@]}";do 输出 2 "正在安装 -> ${包} <-" 色彩_灰色 包管_安装 ${包} 色彩_清除 done } 检查_架构() { case ${CPU_架构} in *x86_64*) 主机_架构="amd64" ;; *loong*) 主机_架构="龙" ;; *) 输出 1 "暂不支持${色彩[3]} ${CPU_架构} ${色彩重置}架构" exit 1 ;; esac 输出 2 "检测到${色彩[1]} ${主机_架构} ${色彩重置}架构" } 检查_发行版() { 未知=0 case ${系统_发行版} in *arch*) ;; *Loongnix*) ;; *aosc*) ;; *openwrt*) 输出 1 "暂不支持openwrt" exit 1 ;; *) 未知=1 ;; esac 输出 2 "检测到 ${系统_发行版_名称} (${系统_发行版}) 系统" if [[ ${未知} == 1 ]]; then if ! 是否 "此发行版尚未验证, 是否尝试继续安装"; then 输出 1 "已退出安装" exit 1 fi fi } 配置检测(){ 输出 2 "主机信息检测模块启动" 检查_架构 检查_发行版 输出 0 "主机信息检测完毕" } 优化_常用命令_vim(){ 输出 2 "启动vim优化" vim_配置路径=$HOME/.vim/pack/xunmi typeset -a vim_包列表=('vim-airline') 批量安装 ${vim_包列表[@]} && 输出 0 "vim依赖包安装完毕" 色彩_灰色 rm -vrf ${vim_配置路径} mkdir -vp ${vim_配置路径}/{opt,start} # 树状目录 git clone --depth 1 https://gitcode.com/mirrors/scrooloose/nerdtree.git ${vim_配置路径}/start/树状目录 # 代码检查工具 git clone --depth 1 https://gitcode.com/mirrors/dense-analysis/ale.git ${vim_配置路径}/start/代码检查工具 cp -v 配置/vimrc $HOME/.vimrc 色彩_清除 } 优化_常用命令(){ typeset -A 列表=( ["vim"]="添加常用配置项(允许复制 添加行号 显式当前行等), 常用插件(目录 语法检测)" ["ls"]="使用lsd替代老旧的ls, 需要rust的cargo" ["top"]="使用btop替代老旧的top" ["cat"]="使用bat替代cat" ["sed"]="使用学习成本较低的sd替代sed" ) 输出 2 "正在优化 ${(k)列表} 命令" # 遍历关联数组 for 键 值 in ${(kv)列表}; do if 是否 "是否启动 '${键}' 命令优化 -> ${值} <- "; then 优化_常用命令_${键} else 输出 3 "已取消 ${键} 的优化" fi done } 选配(){ if 是否 "将Zsh设置为默认命令行"; then chsh -s /usr/bin/zsh 输出 0 "已将zsh设置为默认命令行,此设置主要适用于ssh和tty,如终端不生效则需要在可视化设置中手动配置启动时加载 '/usr/bin/zsh' " else 输出 2 "如需将zsh设置为默认命令行请执行: 'chsh -s /usr/bin/zsh' " fi } ############################################################################### # 主函数(main) # ############################################################################### echo " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* * 欢迎使用 言灵 配置脚本 * *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* " 目录_根=$PWD # 判断当前执行的位置 如果不再项目路径中就去寻找路径 if [ ! -f "公共/函数.zsh" ]; then source $HOME/.config/xunmi/* 目录_根=${寻觅}/x cd ${寻觅} || exit 1 fi echo "执行目录: ${目录_根}" # 先检查相关 [[ ${言灵_函数} == 1 ]] || . ${目录_根}/公共/函数.zsh || exit 2 && 输出 0 "公共函数模块初始化完成" [[ ${言灵_包管} == 1 ]] || . ${目录_根}/公共/包管.zsh || exit 3 && 输出 0 "包管理器模块初始化完成" 配置检测 [[ ${#通用_包列表} -ne 0 ]] && 批量安装 ${通用_包列表[@]} && 输出 0 "通用包安装完毕" [[ ${#架构_包列表} -ne 0 ]] && 批量安装 ${架构_包列表[@]} && 输出 0 "架构专用包安装完毕" [[ ${#系统_包列表} -ne 0 ]] && 批量安装 ${系统_包列表[@]} && 输出 0 "系统发行版专用包安装完毕" 优化_常用命令 # 配置_开发环境 选配