From ac24847591793da753e7ea79e76b8519b49c6d33 Mon Sep 17 00:00:00 2001 From: xunmi-pc <寻觅> Date: Wed, 21 Feb 2024 16:51:46 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=96=B0=E5=A2=9E]=20=E6=96=B0=E5=A2=9Elsd?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E6=A8=A1=E5=9D=97,=20=E4=BF=AE=E5=A4=8Doma?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E8=BF=94=E5=9B=9E=E5=80=BC=E6=9C=AA=E6=8C=89?= =?UTF-8?q?=E9=A2=84=E6=9C=9F=E8=BF=9B=E8=A1=8C=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?,=20=E4=BF=AE=E6=94=B9=E6=8E=A8=E8=8D=90=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitnore | 5 ++ .测试.zsh.swp | Bin 0 -> 16384 bytes README.md | 2 +- 公共/包管.zsh | 3 + 安装.zsh | 41 ++++++++--- 测试.zsh | 188 ++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 230 insertions(+), 9 deletions(-) create mode 100644 .gitnore create mode 100644 .测试.zsh.swp create mode 100755 测试.zsh diff --git a/.gitnore b/.gitnore new file mode 100644 index 0000000..a137a67 --- /dev/null +++ b/.gitnore @@ -0,0 +1,5 @@ + +测试.zsh +idea +.vscode + diff --git a/.测试.zsh.swp b/.测试.zsh.swp new file mode 100644 index 0000000000000000000000000000000000000000..44127d044b65683a728baa4e79285d760c497014 GIT binary patch literal 16384 zcmYc?2=nw+u+%eTU|?VnU|?vSe>K&3gAK#(ZU%;m(!AVEkT?MhR;OE#Oh6e!9ay1$ zh5oax-7nTp)vGGbAf#nfel!F|Lx36~P+F3vYr)H4Y-DHvGEP}ZQ9)QJ6vQ0GqaiRF z0;3@?8UmvsFd71*Aut*OqaiRF0wW{@N(z`5>KPaqn4tbGfYOX;G&7X%1EmY0G)x_o zJ4%g)z-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2n@myNK9d1&|_d=U;_;R z2rw|f`u`vK85lnBGca7?XJA;u&%jW}&%lt$&%hAG&%hAK&%nUU&%p4DkAdMQ9|OZm zJ_d$RJ_ZI>J_ZIBJ_d%PybKJ>co`Vlc^Mc|c^McSco`U^c^Me)@Gvms^Dr>j@Gvk~ z^Dr<7@-Q%b=VoB|#?8R6jGKWWh?{|diJO6ek(+_x0T%0As9 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, 将错误输出重定向到标准输出, 方便管道符处理), 坑人啊 + sudo oma search $1 2>&1 | head -n 1 | grep -q '\[完整匹配\]' || return 1 sudo oma install -y $1 elif [ -x "$(command -v apt)" ]; then sudo apt -y install $1 diff --git a/安装.zsh b/安装.zsh index 6652e45..59f1415 100755 --- a/安装.zsh +++ b/安装.zsh @@ -7,7 +7,7 @@ export DEBIAN_FRONTEND=noninteractive source /etc/os-release # 脚本在执行过程中遇到任何非零返回码的命令时立即退出 -set -e +# set -e ############################################################################### # 全局变量 # @@ -22,7 +22,7 @@ readonly 系统_版本="$(uname -r)" # ID_LIKE不为空,则输出ID_LIKE的值,否则输出ID的值 readonly 系统_发行版=$( ([ -n "${ID_LIKE}" ] && echo "${ID_LIKE}") || ([ -n "${ID}" ] && echo "${ID}")) readonly 系统_发行版_名称=$(echo "${NAME}") - +系统_发行版_标识="" # 龙架构区分新旧世界的标志位 世界_类型="新世界" @@ -63,7 +63,11 @@ readonly 系统_发行版_名称=$(echo "${NAME}") case ${系统_发行版} in *arch*) ;; *Loongnix*) ;; - *aosc*) ;; + *aosc*) + 系统_发行版_标识符="安同" + # 前三个是字体包 + 系统_包列表=('jetbrains-mono' 'powerline-fonts' 'fantasque-sans-mono-nerd-fonts') + ;; *openwrt*) 输出 1 "暂不支持openwrt" exit 1 @@ -89,7 +93,7 @@ readonly 系统_发行版_名称=$(echo "${NAME}") } 优化_常用命令_vim(){ - 输出 2 "启动vim优化" + 输出 2 "启动vim优化, 安装代码检查和树状目录插件, 并优化配置(具体配置可以查看 $HOME/.vimrc 文件)" vim_配置路径=$HOME/.vim/pack/xunmi typeset -a vim_包列表=('vim-airline') 批量安装 ${vim_包列表[@]} && 输出 0 "vim依赖包安装完毕" @@ -100,15 +104,37 @@ readonly 系统_发行版_名称=$(echo "${NAME}") 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 + cp -v ${目录_根}/配置/vimrc $HOME/.vimrc 色彩_清除 } +优化_常用命令_ls(){ + 输出 2 "启动ls优化, lsd是rust编写的兼容ls的目录查看工具, 其丰富的配色和图标可有效增加目录的可读性" + 色彩_灰色 + if ! 包管_安装 "lsd"; then + 是否 "在系统源中未发现lsd, 是否使用cargo安装(需要rust语言, 如系统没有则会自动安装)" || return 201 + # todo: 需要判断龙芯旧世界, 旧世界安装的cargo版本过低, 需要从官网下载安装 + if ! 包管_安装 "cargo"; then + 输出 3 "ls优化失败, 未找到cargo, 请手动安装rust语言及其cargo包管理器后重试" + return 202 + fi + cargo install "lsd" + fi + sudo ln -vs $HOME/.cargo/bin/lsd /usr/bin/lsd + 色彩_清除 + if 是否 "将lsd使用别名的方式替代ls"; then + 别名='alias ls="lsd"' + grep -q "${别名}" "$HOME/.zshrc" || echo ${别名} >> $HOME/.zshrc + fi + 输出 0 "ls优化完成" + +} + 优化_常用命令(){ typeset -A 列表=( ["vim"]="添加常用配置项(允许复制 添加行号 显式当前行等), 常用插件(目录 语法检测)" - ["ls"]="使用lsd替代老旧的ls, 需要rust的cargo" - ["top"]="使用btop替代老旧的top" + ["ls"]="使用lsd替代老旧的ls, 需要rust的cargo" + ["top"]="使用xmtop替代老旧的top" ["cat"]="使用bat替代cat" ["sed"]="使用学习成本较低的sd替代sed" ) @@ -147,7 +173,6 @@ echo " if [ ! -f "公共/函数.zsh" ]; then source $HOME/.config/xunmi/* 目录_根=${寻觅}/x - cd ${寻觅} || exit 1 fi echo "执行目录: ${目录_根}" diff --git a/测试.zsh b/测试.zsh new file mode 100755 index 0000000..690c482 --- /dev/null +++ b/测试.zsh @@ -0,0 +1,188 @@ +#!/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优化, 安装代码检查和树状目录插件, 并优化配置(具体配置可以查看 $HOME/.vimrc 文件)" + 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 + 色彩_清除 + 输出 0 "vim优化完成" +} + +优化_常用命令_ls(){ + 输出 2 "启动ls优化, lsd是rust编写的兼容ls的目录查看工具, 其丰富的配色和图标可有效增加目录的可读性" + 色彩_灰色 + if ! 包管_安装 "lsd"; then + 是否 "在系统源中未发现lsd, 是否使用cargo安装(需要rust语言, 如系统没有则会自动安装)" || return 201 + # todo: 需要判断龙芯旧世界, 旧世界安装的cargo版本过低, 需要从官网下载安装 + if ! 包管_安装 "cargo"; then + 输出 3 "ls优化失败, 未找到cargo, 请手动安装rust语言及其cargo包管理器后重试" + return 202 + fi + cargo install "lsd" + fi + sudo ln -vs $HOME/.cargo/bin/lsd /usr/bin/lsd + 色彩_清除 + if 是否 "将lsd使用别名的方式替代ls"; then + 别名='alias ls="lsd"' + grep -q "${别名}" "$HOME/.zshrc" || echo ${别名} >> $HOME/.zshrc + fi + 输出 0 "ls优化完成" +} + +优化_常用命令(){ + typeset -A 列表=( + ["vim"]="添加常用配置项(允许复制 添加行号 显式当前行等), 常用插件(目录 语法检测)" + ["ls"]="使用lsd替代老旧的ls, 需要rust的cargo" + ["top"]="使用xmtop替代老旧的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 +fi +echo "执行目录: ${目录_根}" + +# 先检查相关 +[[ ${言灵_函数} == 1 ]] || . ${目录_根}/公共/函数.zsh || exit 2 && 输出 0 "公共函数模块初始化完成" +[[ ${言灵_包管} == 1 ]] || . ${目录_根}/公共/包管.zsh || exit 3 && 输出 0 "包管理器模块初始化完成" + +# 配置检测 + +#[[ ${#通用_包列表} -ne 0 ]] && 批量安装 ${通用_包列表[@]} && 输出 0 "通用包安装完毕" +#[[ ${#架构_包列表} -ne 0 ]] && 批量安装 ${架构_包列表[@]} && 输出 0 "架构专用包安装完毕" +#[[ ${#系统_包列表} -ne 0 ]] && 批量安装 ${系统_包列表[@]} && 输出 0 "系统发行版专用包安装完毕" + +优化_常用命令_ls +# 配置_开发环境 + +#选配