4fc664d243
Link mise/config.toml into ~/.config/mise/conf.d/dotfile.toml so mise use -g writes the local config.toml instead of dirtying git.
104 lines
3.1 KiB
Bash
Executable File
104 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# 安装 mise,链接共享配置到 conf.d,安装工具
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
# shellcheck disable=SC1091
|
|
source "$SCRIPT_DIR/common/help.sh"
|
|
|
|
usage() {
|
|
cat <<'EOF'
|
|
用法: mise-install
|
|
|
|
1. 若未安装则通过官方脚本安装 mise
|
|
2. 链接 ~/.dotfile/mise/config.toml 到 ~/.config/mise/conf.d/dotfile.toml
|
|
3. 若全局 config.toml 仍指向仓库,则改为本机实文件(mise use -g 写这里)
|
|
4. 执行 mise install 安装配置中的工具
|
|
|
|
选项:
|
|
-h, --help 显示此帮助
|
|
EOF
|
|
}
|
|
|
|
dotfile_help_requested "${1:-}" && dotfile_show_help
|
|
|
|
set -euo pipefail
|
|
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
mise_fail() {
|
|
echo -e "${RED}mise 安装失败,请检查错误信息${NC}" >&2
|
|
exit 1
|
|
}
|
|
|
|
if ! command -v mise &>/dev/null; then
|
|
echo -e "${YELLOW}mise 未安装. 正在安装 mise...${NC}"
|
|
# 无 pipefail 时 curl 失败 sh 仍可能退出 0,会误报「安装完成」
|
|
curl -fL --retry 3 https://mise.run | sh || mise_fail
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
|
|
if ! command -v mise &>/dev/null; then
|
|
mise_fail
|
|
fi
|
|
|
|
if [ -f ~/.config/fish/config.fish ]; then
|
|
if ! grep -q "mise activate" ~/.config/fish/config.fish; then
|
|
echo -e "${YELLOW}正在为 fish shell 配置 mise...${NC}"
|
|
{
|
|
echo ''
|
|
echo '# mise (formerly rtx)'
|
|
echo 'mise activate fish | source'
|
|
} >>~/.config/fish/config.fish
|
|
echo -e "${GREEN}已将 mise 添加到 ~/.config/fish/config.fish${NC}"
|
|
fi
|
|
fi
|
|
|
|
echo -e "${GREEN}mise 安装完成${NC}"
|
|
else
|
|
echo -e "${GREEN}mise 已安装${NC}"
|
|
mise --version
|
|
fi
|
|
|
|
MISE_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/mise"
|
|
DOTFILE_MISE_CONFIG="$HOME/.dotfile/mise/config.toml"
|
|
MISE_GLOBAL_CONFIG="$MISE_CONFIG_DIR/config.toml"
|
|
MISE_SHARED_LINK="$MISE_CONFIG_DIR/conf.d/dotfile.toml"
|
|
|
|
mkdir -p "$MISE_CONFIG_DIR/conf.d"
|
|
|
|
if [ -f "$DOTFILE_MISE_CONFIG" ]; then
|
|
# 旧布局:全局 config.toml 软链进仓库,mise use -g 会弄脏 git
|
|
if [ -L "$MISE_GLOBAL_CONFIG" ] &&
|
|
[ "$(readlink -f "$MISE_GLOBAL_CONFIG")" = "$(readlink -f "$DOTFILE_MISE_CONFIG")" ]; then
|
|
rm -f "$MISE_GLOBAL_CONFIG"
|
|
echo -e "${YELLOW}已解开指向仓库的全局 config.toml 软链,改为本机文件${NC}"
|
|
fi
|
|
|
|
ln -sf "$DOTFILE_MISE_CONFIG" "$MISE_SHARED_LINK"
|
|
echo -e "${GREEN}已链接共享 mise 配置: $MISE_SHARED_LINK${NC}"
|
|
mise trust "$DOTFILE_MISE_CONFIG" 2>/dev/null || true
|
|
|
|
if [ ! -e "$MISE_GLOBAL_CONFIG" ]; then
|
|
cat >"$MISE_GLOBAL_CONFIG" <<'EOF'
|
|
# 本机工具(mise use -g)。共享配置: ~/.dotfile/mise/config.toml
|
|
[tools]
|
|
EOF
|
|
echo -e "${GREEN}已创建本机 mise 配置: $MISE_GLOBAL_CONFIG${NC}"
|
|
fi
|
|
mise trust "$MISE_GLOBAL_CONFIG" 2>/dev/null || true
|
|
fi
|
|
|
|
if command -v mise &>/dev/null && [ -f "$MISE_CONFIG_DIR/config.toml" ]; then
|
|
echo -e "${YELLOW}正在安装 mise 工具...${NC}"
|
|
mise install
|
|
echo -e "${GREEN}mise 工具安装完成${NC}"
|
|
fi
|
|
|
|
if command -v mise &>/dev/null; then
|
|
echo -e "${GREEN}mise 安装成功!${NC}"
|
|
else
|
|
mise_fail
|
|
fi
|