[新增] 新增lsd安装模块, 修复oma安装返回值未按预期进行的问题, 修改推荐安装方式
This commit is contained in:
parent
35e2120c72
commit
ac24847591
BIN
.测试.zsh.swp
Normal file
BIN
.测试.zsh.swp
Normal file
Binary file not shown.
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
欢迎使用 言灵(effective language) 本工具用于在 `龙`(Loong) 架构和其他常用主机架构上的Linux系统中自动配置一个便捷好用的命令行, 使用zsh替代老旧的bash, 使用一些现代化的工具替代老旧工具集, 并且将部分命令添加汉化别名, 避免长时间未使用时遗忘命令
|
欢迎使用 言灵(effective language) 本工具用于在 `龙`(Loong) 架构和其他常用主机架构上的Linux系统中自动配置一个便捷好用的命令行, 使用zsh替代老旧的bash, 使用一些现代化的工具替代老旧工具集, 并且将部分命令添加汉化别名, 避免长时间未使用时遗忘命令
|
||||||
|
|
||||||
本脚本主体使用zsh脚本实现, 如无zsh推荐使用 `wget -O- https://gitea.whlug.cn/xunmi/x/raw/start.sh | bash` 命令安装基础模块
|
本脚本主体使用zsh脚本实现, 如无zsh推荐使用 `wget https://gitea.whlug.cn/xunmi/x/raw/start.sh && bash start.sh && rm start.sh` 命令安装基础模块
|
||||||
|
|
||||||
# 功能实现
|
# 功能实现
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,9 @@
|
||||||
包管_安装(){
|
包管_安装(){
|
||||||
[ -x "$(command -v $1)" ] && return 0
|
[ -x "$(command -v $1)" ] && return 0
|
||||||
if [ -x "$(command -v oma)" ]; then
|
if [ -x "$(command -v oma)" ]; then
|
||||||
|
# 解决oma找不到软件包返回值还是0的问题, 先搜索一下软件包
|
||||||
|
# 神奇的oma居然不走标准输出(2>&1, 将错误输出重定向到标准输出, 方便管道符处理), 坑人啊
|
||||||
|
sudo oma search $1 2>&1 | head -n 1 | grep -q '\[完整匹配\]' || return 1
|
||||||
sudo oma install -y $1
|
sudo oma install -y $1
|
||||||
elif [ -x "$(command -v apt)" ]; then
|
elif [ -x "$(command -v apt)" ]; then
|
||||||
sudo apt -y install $1
|
sudo apt -y install $1
|
||||||
|
|
41
安装.zsh
41
安装.zsh
|
@ -7,7 +7,7 @@ export DEBIAN_FRONTEND=noninteractive
|
||||||
source /etc/os-release
|
source /etc/os-release
|
||||||
|
|
||||||
# 脚本在执行过程中遇到任何非零返回码的命令时立即退出
|
# 脚本在执行过程中遇到任何非零返回码的命令时立即退出
|
||||||
set -e
|
# set -e
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# 全局变量 #
|
# 全局变量 #
|
||||||
|
@ -22,7 +22,7 @@ readonly 系统_版本="$(uname -r)"
|
||||||
# ID_LIKE不为空,则输出ID_LIKE的值,否则输出ID的值
|
# ID_LIKE不为空,则输出ID_LIKE的值,否则输出ID的值
|
||||||
readonly 系统_发行版=$( ([ -n "${ID_LIKE}" ] && echo "${ID_LIKE}") || ([ -n "${ID}" ] && echo "${ID}"))
|
readonly 系统_发行版=$( ([ -n "${ID_LIKE}" ] && echo "${ID_LIKE}") || ([ -n "${ID}" ] && echo "${ID}"))
|
||||||
readonly 系统_发行版_名称=$(echo "${NAME}")
|
readonly 系统_发行版_名称=$(echo "${NAME}")
|
||||||
|
系统_发行版_标识=""
|
||||||
# 龙架构区分新旧世界的标志位
|
# 龙架构区分新旧世界的标志位
|
||||||
世界_类型="新世界"
|
世界_类型="新世界"
|
||||||
|
|
||||||
|
@ -63,7 +63,11 @@ readonly 系统_发行版_名称=$(echo "${NAME}")
|
||||||
case ${系统_发行版} in
|
case ${系统_发行版} in
|
||||||
*arch*) ;;
|
*arch*) ;;
|
||||||
*Loongnix*) ;;
|
*Loongnix*) ;;
|
||||||
*aosc*) ;;
|
*aosc*)
|
||||||
|
系统_发行版_标识符="安同"
|
||||||
|
# 前三个是字体包
|
||||||
|
系统_包列表=('jetbrains-mono' 'powerline-fonts' 'fantasque-sans-mono-nerd-fonts')
|
||||||
|
;;
|
||||||
*openwrt*)
|
*openwrt*)
|
||||||
输出 1 "暂不支持openwrt"
|
输出 1 "暂不支持openwrt"
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -89,7 +93,7 @@ readonly 系统_发行版_名称=$(echo "${NAME}")
|
||||||
}
|
}
|
||||||
|
|
||||||
优化_常用命令_vim(){
|
优化_常用命令_vim(){
|
||||||
输出 2 "启动vim优化"
|
输出 2 "启动vim优化, 安装代码检查和树状目录插件, 并优化配置(具体配置可以查看 $HOME/.vimrc 文件)"
|
||||||
vim_配置路径=$HOME/.vim/pack/xunmi
|
vim_配置路径=$HOME/.vim/pack/xunmi
|
||||||
typeset -a vim_包列表=('vim-airline')
|
typeset -a vim_包列表=('vim-airline')
|
||||||
批量安装 ${vim_包列表[@]} && 输出 0 "vim依赖包安装完毕"
|
批量安装 ${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/scrooloose/nerdtree.git ${vim_配置路径}/start/树状目录
|
||||||
# 代码检查工具
|
# 代码检查工具
|
||||||
git clone --depth 1 https://gitcode.com/mirrors/dense-analysis/ale.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 列表=(
|
typeset -A 列表=(
|
||||||
["vim"]="添加常用配置项(允许复制 添加行号 显式当前行等), 常用插件(目录 语法检测)"
|
["vim"]="添加常用配置项(允许复制 添加行号 显式当前行等), 常用插件(目录 语法检测)"
|
||||||
["ls"]="使用lsd替代老旧的ls, 需要rust的cargo"
|
["ls"]="使用lsd替代老旧的ls, 需要rust的cargo"
|
||||||
["top"]="使用btop替代老旧的top"
|
["top"]="使用xmtop替代老旧的top"
|
||||||
["cat"]="使用bat替代cat"
|
["cat"]="使用bat替代cat"
|
||||||
["sed"]="使用学习成本较低的sd替代sed"
|
["sed"]="使用学习成本较低的sd替代sed"
|
||||||
)
|
)
|
||||||
|
@ -147,7 +173,6 @@ echo "
|
||||||
if [ ! -f "公共/函数.zsh" ]; then
|
if [ ! -f "公共/函数.zsh" ]; then
|
||||||
source $HOME/.config/xunmi/*
|
source $HOME/.config/xunmi/*
|
||||||
目录_根=${寻觅}/x
|
目录_根=${寻觅}/x
|
||||||
cd ${寻觅} || exit 1
|
|
||||||
fi
|
fi
|
||||||
echo "执行目录: ${目录_根}"
|
echo "执行目录: ${目录_根}"
|
||||||
|
|
||||||
|
|
188
测试.zsh
Executable file
188
测试.zsh
Executable file
|
@ -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
|
||||||
|
# 配置_开发环境
|
||||||
|
|
||||||
|
#选配
|
Loading…
Reference in New Issue
Block a user