From 81bebadff8ea868fa1695aa99710e7cd57d82116 Mon Sep 17 00:00:00 2001 From: laily Date: Mon, 1 Jun 2026 00:41:15 +0800 Subject: [PATCH] fix: init fish --- fish/{config.fish => default.fish} | 0 script/fish-init.sh | 37 ++++++++++++++++++++++++++---- 2 files changed, 32 insertions(+), 5 deletions(-) rename fish/{config.fish => default.fish} (100%) diff --git a/fish/config.fish b/fish/default.fish similarity index 100% rename from fish/config.fish rename to fish/default.fish diff --git a/script/fish-init.sh b/script/fish-init.sh index cbae3a6..bf81801 100755 --- a/script/fish-init.sh +++ b/script/fish-init.sh @@ -1,11 +1,38 @@ #!/bin/bash -echo 'Link fish config file' -# 备份并链接 config.fish -if [ -f "$HOME/.config/fish/config.fish" ] && [ ! -L "$HOME/.config/fish/config.fish" ]; then - mv $HOME/.config/fish/config.fish $HOME/.config/fish/config.fish.bak +LOCAL_CONFIG="$HOME/.config/fish/config.fish" +DEFAULT_PATH="$HOME/.dotfile/fish/default.fish" +SOURCE_LINE="source $DEFAULT_PATH" + +mkdir -p "$HOME/.config/fish" + +echo 'Setup fish config.fish wrapper' + +# 旧版迁移:如果 config.fish 是指向 dotfile 的 symlink(老布局),移除 +if [ -L "$LOCAL_CONFIG" ]; then + link_target=$(readlink "$LOCAL_CONFIG") + case "$link_target" in + */dotfile/fish/config.fish|*/dotfile/fish/default.fish) + echo " Removing legacy symlink: $LOCAL_CONFIG -> $link_target" + rm "$LOCAL_CONFIG" + ;; + esac +fi + +# 不存在 -> 创建只含一行 source 的本地 wrapper +# 存在但未 source default.fish -> 在文件顶部插入 source 行 +# 已 source -> 跳过 +if [ ! -f "$LOCAL_CONFIG" ]; then + echo "$SOURCE_LINE" > "$LOCAL_CONFIG" + echo " Created $LOCAL_CONFIG (sources default.fish)" +elif ! grep -qE '^[[:space:]]*source.*default\.fish' "$LOCAL_CONFIG"; then + tmp=$(mktemp) + { echo "$SOURCE_LINE"; echo; cat "$LOCAL_CONFIG"; } > "$tmp" + mv "$tmp" "$LOCAL_CONFIG" + echo " Prepended source line to existing $LOCAL_CONFIG" +else + echo " $LOCAL_CONFIG already sources default.fish, skip" fi -ln -sf $HOME/.dotfile/fish/config.fish $HOME/.config/fish/config.fish # 确保目标目录存在 echo 'Link fish functions and completions'