aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md15
-rwxr-xr-xdot-backup.sh12
2 files changed, 20 insertions, 7 deletions
diff --git a/README.md b/README.md
index 1a5f0ed..d75e366 100644
--- a/README.md
+++ b/README.md
@@ -135,15 +135,18 @@ GIT_BRANCH="master"
## Adding Files
-**Edit the script** — add paths to the `DOTFILES` array in `dot-backup.sh`.
-
-**Or use the external list** — add paths to `~/.config/dot-backup/files.list`, one per line:
+**External list (recommended)** — create `~/.config/dot-backup/files.list` with one path per line. When this file exists and is non-empty it replaces the built-in list entirely:
```
-# extra dotfiles
-.config/myapp
-.config/otherapp.conf
+# shell
+.bashrc
+.bash_aliases
+
+# system files
/etc/hosts
+/etc/fstab
```
+**Built-in fallback** — if `files.list` is missing or empty, the script uses the `DOTFILES` array hardcoded in `dot-backup.sh`.
+
Relative paths are treated as `$HOME`-relative. Absolute paths (starting with `/`) are treated as system files.
diff --git a/dot-backup.sh b/dot-backup.sh
index 0e22d70..f58c873 100755
--- a/dot-backup.sh
+++ b/dot-backup.sh
@@ -160,10 +160,20 @@ DOTFILES=(
"/etc/bash_completion.d"
)
-# Load external list if it exists, appending to built-in list
+# Use external list exclusively if it exists and is non-empty
+_has_external_list=false
if [[ -f "$DOTFILES_LIST" ]]; then
while IFS= read -r line || [[ -n "$line" ]]; do
[[ "$line" =~ ^#.*$ || -z "$line" ]] && continue
+ _has_external_list=true
+ break
+ done < "$DOTFILES_LIST"
+fi
+
+if [[ "$_has_external_list" == true ]]; then
+ DOTFILES=()
+ while IFS= read -r line || [[ -n "$line" ]]; do
+ [[ "$line" =~ ^#.*$ || -z "$line" ]] && continue
DOTFILES+=("$line")
done < "$DOTFILES_LIST"
fi