feat: add init.sh
This commit is contained in:
@@ -0,0 +1,93 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 安装并初始化 Fish、tmux 与 Git 的基础 dotfile 环境
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
source "$SCRIPT_DIR/script/common/help.sh"
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
source "$SCRIPT_DIR/script/common/os-arch.sh"
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<'EOF'
|
||||||
|
用法: ./init.sh
|
||||||
|
|
||||||
|
安装缺失的基础工具(fish、tmux、git),随后依次执行:
|
||||||
|
1. fish-init 初始化 Fish 配置、插件与默认 shell
|
||||||
|
2. tmux-init 初始化 tmux 配置与 TPM 插件
|
||||||
|
3. git-init 初始化 Git 配置
|
||||||
|
|
||||||
|
支持:
|
||||||
|
macOS Homebrew
|
||||||
|
Debian/Ubuntu apt
|
||||||
|
|
||||||
|
选项:
|
||||||
|
-h, --help 显示此帮助
|
||||||
|
|
||||||
|
说明:
|
||||||
|
请以需要配置的普通用户运行,不要使用 sudo 运行本脚本。
|
||||||
|
Linux 安装缺失软件时会请求 sudo;Fish 初始化也会请求 sudo 将 fish
|
||||||
|
加入 /etc/shells。
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
dotfile_help_requested "${1:-}" && dotfile_show_help
|
||||||
|
[[ $# -eq 0 ]] || { echo "错误: 不支持参数: $*" >&2; usage >&2; exit 1; }
|
||||||
|
|
||||||
|
die() {
|
||||||
|
echo "错误: $*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
run_with_sudo() {
|
||||||
|
if [[ $EUID -eq 0 ]]; then
|
||||||
|
"$@"
|
||||||
|
else
|
||||||
|
sudo "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ $EUID -ne 0 ]] || die "请以需要配置的普通用户运行,不要使用 sudo ./init.sh"
|
||||||
|
[[ -d "$HOME/.dotfile" ]] || die "未找到 $HOME/.dotfile;请将仓库放在该路径后重试"
|
||||||
|
[[ "$SCRIPT_DIR" -ef "$HOME/.dotfile" ]] || die "当前仓库不是 $HOME/.dotfile;现有初始化脚本依赖该路径"
|
||||||
|
|
||||||
|
missing_packages=()
|
||||||
|
command -v fish >/dev/null 2>&1 || missing_packages+=(fish)
|
||||||
|
command -v tmux >/dev/null 2>&1 || missing_packages+=(tmux)
|
||||||
|
command -v git >/dev/null 2>&1 || missing_packages+=(git)
|
||||||
|
|
||||||
|
if ((${#missing_packages[@]} == 0)); then
|
||||||
|
echo "基础工具已安装:fish、tmux、git"
|
||||||
|
else
|
||||||
|
echo "安装缺失工具: ${missing_packages[*]}"
|
||||||
|
case "$(get_os)" in
|
||||||
|
darwin)
|
||||||
|
command -v brew >/dev/null 2>&1 || die "未找到 Homebrew;请先运行: bash script/brew-install.sh"
|
||||||
|
brew install "${missing_packages[@]}"
|
||||||
|
;;
|
||||||
|
linux)
|
||||||
|
command -v apt-get >/dev/null 2>&1 || die "仅支持 apt;请先通过系统包管理器安装: ${missing_packages[*]}"
|
||||||
|
run_with_sudo apt-get update
|
||||||
|
run_with_sudo apt-get install -y "${missing_packages[@]}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
die "不支持的系统: $(get_os)"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "== 初始化 Fish =="
|
||||||
|
bash "$SCRIPT_DIR/script/fish-init.sh"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "== 初始化 tmux =="
|
||||||
|
bash "$SCRIPT_DIR/script/tmux-init.sh"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "== 初始化 Git =="
|
||||||
|
bash "$SCRIPT_DIR/script/git-init.sh"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "基础环境初始化完成。重新打开终端后 Fish 将作为默认 shell 生效。"
|
||||||
+12
-4
@@ -24,11 +24,19 @@ dotfile_help_requested "${1:-}" && dotfile_show_help
|
|||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
echo 'Init git config'
|
echo 'Init git config'
|
||||||
src=$HOME/.gitconfig
|
src="$HOME/.gitconfig"
|
||||||
if [ -f "$src" ]; then
|
target="$HOME/.dotfile/git/.gitconfig"
|
||||||
mv "$src" "$src.bak"
|
if [ -L "$src" ] && [ "$(readlink "$src")" = "$target" ]; then
|
||||||
|
echo " $src already links to dotfile config, skip"
|
||||||
|
else
|
||||||
|
if [ -e "$src" ] || [ -L "$src" ]; then
|
||||||
|
backup="${src}.backup.$(date +%Y%m%d%H%M%S)"
|
||||||
|
mv "$src" "$backup"
|
||||||
|
echo " Backed up existing config: $backup"
|
||||||
|
fi
|
||||||
|
ln -s "$target" "$src"
|
||||||
|
echo " Linked: $src -> $target"
|
||||||
fi
|
fi
|
||||||
ln -s "$HOME/.dotfile/git/.gitconfig" "$src"
|
|
||||||
|
|
||||||
chmod +x "$HOME/.dotfile/git/git-credential.sh"
|
chmod +x "$HOME/.dotfile/git/git-credential.sh"
|
||||||
# 兼容旧路径:若仍存在则保持可执行
|
# 兼容旧路径:若仍存在则保持可执行
|
||||||
|
|||||||
+17
-5
@@ -23,11 +23,19 @@ dotfile_help_requested "${1:-}" && dotfile_show_help
|
|||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
echo 'Init tmux config'
|
echo 'Init tmux config'
|
||||||
src=$HOME/.tmux.conf
|
src="$HOME/.tmux.conf"
|
||||||
if [ -e "$src" ]; then
|
target="$HOME/.dotfile/tmux/.tmux.conf"
|
||||||
mv "$src" "$src.bak"
|
if [ -L "$src" ] && [ "$(readlink "$src")" = "$target" ]; then
|
||||||
|
echo " $src already links to dotfile config, skip"
|
||||||
|
else
|
||||||
|
if [ -e "$src" ] || [ -L "$src" ]; then
|
||||||
|
backup="${src}.backup.$(date +%Y%m%d%H%M%S)"
|
||||||
|
mv "$src" "$backup"
|
||||||
|
echo " Backed up existing config: $backup"
|
||||||
|
fi
|
||||||
|
ln -s "$target" "$src"
|
||||||
|
echo " Linked: $src -> $target"
|
||||||
fi
|
fi
|
||||||
ln -s "$HOME/.dotfile/tmux/.tmux.conf" "$src"
|
|
||||||
|
|
||||||
echo 'Install tpm'
|
echo 'Install tpm'
|
||||||
if [ ! -e ~/.tmux/plugins/tpm ]; then
|
if [ ! -e ~/.tmux/plugins/tpm ]; then
|
||||||
@@ -38,4 +46,8 @@ echo 'Install tmux plugin by tpm'
|
|||||||
"$HOME/.tmux/plugins/tpm/bin/install_plugins"
|
"$HOME/.tmux/plugins/tpm/bin/install_plugins"
|
||||||
|
|
||||||
echo 'Reload tmux'
|
echo 'Reload tmux'
|
||||||
tmux source ~/.tmux.conf
|
if tmux list-sessions >/dev/null 2>&1; then
|
||||||
|
tmux source-file "$src"
|
||||||
|
else
|
||||||
|
echo ' No running tmux server, config will be loaded when tmux starts'
|
||||||
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user