Skip fish/conf.d when syncing to preserve user customizations

This commit is contained in:
Perdixky
2025-12-03 10:04:17 +08:00
parent c093265b05
commit dd07a62dc0
3 changed files with 22 additions and 1 deletions
+1
View File
@@ -20,6 +20,7 @@ patterns:
- from: "dots/.config/fish"
to: "$XDG_CONFIG_HOME/fish"
mode: "sync"
excludes: ["conf.d"]
condition:
type: "shell"
value: "fish"
+5 -1
View File
@@ -30,7 +30,11 @@ esac
case "${SKIP_FISH}" in
true) sleep 0;;
*)
install_dir__sync dots/.config/fish "$XDG_CONFIG_HOME"/fish
# Use rsync with exclude to preserve user's custom conf.d directory
if [ -d "$XDG_CONFIG_HOME"/fish ];then
warning_overwrite
fi
rsync_dir__sync_exclude dots/.config/fish "$XDG_CONFIG_HOME"/fish "conf.d"
;;
esac
+16
View File
@@ -67,6 +67,22 @@ rsync_dir__sync(){
x mkdir -p "$(dirname ${INSTALLED_LISTFILE})"
rsync -a --delete --out-format='%i %n' "$1"/ "$2"/ | awk -v d="$dest" '$1 ~ /^>/{ sub(/^[^ ]+ /,""); printf d "/" $0 "\n" }' >> "${INSTALLED_LISTFILE}"
}
rsync_dir__sync_exclude(){
# NOTE: This function is only for using in other functions
# Same as rsync_dir__sync but with exclude patterns support
# Usage: rsync_dir__sync_exclude <src> <dest> <exclude_pattern1> [<exclude_pattern2> ...]
local src="$1"
local dest_dir="$2"
shift 2
local excludes=()
for pattern in "$@"; do
excludes+=(--exclude "$pattern")
done
x mkdir -p "$dest_dir"
local dest="$(realpath -se $dest_dir)"
x mkdir -p "$(dirname ${INSTALLED_LISTFILE})"
rsync -a --delete "${excludes[@]}" --out-format='%i %n' "$src"/ "$dest_dir"/ | awk -v d="$dest" '$1 ~ /^>/{ sub(/^[^ ]+ /,""); printf d "/" $0 "\n" }' >> "${INSTALLED_LISTFILE}"
}
function install_file(){
# NOTE: Do not add prefix `v` or `x` when using this function
local s=$1