Commit 6d8a975

Eric Bower  ·  2026-06-13 13:58:09 -0400 EDT
parent 23ba3cd
refactor: use assoc array
1 files changed,  +22, -37
+22, -37
 1@@ -1,44 +1,30 @@
 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-)
18-
19-TRACKED_LOCATIONS=(
20-  ~/.local/bin/
21-  ~/.pi/agent/extensions/
22-  ~/.pi/agent/settings.json
23-  ~/.config/
24-  ~/.gitconfig
25-  ~/.mbsyncrc
26-  ~/.gnupg/gpg-agent.conf
27-  ~/.ssh/config
28-  ~/.mblaze/profile
29-  ~/.msmtprc
30-  ~/.npmrc
31-  ~/.editorconfig
32+declare -A TRACKED
33+TRACKED=(
34+  [bin/]="$HOME/.local/bin/"
35+  [dot_pi/agent/extensions/]="$HOME/.pi/agent/extensions/"
36+  [dot_pi/agent/settings.json]="$HOME/.pi/agent/settings.json"
37+  [dot_config/]="$HOME/.config/"
38+  [dot/gitconfig]="$HOME/.gitconfig"
39+  [dot/mbsyncrc]="$HOME/.mbsyncrc"
40+  [dot_gnupg/gpg-agent.conf]="$HOME/.gnupg/gpg-agent.conf"
41+  [dot_ssh/config]="$HOME/.ssh/config"
42+  [dot_mblaze/mblaze]="$HOME/.mblaze/profile"
43+  [dot/msmtprc]="$HOME/.msmtprc"
44+  [dot/npmrc]="$HOME/.npmrc"
45+  [dot/editorconfig]="$HOME/.editorconfig"
46 )
47 
48 find_files() {
49-  local tfo="${TRACKED_FILES[$1]}"
50+  local tfo="$1"
51   if [[ ${tfo} == */ ]]; then
52     find "$PWD/${tfo}" -type d -exec find {} -maxdepth 1 -type f \; | sed "s|$PWD/${tfo}||" | sed "s|^/||"
53   fi
54 }
55 
56 link_file() {
57-  if [[ ! -L $2 && ! -f $2 && ! -d $2 ]]; then
58+  if [[ ! -L "$2" && ! -f "$2" && ! -d "$2" ]]; then
59     echo "Creating a link from $1 to $2"
60     mkdir -p "$(dirname "$2")"
61     ln -s "$1" "$2"
62@@ -54,22 +40,21 @@ unlink_file() {
63 
64 case "${1:-link}" in
65   link)
66-    for ((i = 0; i < ${#TRACKED_FILES[@]}; ++i)); do
67-      tf="${TRACKED_FILES[$i]}"
68-      tl="${TRACKED_LOCATIONS[$i]}"
69+    for tf in "${!TRACKED[@]}"; do
70+      tl="${TRACKED[$tf]}"
71       link_file "$PWD/${tf}" "${tl}"
72       while IFS= read -r file; do
73         link_file "$PWD/${tf}${file}" "${tl}${file}"
74-      done < <(find_files "$i")
75+      done < <(find_files "$tf")
76     done
77     ;;
78   cleanup)
79-    for ((i = 0; i < ${#TRACKED_FILES[@]}; ++i)); do
80-      tl="${TRACKED_LOCATIONS[$i]}"
81+    for tf in "${!TRACKED[@]}"; do
82+      tl="${TRACKED[$tf]}"
83       unlink_file "${tl}"
84       while IFS= read -r file; do
85         unlink_file "${tl}${file}"
86-      done < <(find_files "$i")
87+      done < <(find_files "$tf")
88     done
89     ;;
90   *)