Compare commits
10 Commits
ece03cda86
...
c8ac7b472c
Author | SHA1 | Date | |
---|---|---|---|
c8ac7b472c | |||
f704cae1a0 | |||
cd3d9f0c76 | |||
c7033b6da9 | |||
21b5b97c1f | |||
9153924a69 | |||
24d2258c4b | |||
4afc66bdc5 | |||
b89996c7db | |||
1e89186e6e |
54
bin/untar.sh
54
bin/untar.sh
@ -1,54 +0,0 @@
|
||||
#!/bin/zsh
|
||||
|
||||
|
||||
# 这个脚本可以根据文件 16 进制判断压缩格式,然后通过对应命令解压
|
||||
# 解压函数:file 接收文件名,cmd 接收命令,opt 参数选项
|
||||
decompress() {
|
||||
file=$1
|
||||
cmd=$2
|
||||
opt=$3
|
||||
$cmd $opt $file
|
||||
}
|
||||
|
||||
|
||||
# 数组:存储支持的压缩格式和对应的文件头和解压命令
|
||||
# 每个元素的格式为:文件 16 进制头:解压命令:选项
|
||||
formats=(
|
||||
377abcaf:7z:x
|
||||
213c6172:ar:x
|
||||
425a6839:bunzip2:
|
||||
504b0304:unzip:
|
||||
7f454c46:7z:x
|
||||
1f8b0808:gunzip:
|
||||
5d000080:unlzma:
|
||||
1f8b0800:tar:-zxvf
|
||||
fd377a58:unxz:
|
||||
)
|
||||
#判断是否为 tar
|
||||
filesion=$(file $1 | cut -d':' -f2-)
|
||||
if [[ "$filesion" == *tar* ]]; then
|
||||
tar -xvf "$1"
|
||||
#判断是否为文件
|
||||
elif [[ -f $1 ]]; then
|
||||
header=$(xxd -p -l 4 $1)
|
||||
# 定义一个变量,表示是否找到匹配的格式
|
||||
found=0
|
||||
# 遍历数组,匹配文件头和解压命令
|
||||
for format in $formats; do
|
||||
# 使用 IFS 分隔数组元素的各个字段
|
||||
IFS=: read head cmd opt <<< $format
|
||||
# 如果文件头匹配,调用解压函数,并设置 found 为 1
|
||||
if [[ $header == $head* ]]; then
|
||||
decompress $1 $cmd $opt
|
||||
found=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
# 如果没有找到匹配的格式,打印提示信息
|
||||
if [[ $found == 0 ]]; then
|
||||
echo "无法识别的压缩格式"
|
||||
fi
|
||||
else
|
||||
echo "不是一个文件"
|
||||
fi
|
||||
|
65
start.sh
65
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,55 +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
|
||||
([ -x "$(command -v zsh)" ] || [[ "$@" == *-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
|
||||
|
78
公共/函数.zsh
78
公共/函数.zsh
@ -26,10 +26,11 @@ readonly 色彩=(
|
||||
)
|
||||
|
||||
# 用于规范输出的工具
|
||||
# 位置参数 1 -> 整数 <- 1: 成功(亮绿); 2: 失败(暗红); 3: 信息(绿色); 4: 通知(黄色); 5: 异常(紫色)
|
||||
# 位置参数 2 -> 字符 <- 在命令行输出的字符串
|
||||
# 实例 `输出 0 "执行成功"`; `输出 3 "请及时更新依赖"`
|
||||
# 例: `输出 0 "执行成功"`; `输出 3 "请及时更新依赖"`
|
||||
# *-* 一 -> 整数 <- 1: 成功(亮绿); 2: 失败(暗红); 3: 信息(绿色); 4: 通知(黄色); 5: 异常(紫色)
|
||||
# *-* 二 -> 字符 <- 在命令行输出的字符串
|
||||
输出() {
|
||||
echo -n "($(date +"%Y-%m-%d %H:%M:%S"))"
|
||||
if (($1 == 0)); then
|
||||
echo -e "${色彩[2]}[${色彩重置}${色彩[1]} 成功 ${色彩重置}${色彩[2]}]${色彩重置} $2"
|
||||
elif (($1 == 1)); then
|
||||
@ -59,14 +60,71 @@ readonly 色彩=(
|
||||
# 通用函数 #
|
||||
###############################################################################
|
||||
|
||||
# 用判断用户输入的值, 输入 `是/Y/y/yes` 返会0, 其他情况返会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" "$2" && echo "1: $1" || echo "2: $2"`
|
||||
# *-* 一 -> 字符(版本1) <- 建议为本地版本
|
||||
# *-* 二 -> 字符(版本2) <- 建议为需要对比的版本
|
||||
# -*- 返回值: 如果 版本1 >= 版本2 则返会1, 否者返会0, 根据建议填写参数效果则是本地如果是最新版则不会进入if判断
|
||||
版本对比() {
|
||||
# 判断版本是否为空
|
||||
if [ -z "${1// }" ]; then
|
||||
return 0
|
||||
elif [ -z "${2// }" ]; then
|
||||
return 1
|
||||
fi
|
||||
# 使用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 1
|
||||
elif (( ${版本数组A[i]} < ${版本数组B[i]} )); then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
# 如果循环结束仍未返回,则认为两个版本号相等
|
||||
return 1
|
||||
}
|
||||
|
||||
# 自动根据文件后缀选择响应的解压工具进行就地解压
|
||||
# *-* 一 -> 字符(文件名) <- 压缩文件
|
||||
解压(){
|
||||
文件名=$1
|
||||
后缀="${文件名##*.}"
|
||||
if [[ ${文件名} == *".tar."* ]]; then
|
||||
后缀="tar.${后缀}"
|
||||
fi
|
||||
# 根据后缀选择解压命令
|
||||
case ${后缀} in
|
||||
"tar.gz" | "tgz") tar -xzvf ${文件名} ;;
|
||||
"tar.xz") tar -xJvf ${文件名} ;;
|
||||
"tar.bz2" | "tbz2") tar -xjvf ${文件名} ;;
|
||||
"zip") unzip ${文件名} ;;
|
||||
"rar") unrar x ${文件名} ;;
|
||||
"7z") 7z x ${文件名} ;;
|
||||
*) 输出 5 "不支持的压缩格式" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 自动获取并且解压压缩包
|
||||
# *-* 一 -> 字符(网址) <- 在线获取压缩包的地址
|
||||
获解(){
|
||||
wget -t 3 --content-disposition -q --show-progress -c $1 || 输出 5 "无法下载程序包"
|
||||
包名="$(ls -t | head -n1)"
|
||||
输出 2 "已获取${包名}"
|
||||
解压 ${包名}
|
||||
}
|
20
公共/包管.zsh
20
公共/包管.zsh
@ -17,14 +17,14 @@
|
||||
# 实例 `包管_更新 -n`; `包管_更新 -确认`
|
||||
包管一更新() {
|
||||
if [ -x "$(command -v oma)" ]; then
|
||||
# sudo oma refresh
|
||||
sudo oma update -y
|
||||
# ${特权} oma refresh
|
||||
${特权} oma update -y
|
||||
elif [ -x "$(command -v apt)" ]; then
|
||||
sudo apt-get update -qq
|
||||
${特权} apt-get update -qq
|
||||
elif [ -x "$(command -v yum)" ]; then
|
||||
sudo yum update
|
||||
${特权} yum update
|
||||
elif [ -x "$(command -v pacman)"]; then
|
||||
sudo pacman -Syu
|
||||
${特权} pacman -Syu
|
||||
fi
|
||||
}
|
||||
|
||||
@ -34,14 +34,14 @@
|
||||
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
|
||||
${特权} oma search $1 2>&1 | head -n 1 | grep -q '\[完整匹配\]' || return 1
|
||||
${特权} oma install -y $1
|
||||
elif [ -x "$(command -v apt)" ]; then
|
||||
sudo apt -y install $1
|
||||
${特权} apt -y install $1
|
||||
elif [ -x "$(command -v yum)" ]; then
|
||||
sudo yum install -y $1
|
||||
${特权} yum install -y $1
|
||||
elif [ -x "$(command -v pacman)" ]; then
|
||||
sudo pacman -Sy --needed $1
|
||||
${特权} pacman -Sy --needed $1
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
|
109
公共/开发环境.zsh
Normal file
109
公共/开发环境.zsh
Normal file
@ -0,0 +1,109 @@
|
||||
#!/usr/bin/zsh
|
||||
|
||||
#####################################
|
||||
# 自动配置常用开发环境 #
|
||||
# [x] go #
|
||||
# [ ] rust #
|
||||
# [ ] java #
|
||||
# [ ] nodejs #
|
||||
#####################################
|
||||
|
||||
# 不使用包管理器, 直接用官网的二进制包
|
||||
# 龙芯旧世界更新频率低, 且迟早被弃用, 旧世界仅做有限支持
|
||||
|
||||
#############################################################################
|
||||
# 变量 #
|
||||
#############################################################################
|
||||
|
||||
# 加载基础环境
|
||||
source $HOME/.config/xunmi/信息
|
||||
# source $HOME/x/公共/函数.zsh
|
||||
source ${言灵一路径}/x/公共/函数.zsh
|
||||
路径一开发环境="${言灵一路径}/ide"
|
||||
mkdir -p ${路径一开发环境}
|
||||
|
||||
# 配置全局变量
|
||||
local 旧世界一下载地址="http://ftp.loongnix.cn"
|
||||
|
||||
typeset -A 语言一GO=(
|
||||
['组件']=('go' 'gofmt')
|
||||
['下载地址']="https://golang.google.cn/dl/"
|
||||
['版本正则']="go1.*linux-架构\.tar\.gz"
|
||||
['旧世界版本']="go1.22.0"
|
||||
)
|
||||
|
||||
#############################################################################
|
||||
# 函数(func) #
|
||||
#############################################################################
|
||||
|
||||
开发环境一检测一GO(){
|
||||
# 检测安装情况
|
||||
unset 下载地址
|
||||
# 获取在线版本
|
||||
版本一在线=$(curl -s ${语言一GO[下载地址]} | grep -o $(echo "${语言一GO[版本正则]}" | sed "s/架构/${言灵一系统架构}/g") | head -n 1)
|
||||
语言一GO[下载地址]="${语言一GO[下载地址]}${版本一在线}"
|
||||
if [[ ${系统一世界类型} == "旧世界" ]]; then
|
||||
输出 4 "[GO检测]旧世界支持开发兼容性较差,建议尽快迁移进入龙芯新世界!"
|
||||
版本一在线=${语言一GO[旧世界版本]}
|
||||
语言一GO[下载地址]="${旧世界一下载地址}/toolchain/golang/${版本一在线%.*}/abi1.0/${版本一在线}.linux-loong64.tar.gz"
|
||||
fi
|
||||
输出 2 "[GO检测]在线版本: ${版本一在线%.linux*}"
|
||||
# 对比本地版本
|
||||
if [ -x "$(command -v go)" ]; then
|
||||
版本一本地="$(echo $(go version) | awk '{print $3}')"
|
||||
# 判断版本新旧
|
||||
输出 2 "[GO检测]本地版本: ${版本一本地}"
|
||||
if 版本对比 "${版本一本地}" "${版本一在线%.linux*}"; then
|
||||
输出 2 "[GO检测]发现新版本GO"
|
||||
return 1
|
||||
fi
|
||||
输出 2 "[GO检测]已是最新的GO版本"
|
||||
return 0
|
||||
fi
|
||||
输出 2 "[GO检测]未检测到GO语言的本地版本"
|
||||
return 1
|
||||
}
|
||||
|
||||
# 用于检测当前版本是否最新
|
||||
# 备注: 所有`开发环境一检测一*`返回0则代表无需更新,返回1则代表需要更新
|
||||
# *-* -> 位置参数1 <- 需要检测的编程语言
|
||||
开发环境一检测(){
|
||||
|
||||
}
|
||||
|
||||
# 加载主机信息
|
||||
开发环境一初始化(){
|
||||
if [[ ${言灵一系统一主机架构} == "龙" ]]; then
|
||||
if [[ ${言灵一系统一世界类型} == "新世界" ]]; then
|
||||
系统一主机架构="loong64"
|
||||
fi
|
||||
fi
|
||||
系统一主机架构=${言灵一系统一主机架构}
|
||||
}
|
||||
|
||||
开发环境一部署一GO(){
|
||||
输出 2 "开始从 ${语言一GO[下载地址]} 下载部署最新版go语言"
|
||||
|
||||
cd ${路径一开发环境}
|
||||
获解 ${语言一GO[下载地址]}
|
||||
echo "# [觅库]GO语言环境变量-1" >> $HOME/.zshrc
|
||||
echo "export PATH=${路径一开发环境}/go/bin:\$PATH" >> $HOME/.zshrc
|
||||
echo "export GOPATH=$HOME/.goenv" >> $HOME/.zshrc
|
||||
source $HOME/.zshrc
|
||||
go env -w GOPROXY=https://goproxy.cn
|
||||
输出 0 "成功安装GO语言($(go version)), 并自动切换为国内GO语言下载源, 重启zsh生效!"
|
||||
cd -
|
||||
}
|
||||
|
||||
开发环境一部署(){
|
||||
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# 主函数(main) #
|
||||
###############################################################################
|
||||
|
||||
开发环境一初始化
|
||||
|
||||
开发环境一检测一GO
|
||||
# 开发环境一部署一GO
|
142
安装.zsh
142
安装.zsh
@ -9,11 +9,13 @@ source /etc/os-release
|
||||
# 脚本在执行过程中遇到任何非零返回码的命令时立即退出
|
||||
# set -e
|
||||
|
||||
readonly 言灵一版本="v1.0.1"
|
||||
|
||||
###############################################################################
|
||||
# 全局变量 #
|
||||
###############################################################################
|
||||
|
||||
typeset -a 通用一包列表=('wget' 'curl' 'git' 'vim' 'ctag' 'sudo')
|
||||
typeset -a 通用一包列表=('wget' 'curl' 'git' 'vim' 'ctag')
|
||||
typeset -a 架构一包列表=()
|
||||
typeset -a 系统一包列表=()
|
||||
readonly CPU一架构="$(uname -m)"
|
||||
@ -26,6 +28,12 @@ readonly 系统一发行版一名称=$(echo "${NAME}")
|
||||
# 龙架构区分新旧世界的标志位
|
||||
世界一类型="旧世界"
|
||||
|
||||
if command -v sudo >/dev/null 2>&1; then
|
||||
特权="sudo"
|
||||
else
|
||||
特权=""
|
||||
fi
|
||||
|
||||
###############################################################################
|
||||
# 函数/方法 #
|
||||
###############################################################################
|
||||
@ -42,6 +50,17 @@ readonly 系统一发行版一名称=$(echo "${NAME}")
|
||||
done
|
||||
}
|
||||
|
||||
# 从git镜像仓库获取依赖
|
||||
# *-* -> 位置参数 1 <- 拉取`作者/仓库名`
|
||||
# *-* -> 位置参数 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 +96,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,42 +127,87 @@ 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 "言灵一发行系统=${系统一发行版一标识符}" >> ${配置信息}
|
||||
if [[ ${主机一架构} == "龙" ]];then
|
||||
echo "言灵一世界类型=${世界一类型}" >> ${配置信息}
|
||||
fi
|
||||
echo "言灵一系统架构=${主机一架构}" >> ${配置信息}
|
||||
输出 0 "主机信息检测完毕"
|
||||
}
|
||||
|
||||
优化一常用命令一zsh(){
|
||||
# 创建下载文件的临时目录
|
||||
输出 2 "启动zsh优化"
|
||||
# 下载zsh扩展
|
||||
色彩一灰色
|
||||
配置一路径=${言灵一路径}/oh-my-zsh
|
||||
${特权} 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预设配置赋予所有新用户" && ${特权} cp $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}
|
||||
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/模糊搜索器
|
||||
git clone --depth 1 https://gitcode.com/mirrors/ludovicchabant/vim-gutentags.git ${vim一配置路径}/start/标签生成器
|
||||
vim说明=${目录一根}/配置/vim配置说明.vim
|
||||
获取一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 airblade/vim-gitgutter ${vim一配置路径}/start/Git插件
|
||||
获取一git preservim/tagbar ${vim一配置路径}/start/标签栏
|
||||
获取一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配置说明.vim
|
||||
是否 "是否安装前端相关代码补全工具(html css js/ts vue)" && vim -c ":CocInstall coc-css coc-html coc-tsserver coc-vetur" ${目录一根}/配置/vim配置说明.vim
|
||||
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说明}
|
||||
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(){
|
||||
@ -152,7 +222,7 @@ readonly 系统一发行版一名称=$(echo "${NAME}")
|
||||
fi
|
||||
cargo install "lsd"
|
||||
fi
|
||||
sudo ln -vs $HOME/.cargo/bin/lsd /usr/bin/lsd
|
||||
${特权} ln -vs $HOME/.cargo/bin/lsd /usr/bin/lsd
|
||||
色彩一清除
|
||||
if 是否 "将lsd使用别名的方式替代ls"; then
|
||||
别名='alias ls="lsd"'
|
||||
@ -166,9 +236,9 @@ readonly 系统一发行版一名称=$(echo "${NAME}")
|
||||
xmtop版本="v4.2.1"
|
||||
输出 2 "开始下载 xmtop-${xmtop版本}-${世界一类型}"
|
||||
xmtop_url="https://gitea.whlug.cn/xunmi/xmtop/releases/download/${xmtop版本}/xmtop_${世界一类型}"
|
||||
sudo wget -t 3 -q --show-progress -c ${xmtop_url} || 输出 5 "无法下载程序包" || return 301
|
||||
sudo mv -v xmtop_${世界一类型} /usr/bin/xmtop
|
||||
sudo chmod 755 /usr/bin/xmtop
|
||||
${特权} wget -t 3 -q --show-progress -c ${xmtop_url} || 输出 5 "无法下载程序包"
|
||||
${特权} mv -v xmtop_${世界一类型} /usr/bin/xmtop
|
||||
${特权} chmod 755 /usr/bin/xmtop
|
||||
else
|
||||
输出 2 "${主机一架构} 架构, 暂未适配top优化, 推荐手动安装gotop, btop等代替top"
|
||||
fi
|
||||
@ -176,7 +246,13 @@ readonly 系统一发行版一名称=$(echo "${NAME}")
|
||||
}
|
||||
|
||||
优化一常用命令(){
|
||||
# 优化git, 修复git中文显示为8进制风格的问题
|
||||
git config --global core.quotepath false
|
||||
|
||||
git config --global core.editor "vim"
|
||||
|
||||
typeset -A 列表=(
|
||||
["zsh"]="添加omyzsh, zsh自动补齐, 快速添加${特权}, 便捷操作目录, 优化命令行提示符等"
|
||||
["vim"]="添加常用配置项(允许复制 添加行号 显式当前行等), 常用插件(目录 语法检测)"
|
||||
["ls"]="使用lsd替代老旧的ls, (lsd是rust编写的兼容ls的目录查看工具, 其丰富的配色和图标可有效增加目录的可读性)"
|
||||
#["cat"]="使用bat替代cat"
|
||||
@ -194,17 +270,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) #
|
||||
###############################################################################
|
||||
@ -216,10 +281,10 @@ echo "
|
||||
"
|
||||
目录一根=$PWD
|
||||
目录一配置=$HOME/.config/xunmi
|
||||
source ${目录一配置}/信息
|
||||
# 判断当前执行的位置 如果不再项目路径中就去寻找路径
|
||||
if [ ! -f "公共/函数.zsh" ]; then
|
||||
source ${目录一配置}/*
|
||||
目录一根=${寻觅}/x
|
||||
目录一根=${言灵一路径}/x
|
||||
fi
|
||||
echo "执行目录: ${目录一根}"
|
||||
|
||||
@ -236,4 +301,5 @@ echo "执行目录: ${目录一根}"
|
||||
优化一常用命令
|
||||
# 配置一开发环境
|
||||
|
||||
选配
|
||||
echo "言灵一本地版本=${言灵一版本}" >> ${目录一配置}/信息
|
||||
输出 0 "已成功安装 言灵 ${言灵一版本}"
|
||||
|
@ -19,7 +19,6 @@ TMP_ROOT=/tmp/xunmi
|
||||
|
||||
# 读取系统架构和内核信息
|
||||
readonly UNAME_M="$(uname -m)"
|
||||
readonly UNAME_R="$(uname -r)"
|
||||
WorldType="新世界"
|
||||
|
||||
# 加载系统信息
|
||||
@ -84,9 +83,6 @@ exist_file() {
|
||||
# 识别架构
|
||||
Check_Arch() {
|
||||
case $UNAME_M in
|
||||
# *x86_64*)
|
||||
# TARGET_ARCH="amd64"
|
||||
# ;;
|
||||
*loongarch64*)
|
||||
TARGET_ARCH="loong64"
|
||||
;;
|
||||
@ -114,7 +110,8 @@ Check_Distribution() {
|
||||
notice="我们尚未在此发行版上进行测试,默认使用新世界文件替换"
|
||||
;;
|
||||
esac
|
||||
if [[ $UNAME_R =~ ^4.19.0-.+ ]]; then
|
||||
WorldNum=$(hexdump -s 48 -C /usr/bin/sh | head -n 1 | awk '{print $2}')
|
||||
if [[ ${WorldNum} == "03" ]]; then
|
||||
WorldType="旧世界"
|
||||
fi
|
||||
Show ${sType} "检测到 ${ReleaseName} 发行版系统, 根据内核版本推断属于 -> ${WorldType} <- 系统 "
|
78
文档/言灵vim使用说明.md
Normal file
78
文档/言灵vim使用说明.md
Normal file
@ -0,0 +1,78 @@
|
||||
# 寻觅的vim用法
|
||||
|
||||
言灵vim配置用法, 查看此教程前需对vim有一定了解, 如果您完全没有使用过vim, 请在命令行中执行 `vimtutor` 学习vim相关操作后再来查看此vim扩展
|
||||
> 最少查看 `vimtutor` 的前三章
|
||||
|
||||
## 快捷键
|
||||
|
||||
vim常用快捷键记录
|
||||
|
||||
> 备注: <占位符>(\<leader>): 自定义键盘前缀, 默认为反斜杠`\` 在`~/.vimrc`可自定义 -> `let mapleader = 'x'`
|
||||
> 冒号 `:` 开头的快捷键是需要用户在预览模式下输入启动
|
||||
|
||||
* `[数量]<占位符>cc` 注释当前行和选中行
|
||||
* `[数量]<占位符>ci` 执行反转注释操作,选中区域注释部分取消注释,非注释部分添加注释
|
||||
* `[数量]<占位符>cA` 跳转到该行结尾添加注释,并进入编辑模式
|
||||
* `[数量]<占位符>cu` 取消注释
|
||||
|
||||
* `ctrl ]` 跳转到光标下的函数定义处
|
||||
* `*` 在本文件中查找函数或变量
|
||||
* `ctrl o` 返回跳转之前的位置
|
||||
* `ctrl i` 返回 `ctrl o` 跳转之前的位置
|
||||
* `]c` 跳转到下一个修改的位置
|
||||
* `[c` 跳转到上一个修改的位置
|
||||
|
||||
* `ctrl g` 打开属性栏
|
||||
* `ctrl n` 打开目录栏
|
||||
* `<占位符>n` 将光标聚焦到目录
|
||||
* `ctrl t` 切换目录状态(打开则关闭, 关闭则打开)
|
||||
* `ctrl f` 打开目录搜索框
|
||||
* `ctrl w` 多个窗口之间切换焦点, 按下此快捷键后在按上下左右或者k(上)j(下)h(左)l(右)
|
||||
* `:sp` 水平切分窗口
|
||||
* `:vsp` 垂直切分窗口
|
||||
* `ctrl 6` 切换缓冲区
|
||||
* `:bn` 切换到下一个缓冲区
|
||||
* `:bp` 切换到上一个缓冲区
|
||||
|
||||
* `<占位符>ff` 目录搜索(相当于:Leaderf file)
|
||||
* `<占位符>fb` 缓冲区搜索(相当于:Leaderf buffer)
|
||||
* `<占位符>fm` 搜索最近使用的文件(相当于:Leaderf mru)
|
||||
* `<占位符>ft` 在缓冲区中导航标签, 相当于搜索当前文件定义的函数(相当于:Leaderf bufTag)
|
||||
* `<占位符>fl` 在缓冲区中搜索行, 相当于搜索当前文件(相当于:Leaderf line)
|
||||
* `ctrl j` \[搜索窗口]向下移动搜索框
|
||||
* `ctrl k` \[搜索窗口]向上移动搜索框
|
||||
* `ctrl x` \[搜索窗口]在水平拆分窗口中打开
|
||||
* `ctrl ]` \[搜索窗口]在垂直拆分窗口中打开
|
||||
* `ctrl T` \[搜索窗口]在新选项卡页中打开
|
||||
* `ctrl ↓` \[搜索窗口]在弹出预览窗口中向下滚动
|
||||
* `ctrl ↑` \[搜索窗口]在弹出预览窗口中向上滚动
|
||||
* `ctrl R` \[搜索窗口]在模糊搜索模式和正则表达式模式之间切换
|
||||
* `ctrl F` \[搜索窗口]在全路径搜索模式和仅名称搜索模式之间切换
|
||||
* `ctrl B` 使用 Leaderf 插件和 rg 命令在当前缓冲区中进行模糊搜索当前光标下的单词
|
||||
* `ctrl F` 使用 Leaderf 插件和 rg 命令在所有文件中进行模糊搜索当前光标下的单词
|
||||
* `gf` 在可视模式下选择文本后,使用 Leaderf 插件和 rg 命令进行精确搜索所选的文本
|
||||
* `go` 执行上次搜索
|
||||
|
||||
## 代码补全工具(coc.nvim)
|
||||
|
||||
```vim
|
||||
# 安装
|
||||
:CocInstall [包名]
|
||||
# 更新
|
||||
:CocUpdate
|
||||
# 移除
|
||||
:CocUninstall [包名]
|
||||
# 查看已安装
|
||||
:CocList extensions
|
||||
```
|
||||
|
||||
## 已安装插件
|
||||
|
||||
* 代码补全工具[neoclide/coc.nvim](https://gitcode.com/mirrors/neoclide/coc.nvim)
|
||||
* 数状目录[scrooloose/nerdtree](https://gitcode.com/mirrors/scrooloose/nerdtree)
|
||||
* VIM状态栏[vim-airline/vim-airline](https://gitcode.com/vim-airline/vim-airline/overview)
|
||||
* VIM状态栏-皮肤[vim-airline/vim-airline-themes](https://gitcode.com/mirrors/vim-airline/vim-airline-themes)
|
||||
* 注释工具[preservim/nerdcommenter](https://gitcode.com/mirrors/preservim/nerdcommenter/overview)
|
||||
* 模糊搜索[Yggdroot/LeaderF](https://gitcode.com/Yggdroot/LeaderF/overview)
|
||||
* Git插件[airblade/vim-gitgutter](https://gitcode.com/mirrors/airblade/vim-gitgutter)
|
||||
* 标签栏[preservim/tagbar](https://gitcode.com/mirrors/preservim/tagbar)
|
33
配置/vimrc
33
配置/vimrc
@ -29,10 +29,21 @@ let g:NERDCompactSexyComs = 1 " 使用紧凑的语法来美化多行
|
||||
let g:NERDTrimTrailingWhitespace = 1 " 启用在取消注释时修剪尾部空白的功能
|
||||
let g:NERDToggleCheckAllLines = 1 " 启用 NERDCommenterToggle 以检查所有选定行是否已注释
|
||||
|
||||
" 树状目录: 使用目录启动时自动启动侧栏
|
||||
" 树状目录(preservim/nerdtree): 在vim侧栏启动目录
|
||||
autocmd StdinReadPre * let s:std_in=1
|
||||
" 使用目录启动时自动启动侧栏
|
||||
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists('s:std_in') |
|
||||
\ execute 'NERDTree' argv()[0] | wincmd p | enew | execute 'cd '.argv()[0] | endif
|
||||
" 在没有文件参数的情况下启动
|
||||
autocmd VimEnter * if argc() == 0 && !exists('s:std_in') | NERDTree | endif
|
||||
" 定义树状目录的快捷键
|
||||
nnoremap <leader>n :NERDTreeFocus<CR>
|
||||
nnoremap <C-n> :NERDTree<CR>
|
||||
nnoremap <C-t> :NERDTreeToggle<CR>
|
||||
nnoremap <C-f> :NERDTreeFind<CR>
|
||||
" 如果目录是最后一个窗口则自动退出vim
|
||||
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
|
||||
let g:NERDTreeFileLines = 1 " 显示文件行
|
||||
|
||||
" 标签生成器(ludovicchabant/vim-gutentags): 在特定目录下自动调用ctags生成标签
|
||||
set statusline+=%{gutentags#statusline()} " 在状态行中打印字符串“tag”,当Gutengs在后台生成内容时
|
||||
@ -44,3 +55,23 @@ let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q']
|
||||
let g:gutentags_ctags_extra_args += ['--c++-kinds=+pxI']
|
||||
let g:gutentags_ctags_extra_args += ['--c-kinds=+px']
|
||||
|
||||
" 模糊搜索(Yggdroot/LeaderF)
|
||||
let g:Lf_HideHelp = 1 " 在正常模式下不显示帮助
|
||||
let g:Lf_UseCache = 0 " 不使用缓存, 避免更新文件后搜索异常
|
||||
let g:Lf_UseVersionControlTool = 1 " 使用版本控制工具(如Git)来获取文件的状态信息
|
||||
let g:Lf_IgnoreCurrentBufferName = 1 " 忽略当前的缓冲区名称
|
||||
let g:Lf_WindowPosition = 'popup' " 窗口模式
|
||||
let g:Lf_ShortcutF = "<leader>ff" " 打开LeaderF搜索界面
|
||||
noremap <leader>fb :<C-U><C-R>=printf("Leaderf buffer %s", "")<CR><CR>
|
||||
noremap <leader>fm :<C-U><C-R>=printf("Leaderf mru %s", "")<CR><CR>
|
||||
noremap <leader>ft :<C-U><C-R>=printf("Leaderf bufTag %s", "")<CR><CR>
|
||||
noremap <leader>fl :<C-U><C-R>=printf("Leaderf line %s", "")<CR><CR>
|
||||
noremap <C-B> :<C-U><C-R>=printf("Leaderf! rg --current-buffer -e %s ", expand("<cword>"))<CR>
|
||||
noremap <C-F> :<C-U><C-R>=printf("Leaderf! rg -e %s ", expand("<cword>"))<CR>
|
||||
" 按字面意思搜索视觉选择的文本
|
||||
xnoremap gf :<C-U><C-R>=printf("Leaderf! rg -F -e %s ", leaderf#Rg#visual())<CR>
|
||||
noremap go :<C-U>Leaderf! rg --recall<CR>
|
||||
|
||||
" 标签栏
|
||||
nnoremap <C-g> :TagbarToggle<CR>
|
||||
|
||||
|
12
龙架构/开发环境.zsh
12
龙架构/开发环境.zsh
@ -1,12 +0,0 @@
|
||||
#!/usr/bin/zsh
|
||||
|
||||
#####################################
|
||||
# 用于快速配置旧世界的开发环境 #
|
||||
# 支持的语言: #
|
||||
# [ ] golang #
|
||||
# [ ] rust #
|
||||
# [ ] java #
|
||||
# [ ] nodejs #
|
||||
#####################################
|
||||
|
||||
|
Reference in New Issue
Block a user