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

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