Commit 23ba3cd

Eric Bower  ·  2026-06-13 13:47:27 -0400 EDT
parent 0b30ddb
refactor: dotfiles cleanup
1 files changed,  +62, -66
+62, -66
  1@@ -1,83 +1,79 @@
  2 #!/usr/bin/env bash
  3 
  4 TRACKED_FILES=(
  5-    bin/
  6-    dot_pi/agent/extensions/
  7-    dot_pi/agent/settings.json
  8-    dot_config/
  9-    dot/gitconfig
 10-    dot/mbsyncrc
 11-    dot_gnupg/gpg-agent.conf
 12-    dot_ssh/config
 13-    dot_mblaze/mblaze
 14-    dot/msmtprc
 15-    dot/npmrc
 16-    dot/editorconfig
 17+  bin/
 18+  dot_pi/agent/extensions/
 19+  dot_pi/agent/settings.json
 20+  dot_config/
 21+  dot/gitconfig
 22+  dot/mbsyncrc
 23+  dot_gnupg/gpg-agent.conf
 24+  dot_ssh/config
 25+  dot_mblaze/mblaze
 26+  dot/msmtprc
 27+  dot/npmrc
 28+  dot/editorconfig
 29 )
 30 
 31 TRACKED_LOCATIONS=(
 32-    ~/.local/bin/
 33-    ~/.pi/agent/extensions/
 34-    ~/.pi/agent/settings.json
 35-    ~/.config/
 36-    ~/.gitconfig
 37-    ~/.mbsyncrc
 38-    ~/.gnupg/gpg-agent.conf
 39-    ~/.ssh/config
 40-    ~/.mblaze/profile
 41-    ~/.msmtprc
 42-    ~/.npmrc
 43-    ~/.editorconfig
 44+  ~/.local/bin/
 45+  ~/.pi/agent/extensions/
 46+  ~/.pi/agent/settings.json
 47+  ~/.config/
 48+  ~/.gitconfig
 49+  ~/.mbsyncrc
 50+  ~/.gnupg/gpg-agent.conf
 51+  ~/.ssh/config
 52+  ~/.mblaze/profile
 53+  ~/.msmtprc
 54+  ~/.npmrc
 55+  ~/.editorconfig
 56 )
 57 
 58 find_files() {
 59-    if [[ ${TRACKED_FILES[$1]} == */ ]]; then
 60-        find "$PWD/${TRACKED_FILES[$1]}" -type d -exec find {} -maxdepth 1 -type f \; | sed "s|$PWD/${TRACKED_FILES[$1]}||" | sed "s|^/||"
 61-    fi
 62+  local tfo="${TRACKED_FILES[$1]}"
 63+  if [[ ${tfo} == */ ]]; then
 64+    find "$PWD/${tfo}" -type d -exec find {} -maxdepth 1 -type f \; | sed "s|$PWD/${tfo}||" | sed "s|^/||"
 65+  fi
 66 }
 67 
 68 link_file() {
 69-    if [[ ! -L $2 && ! -f $2 && ! -d $2 ]]; then
 70-        echo "Creating a link from $1 to $2"
 71-        mkdir -p $2
 72-        rmdir $2
 73-        ln -s $1 $2
 74-    fi
 75+  if [[ ! -L $2 && ! -f $2 && ! -d $2 ]]; then
 76+    echo "Creating a link from $1 to $2"
 77+    mkdir -p "$(dirname "$2")"
 78+    ln -s "$1" "$2"
 79+  fi
 80 }
 81-export -f link_file
 82 
 83 unlink_file() {
 84-    if [[ -L $1 ]]; then
 85-        echo "Unlinking $1"
 86-        unlink "$1"
 87-    fi
 88+  if [[ -L $1 ]]; then
 89+    echo "Unlinking $1"
 90+    unlink "$1"
 91+  fi
 92 }
 93-export -f unlink_file
 94 
 95-move_file() {
 96-    if [[ ! -L $1 ]] && [[ -f $1 || -d $1 ]]; then
 97-        echo "Moving $1 to backup/$1"
 98-        mkdir -p "backup/$1"
 99-        rmdir "backup/$1"
100-        mv $1 "backup/$1"
101-    fi
102-}
103-export -f move_file
104-
105-for ((i = 0; i < ${#TRACKED_FILES[@]}; ++i)); do
106-    if [ "$1" == "cleanup" ]; then
107-        unlink_file "${TRACKED_LOCATIONS[$i]}"
108-        find_files "$i" | xargs -I {} bash -c "unlink_file ${TRACKED_LOCATIONS[$i]}{}"
109-        continue
110-    fi
111-
112-    if [ "$1" == "override" ]; then
113-        move_file ${TRACKED_LOCATIONS[$i]}
114-        find_files "$i" | xargs -I {} bash -c "move_file ${TRACKED_LOCATIONS[$i]}{}"
115-    fi
116-
117-    if [ "$1" != "cleanup" ]; then
118-        link_file "$PWD/${TRACKED_FILES[$i]}" "${TRACKED_LOCATIONS[$i]}"
119-        find_files "$i" | xargs -I {} bash -c "link_file $PWD/${TRACKED_FILES[$i]}{} ${TRACKED_LOCATIONS[$i]}{}"
120-    fi
121-done
122+case "${1:-link}" in
123+  link)
124+    for ((i = 0; i < ${#TRACKED_FILES[@]}; ++i)); do
125+      tf="${TRACKED_FILES[$i]}"
126+      tl="${TRACKED_LOCATIONS[$i]}"
127+      link_file "$PWD/${tf}" "${tl}"
128+      while IFS= read -r file; do
129+        link_file "$PWD/${tf}${file}" "${tl}${file}"
130+      done < <(find_files "$i")
131+    done
132+    ;;
133+  cleanup)
134+    for ((i = 0; i < ${#TRACKED_FILES[@]}; ++i)); do
135+      tl="${TRACKED_LOCATIONS[$i]}"
136+      unlink_file "${tl}"
137+      while IFS= read -r file; do
138+        unlink_file "${tl}${file}"
139+      done < <(find_files "$i")
140+    done
141+    ;;
142+  *)
143+    echo "Usage: $0 [link|cleanup]" >&2
144+    exit 1
145+    ;;
146+esac