From 4afc66bdc52b3a9d4491bcf9b95662f42dd4bc9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AF=BB=E8=A7=85?= Date: Tue, 12 Mar 2024 01:00:21 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=96=B0=E5=A2=9E]=20=E6=B7=BB=E5=8A=A0'?= =?UTF-8?q?=E5=85=AC=E5=85=B1/=E5=87=BD=E6=95=B0.zsh'->'=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=AF=B9=E6=AF=94'=E6=A8=A1=E5=9D=97=EF=BC=8C=20=E5=B0=86zsh?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=BB=8Ebash=E8=84=9A=E6=9C=AC=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=E5=88=B0zsh=E4=B8=AD,=20=E5=88=9D=E6=AD=A5=E6=90=AD?= =?UTF-8?q?=E5=BB=BAgo=E8=AF=AD=E8=A8=80=E8=87=AA=E5=8A=A8=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E6=A8=A1=E5=9D=97,=20=E4=BC=98=E5=8C=96'=E5=AE=89?= =?UTF-8?q?=E8=A3=85.zsh'=E5=92=8C"start.sh"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- start.sh | 68 +++++-------------------- 公共/函数.zsh | 39 +++++++++++--- 公共/开发环境.zsh | 78 ++++++++++++++++++++++++++++ 安装.zsh | 121 +++++++++++++++++++++++++++++++------------- 龙架构/开发环境.zsh | 12 ----- 5 files changed, 208 insertions(+), 110 deletions(-) create mode 100644 公共/开发环境.zsh delete mode 100644 龙架构/开发环境.zsh diff --git a/start.sh b/start.sh index 50dcea0..da0632b 100755 --- a/start.sh +++ b/start.sh @@ -1,11 +1,11 @@ #!/usr/bin/bash -# wget -qO- https://gitea.whlug.cn/xunmi/getLinux/raw/start.sh | bash PACK_LIST=("git" "zsh") # 脚本根地址 ROOT_URL="https://gitea.whlug.cn/xunmi/x/" -# 插件和依赖安装的路径 -ROOT_INSTALL=/opt/xunmi +# 脚本安装默认路径 +ROOT_INSTALL="/opt/xunmi" + ############################################################################### # 终端配色 # ############################################################################### @@ -17,9 +17,7 @@ readonly aCOLOUR=( '\e[90m' # 2: 灰 '\e[91m' # 3: 红 '\e[32m' # 4: 绿 - '\e[33m' # 5: 黄 ) - Show() { if (($1 == 0)); then echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[0]} 成功 $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2" @@ -28,19 +26,11 @@ Show() { exit 1 elif (($1 == 2)); then echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[4]} 信息 $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2" - elif (($1 == 3)); then - echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[5]} 通知 $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2" fi } - -Warn() { - echo -e "${aCOLOUR[3]}$1$COLOUR_RESET" -} - GreyStart() { echo -e "${aCOLOUR[2]}\c" } - ColorReset() { echo -e "$COLOUR_RESET\c" } @@ -50,7 +40,7 @@ ColorReset() { ############################################################################### # 更新包管理器 -Update_Package_Resource() { +Update_PKG() { Show 2 "更新包管理器..." GreyStart if [ -x "$(command -v oma)" ]; then @@ -66,9 +56,10 @@ Update_Package_Resource() { # 安装依赖 Install_PKG() { - Update_Package_Resource + Update_PKG for ((i = 0; i < ${#PACK_LIST[@]}; i++)); do pack=${PACK_LIST[i]} + [ -x "$(command -v $pack)" ] && continue Show 2 "安装必要的依赖项: ${aCOLOUR[4]} $pack $COLOUR_RESET" GreyStart if [ -x "$(command -v oma)" ]; then @@ -87,58 +78,23 @@ Install_PKG() { Show 0 "依赖安装完成" } -# 下载配置 -Download_Config() { - # 创建下载文件的临时目录 - Show 0 "正在进行插件下载与配置" - # 下载zsh扩展 - GreyStart - ohmyzsh_dir=${ROOT_INSTALL}/oh-my-zsh - sudo rm -vrf $ohmyzsh_dir - sudo git clone https://gitcode.com/mirrors/ohmyzsh/ohmyzsh.git ${ohmyzsh_dir} || Show 1 "关键依赖下载失败" - cd ${ohmyzsh_dir}/custom/plugins/ - sudo git clone https://gitcode.com/mirrors/zsh-users/zsh-autosuggestions.git - sudo git clone https://gitcode.com/mirrors/zsh-users/zsh-syntax-highlighting.git - # 下载预设配置 - config_url=${ROOT_URL}raw/配置/zshrc - sudo wget -t 3 -q --show-progress -c "${config_url}" || Show 1 "无法下载预设配置( ${config_url} )" - sudo sed -i "s:export ZSH=/etc/oh-my-zsh:export ZSH=$ohmyzsh_dir:" zshrc - sudo mv zshrc /etc/skel/.zshrc - cp -v /etc/skel/.zshrc $HOME - cd $HOME - ColorReset - Show 2 "寻觅基础环境安装完成" -} - Download_X(){ Show 0 "开始下载配置言灵" GreyStart x_dir=$ROOT_INSTALL/x sudo rm -vrf $x_dir sudo git clone $ROOT_URL $x_dir || Show 1 "言灵拉去失败" + mkdir -vp $HOME/.config/xunmi + echo "言灵一路径=$ROOT_INSTALL" >> $HOME/.config/xunmi/信息 ColorReset - X_START=1 } ################################################################# # 主函数(main) # ################################################################# -([ -x "$(command -v git)" ] && [ -x "$(command -v zsh)" ]) || Install_PKG -# 如果携带 -c 则不下载安装ohmyzsh -if [ -f $HOME/.zshrc ]; then - mv $HOME/.zshrc $HOME/.zshrc.old -fi -[[ "$@" == *-c* ]] || Download_Config -# 如果携带 -x 则不下载安装言灵 -[[ "$@" == *-x* ]] || Download_X -sudo chown -R $USER:$USER $x_dir -# 写入配置文件 -mkdir -p $HOME/.config/xunmi -echo "寻觅=${ROOT_INSTALL}" > $HOME/.config/xunmi/PATH.sh -if [ -f "安装.zsh" ]; then - zsh 安装.zsh -else - (( $X_START == 1 )) && zsh $x_dir/安装.zsh -fi +Install_PKG +Download_X +sudo chown -R $USER:$USER $ROOT_INSTALL +[ -f "安装.zsh" ] && zsh 安装.zsh || zsh $x_dir/安装.zsh exec zsh diff --git a/公共/函数.zsh b/公共/函数.zsh index ae16414..e7128ee 100644 --- a/公共/函数.zsh +++ b/公共/函数.zsh @@ -59,14 +59,39 @@ readonly 色彩=( # 通用函数 # ############################################################################### -# 用判断用户输入的值, 输入 `是/Y/y/yes` 返会0, 其他情况返会1 -# 位置参数 1 -> 字符 <- 用于提示用户选择时候的提示语 +# 更具用户输入判断是否需要继续 +# *-* 位置参数 1 -> 字符 <- 用于提示用户选择时候的提示语 +# -*- 返回值: 如果 输入`是/Y/y/yes` 返会0, 其他情况返会1 是否() { - 输出 3 "$1((是/否 Yes/No))" - read r - if echo "$r" | grep -Eq "^[是Yy][Ee]?[Ss]?$";then - return 0 - fi + 输出 3 "$1((是/否 Yes/No))" + read r + if echo "$r" | grep -Eq "^[是Yy][Ee]?[Ss]?$";then + return 0 + fi return 1 } +# 用于判断两个版本号之间的大小 +# 格式实例:1.0.0, v8.8, go1.20.8 +# *-* 位置参数 1 -> 版本1 <- 第一个版本号 +# *-* 位置参数 2 -> 版本2 <- 第二个版本号 +# -*- 如果 版本1 >= 版本2 则返会0, 否者返会1 +# 使用实例: 版本对比 "$1" "$2" && echo "1: $1" || echo "2: $2" +版本对比() { + # 使用IFS分割版本号为数组 + IFS='.' read -r -A 版本数组A <<< ${1//[^0-9.]/} + IFS='.' read -r -A 版本数组B <<< ${2//[^0-9.]/} + + # 逐段比较各个部分的大小 + for ((i=1; i <= ${#版本数组A[@]}; i++)); do + if (( ${版本数组A[i]} > ${版本数组B[i]} )); then + return 0 + elif (( ${版本数组A[i]} < ${版本数组B[i]} )); then + return 1 + fi + done + + # 如果循环结束仍未返回,则认为两个版本号相等 + return 0 +} + diff --git a/公共/开发环境.zsh b/公共/开发环境.zsh new file mode 100644 index 0000000..d617dfe --- /dev/null +++ b/公共/开发环境.zsh @@ -0,0 +1,78 @@ +#!/usr/bin/zsh + +##################################### +# 用于快速配置旧世界的开发环境 # +# 支持的语言: # +# [ ] go # +# [ ] rust # +# [ ] java # +# [ ] nodejs # +##################################### + +# 不使用包管理器, 直接用官网的二进制包 +# 龙芯旧世界更新频率低, 且迟早被弃用, 旧世界仅做有限支持 + +############################################################################# +# 变量 # +############################################################################# + +local 旧世界一下载地址="http://ftp.loongnix.cn" + +typeset -A 语言一go=( + ['主件']=['go' 'gofmt'] + ['下载地址']="https://golang.google.cn/dl/" + ['版本正则']="go1.*linux-${系统一主机架构}\.tar\.gz" + ['旧世界地址']="${旧世界一下载地址}/toolchain/golang/go-1.21/abi1.0/go1.21.5.linux-loong64.tar.gz" +) + +############################################################################# +# 函数(func) # +############################################################################# + +# latest_version=$(curl -s https://golang.google.cn/dl/ | grep -o 'go1.*linux-.*\.tar\.gz' | head -n 1) + +开发环境一检测一go(){ + # 检测安装情况 + 版本一在线=$(curl -s ${语言} | grep -o 'go1.*linux-.*\.tar\.gz' | head -n 1) + if [[ ${系统一世界类型}=="旧世界" ]]; then + 版本一在线="go1.21.5" + 下载地址="${旧世界一下载地址}/toolchain/golang/go-1.21/abi1.0/go1.21.5.linux-loong64.tar.gz" + fi + if 1;then + 版本一主机=$(go version) | awk '{print $3}' + fi +} + +# 用于检测 +开发环境一检测(){ + +} + +# 加载主机信息 +开发环境一初始化(){ + 目录一配置=$HOME/.config/xunmi + source ${目录一配置}/信息.zsh + + if [[ ${系统一主机架构}=="龙" ]]; then + if [[ ${系统一世界类型}=="新世界" ]]; then + 系统一主机架构="loong64" + fi + fi +} + +开发环境一安装一go(){ + # 换源 go env -w GOPROXY=https://goproxy.cn +} + +开发环境一安装(){ + +} + +############################################################################### +# 主函数(main) # +############################################################################### + +开发环境一初始化 + + + diff --git a/安装.zsh b/安装.zsh index e442a9b..fd133b8 100755 --- a/安装.zsh +++ b/安装.zsh @@ -9,6 +9,8 @@ source /etc/os-release # 脚本在执行过程中遇到任何非零返回码的命令时立即退出 # set -e +readonly 言灵一版本一在线="v1.0.0" + ############################################################################### # 全局变量 # ############################################################################### @@ -42,6 +44,17 @@ readonly 系统一发行版一名称=$(echo "${NAME}") done } +# 从git镜像仓库获取依赖 +# *-* -> 位置参数 1 <- 拉去`作者/仓库名`, 比如: ohmyzsh/ohmyzsh +# *-* -> 位置参数 2 <- 保存地址, 保存到本地的哪个路径 +获取一git(){ + git镜像="https://gitcode.com/mirrors" + 色彩一灰色 + 输出 2 "正在拉去 $1 ..." + git clone --depth 1 -q ${git镜像}/$1.git $2 + 色彩一清除 +} + 检查一架构() { case ${CPU一架构} in *x86_64*) @@ -77,7 +90,13 @@ readonly 系统一发行版一名称=$(echo "${NAME}") 系统一发行版一标识符="安同" # 前三个是字体包 系统一包列表=('jetbrains-mono' 'powerline-fonts' 'fantasque-sans-mono-nerd-fonts') - ;; + ;; + *debian*) + if [[ ${系统一发行版一名称}=="Ubuntu" ]]; then + 系统一发行版一标识符="乌班图" + 系统一包列表=('universal-ctags') + fi + ;; *openwrt*) 输出 1 "暂不支持openwrt" exit 1 @@ -102,46 +121,84 @@ readonly 系统一发行版一名称=$(echo "${NAME}") 输出 2 "主机信息检测模块启动" 检查一架构 检查一发行版 + # 检查本地版本 + if [[ -n ${言灵一版本一本地} ]]; then + if 版本对比 ${言灵一版本一在线} ${言灵一版本一本地}; then + 是否 "发现本地版本已是最新版, 是否需要重复安装" || 输出 1 "已退出安装" + fi + fi # 将本机信息更新到指定文件 - mkdir -vp ${目录一配置} - rm -v ${目录一配置}/信息.zsh - echo "系统一发行版标识=${系统一发行版一标识符}" >> ${目录一配置}/信息.zsh - echo "系统一世界类型=${世界一类型}" >> ${目录一配置}/信息.zsh - echo "系统一主机架构=${主机一架构}" >> ${目录一配置}/信息.zsh + 配置信息=${目录一配置}/信息 + rm -v ${配置信息} + echo "言灵一路径=${言灵一路径}" >> ${配置信息} + echo "言灵一版本一本地=${言灵一版本一在线}" >> ${配置信息} + echo "言灵一系统一发行版=${系统一发行版一标识符}" >> ${配置信息} + echo "言灵一系统一世界类型=${世界一类型}" >> ${配置信息} + echo "言灵一系统一主机架构=${主机一架构}" >> ${配置信息} 输出 0 "主机信息检测完毕" } +优化一常用命令一zsh(){ + # 创建下载文件的临时目录 + 输出 2 "启动zsh优化" + # 下载zsh扩展 + 色彩一灰色 + 配置一路径=${言灵一路径}/oh-my-zsh + sudo rm -vrf ${配置一路径} + 获取一git ohmyzsh/ohmyzsh ${配置一路径} + 获取一git zsh-users/zsh-autosuggestions ${配置一路径}/custom/plugins/zsh-autosuggestions + 获取一git zsh-users/zsh-syntax-highlighting ${配置一路径}/custom/plugins/zsh-syntax-highlighting + + if [ -f $HOME/.zshrc ]; then + mv $HOME/.zshrc $HOME/.zshrc.old + fi + cp -v ${目录一根}/配置/zshrc $HOME/.zshrc + sed -i "s:export ZSH=/etc/oh-my-zsh:export ZSH=${配置一路径}:" $HOME/.zshrc + 是否 "是否需要将zsh预设配置赋予所有新用户" && sudo mv $HOME/.zshrc /etc/skel/.zshrc + if 是否 "将Zsh设置为默认命令行"; then + chsh -s /usr/bin/zsh + 输出 0 "已将zsh设置为默认命令行,此设置主要适用于ssh和tty如终端不生效则需要在可视化设置中手动配置启动时加载 '/usr/bin/zsh' " + else + 输出 2 "如需将zsh设置为默认命令行请执行: 'chsh -s /usr/bin/zsh' " + fi + 色彩一清除 + 输出 0 "Zsh优化完成" +} + 优化一常用命令一vim(){ 输出 2 "启动vim优化, 安装代码检查和树状目录插件, 并优化配置(具体配置可以查看 $HOME/.vimrc 文件)" vim一配置路径=$HOME/.vim/pack/xunmi 色彩一灰色 + if [ -f $HOME/.vimrc ]; then + mv $HOME/.vimrc $HOME/.vimrc.old + fi + cp -v ${目录一根}/配置/vimrc $HOME/.vimrc rm -vrf ${vim一配置路径} mkdir -vp ${vim一配置路径}/{opt,start} vim说明=${目录一根}/配置/vim配置说明.vim - git clone --depth 1 https://gitcode.com/mirrors/scrooloose/nerdtree.git ${vim一配置路径}/start/树状目录 - git clone --depth 1 https://gitcode.com/dense-analysis/ale.git ${vim一配置路径}/start/代码检查工具 - git clone --depth 1 https://gitcode.com/jiangmiao/auto-pairs.git ${vim一配置路径}/start/括号补齐 - git clone --depth 1 https://gitcode.com/Yggdroot/LeaderF.git ${vim一配置路径}/start/模糊搜索器 - if 是否 "是否启用基于c的模糊搜索(默认使用python, c的性能会好很多)"; then - vim -c ":LeaderfInstallCExtension" ${vim说明} - fi - git clone --depth 1 https://gitcode.com/mirrors/ludovicchabant/vim-gutentags.git ${vim一配置路径}/start/标签生成器 + 获取一git scrooloose/nerdtree ${vim一配置路径}/start/树状目录 + 获取一git dense-analysis/ale ${vim一配置路径}/start/代码检查工具 + 获取一git jiangmiao/auto-pairs ${vim一配置路径}/start/括号补齐 + 获取一git preservim/nerdcommenter ${vim一配置路径}/start/注释工具 + 获取一git vim-airline/vim-airline ${vim一配置路径}/start/VIM状态栏 + 获取一git vim-airline/vim-airline-themes ${vim一配置路径}/start/VIM状态栏_皮肤 + 获取一git Yggdroot/LeaderF ${vim一配置路径}/start/模糊搜索器 + # if 是否 "是否启用基于c的模糊搜索(默认使用python, c的性能会好很多)"; then + # vim -c ":LeaderfInstallCExtension" ${vim说明} + # fi + 获取一git ludovicchabant/vim-gutentags ${vim一配置路径}/start/标签生成器 if 是否 "是否需要安装vim代码补全工具(代码补全工具需要nodejs支持, 如找不到nodejs脚本将会自动安装)"; then 输出 2 "默认会安装 shell c/c++ cmake go java json markdown perl python r rust 语言的补全" 色彩一灰色 - git clone --depth 1 https://gitcode.com/neoclide/coc.nvim.git ${vim一配置路径}/start/代码补全 + 获取一git neoclide/coc.nvim ${vim一配置路径}/start/代码补全 # todo: 这里调用一个nodejs的检查工具 # 编译和启动 npm -C ${vim一配置路径}/start/代码补全 i && npm -C ${vim一配置路径}/start/代码补全 ci vim -c ":CocInstall coc-sh coc-clangd coc-cmake coc-go coc-json coc-java coc-markdownlint coc-perl coc-pyright coc-r-lsp coc-rls" ${vim说明} - 是否 "是否安装前端相关代码补全工具(html css js/ts vue)" && vim -c ":CocInstall coc-css coc-html coc-tsserver coc-vetur" ${vim说明} + # 是否 "是否安装前端相关代码补全工具(html css js/ts vue)" && vim -c ":CocInstall coc-css coc-html coc-tsserver coc-vetur" ${vim说明} fi - git clone --depth 1 https://gitcode.com/mirrors/preservim/nerdcommenter.git ${vim一配置路径}/start/注释工具 - git clone --depth 1 https://gitcode.com/vim-airline/vim-airline.git ${vim一配置路径}/start/VIM状态栏 - git clone --depth 1 https://gitcode.com/mirrors/vim-airline/vim-airline-themes.git ${vim一配置路径}/start/VIM状态栏_皮肤 - - cp -v ${目录一根}/配置/vimrc $HOME/.vimrc 色彩一清除 + 输出 0 "Zsh优化完成" } 优化一常用命令一ls(){ @@ -183,7 +240,10 @@ readonly 系统一发行版一名称=$(echo "${NAME}") # 优化git, 修复git中文显示为8进制风格的问题 git config --global core.quotepath false + git config --global core.editor "vim" + typeset -A 列表=( + ["zsh"]="添加omyzsh, zsh自动补齐, 快速添加sudo, 便捷操作目录, 优化命令行提示符等" ["vim"]="添加常用配置项(允许复制 添加行号 显式当前行等), 常用插件(目录 语法检测)" ["ls"]="使用lsd替代老旧的ls, (lsd是rust编写的兼容ls的目录查看工具, 其丰富的配色和图标可有效增加目录的可读性)" #["cat"]="使用bat替代cat" @@ -201,17 +261,6 @@ readonly 系统一发行版一名称=$(echo "${NAME}") 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) # ############################################################################### @@ -223,10 +272,10 @@ echo " " 目录一根=$PWD 目录一配置=$HOME/.config/xunmi +source ${目录一配置}/信息 # 判断当前执行的位置 如果不再项目路径中就去寻找路径 if [ ! -f "公共/函数.zsh" ]; then - source ${目录一配置}/* - 目录一根=${寻觅}/x + 目录一根=${言灵一路径}/x fi echo "执行目录: ${目录一根}" @@ -243,4 +292,6 @@ echo "执行目录: ${目录一根}" 优化一常用命令 # 配置一开发环境 -选配 +echo "言灵一版本一本地=${言灵一版本一在线}" >> ${目录一配置}/信息 + +输出 0 "已成功安装 言灵 ${言灵一版本一在线}" diff --git a/龙架构/开发环境.zsh b/龙架构/开发环境.zsh deleted file mode 100644 index 88f91f9..0000000 --- a/龙架构/开发环境.zsh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/zsh - -##################################### -# 用于快速配置旧世界的开发环境 # -# 支持的语言: # -# [ ] golang # -# [ ] rust # -# [ ] java # -# [ ] nodejs # -##################################### - -