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