mirror of https://github.com/Chizi123/Dotfiles.git

Joel Grunbaum
2021-12-24 49cbc019d66d408db17986a5c09b2b7d7a976576
commit | author | age
f86690 1 #!/bin/sh
JG 2
3 install_links() {
49cbc0 4     . ./DICT
f86690 5     if [ -n "$FILES" ]; then
JG 6     for i in `seq 1 $(echo "$FILES" | wc -w)`; do
7         file=$(echo "$FILES" | cut -d' ' -f $i)
8         loc=$(echo "$LOCATIONS" | cut -d' ' -f $i)
49cbc0 9         while [ 1 ]; do
JG 10             CHOICE="overwrite"
11             if [ -a "$loc" ] && [ "$FORCE" = "0" ]; then
12                 echo "WARNING: \"$loc\" exists, (overwrite, change, nothing): "
13                 read CHOICE
14             fi
15             case "$CHOICE" in
16                 o|overwrite)
17                     dir=$(dirname "$loc")
18                     mkdir -p "$dir"
19                     ln -sf "$(pwd)/$file" "$loc"; break;;
20                 c|change)
21                     tmpfile=$(mktemp)
22                     echo "$loc" >> $tmpfile
23                     $EDITOR "$tmpfile"
24                     loc=$(cat $tmpfile)
25                     rm $tmpfile
26                     unset tmpfile;;
27                 n|nothing)
28                     break;;
29                 *)
30                     echo "INVALID CHOICE \"$CHOICE\", (overwrite, change, nothing)"
31                     read CHOICE
32             esac
33         done
f86690 34     done
JG 35     fi
36     if [ -n "$SUDO_FILES" ]; then
37     for i in `seq 1 $(echo "$SUDO_FILES" | wc -w)`; do
38         file=$(echo "$SUDO_FILES" | cut -d' ' -f $i)
39         loc=$(echo "$SUDO_LOCATIONS" | cut -d' ' -f $i)
40         dir=$(echo "$loc" | rev | cut -d'/' -f2- | rev)
41         sudo mkdir -p "$dir"
42         sudo ln -sf "$(pwd)/$file" "$loc"
43     done
44     fi
45     if [ "$(type -t custom)" = "function" ]; then
46     custom install
47     fi
48 }
49
50 remove_links() {
49cbc0 51     . ./DICT
f86690 52     if [ -n "$FILES" ]; then
JG 53     for i in `seq 1 $(echo $FILES | wc -w)`; do
54         loc=$(echo "$LOCATIONS" | cut -d' ' -f $i)
55         rm "$loc" 2>/dev/null
56         loc=$(echo "$loc" | rev | cut -d'/' -f2- | rev)
57         while [ -z "$(ls -A $loc)" ]; do
58         rm -r "$loc"
59         loc=$(echo "$loc" | rev | cut -d'/' -f2- | rev)
60         done 2>/dev/null
61     done
62     fi
63     if [ -n "$SUDO_FILES" ]; then
64     for i in `seq 1 $(echo $SUDO_FILES | wc -w)`; do
65         loc=$(echo "$SUDO_LOCATIONS" | cut -d' ' -f $i)
66         sudo rm "$loc" 2>/dev/null
67         loc=$(echo "$loc" | rev | cut -d'/' -f2- | rev)
68         while [ -z "ls -A $loc" ]; do
69         sudo rm -r "$loc"
70         loc=$(echo "$loc" | rev | cut -d'/' -f2- | rev)
71         done 2>/dev/null
72     done
73     fi
74     if [ "$(type -t custom)" = "function" ]; then
75     custom remove
76     fi
77 }
78
79 handle_package() {
da991b 80     echo $1
JG 81     if [ -d "$1" ]; then
82     unset DEPS
83     eval $(grep "DEPS=" $1/DICT)
84     for i in $DEPS; do
49cbc0 85         if ! grep -q "$i" "$PACKAGE_CACHE"; then
JG 86             (handle_package $i $2)
87         fi
da991b 88     done
49cbc0 89     echo "$1" >> "$PACKAGE_CACHE"
f86690 90     (cd "$1"; $2)
JG 91     else
92     echo "No configuration found for $i"
93     fi
94 }
da991b 95
f86690 96 usage() {
JG 97     echo "Install dotfiles with symlinks"
98     echo "Usage with -h|--help"
99     echo "Install with -i|--install (default)"
100     echo "Remove with -r|--remove"
49cbc0 101     echo "Force install with -f|--force"
f86690 102     echo "Directories have the configurations for their programs/use cases"
JG 103     echo "List all configurations to be installed in the command line"
49cbc0 104     echo "If there is a file at the install location, you will be prompted to change it"
f86690 105     echo "Example usage: $0 -i bash zsh"
JG 106 }
107
108 INSTALL=1
49cbc0 109 FORCE=0
JG 110 PACKAGE_CACHE=$(mktemp)
111 DOTFILES_PATH="$(dirname $0)"
112
113 cd $DOTFILES_PATH
114
115 if [ -z "$1" ]; then
116     usage
117     exit
118 fi
f86690 119
JG 120 while [ -n "$1" ]; do
121       case "$1" in
122       -h|--help|"") usage; exit;;
123       -i|--install) INSTALL=1;;
124       -r|--remove) INSTALL=0;;
49cbc0 125       -f|--force) FORCE=1;;
f86690 126       --) shift; break;;
JG 127       -*) echo "Invalid argument"; usage; exit;;
128       *) handle_package "$1" "$([ \"$INSTALL\" = \"1\" ] && echo install || echo remove)_links";;
129       esac
130       shift
131 done
132
da991b 133 while [ -n "$1" ]; do
JG 134     handle_package "$1" "$([ \"$INSTALL\" = \"1\" ] && echo install || echo remove)_links"
135 done
49cbc0 136
JG 137 rm $PACKAGE_CACHE