From b15df10cd9a91fc7c3c088417134af478bb73730 Mon Sep 17 00:00:00 2001
From: Joel Grunbaum <joelgrun@gmail.com>
Date: Wed, 26 Oct 2022 04:24:57 +0000
Subject: [PATCH] Added login shell profiles to source configs for wayland firefox

---
 INSTALL.sh |  161 +++++++++++++++++++++++++++++------------------------
 1 files changed, 89 insertions(+), 72 deletions(-)

diff --git a/INSTALL.sh b/INSTALL.sh
index 72f1af1..6ebd948 100755
--- a/INSTALL.sh
+++ b/INSTALL.sh
@@ -1,116 +1,130 @@
 #!/bin/sh
 
+install_conflict() {
+    file="$1";
+    loc="$2";
+    if [ -n "$3" ]; then
+        SUPERUSER="sudo"
+    else
+        SUPERUSER="";
+    fi
+    while true; do
+        CHOICE="overwrite"
+        if [ -e "$loc" ] && [ "$FORCE" = "0" ]; then
+            echo "WARNING: \"$loc\" exists, (overwrite, change, nothing): "
+            read CHOICE
+        fi
+        case "$CHOICE" in
+            o|overwrite)
+	            dir=$(dirname "$loc")
+	            $SUPERUSER mkdir -p "$dir"
+	            $SUPERUSER ln -sf "$(pwd)/$file" "$loc"; break;;
+            c|change)
+                tmpfile=$(mktemp)
+                echo "$loc" >> "$tmpfile"
+                $EDITOR "$tmpfile"
+                loc=$(cat "$tmpfile")
+                rm "$tmpfile"
+                unset tmpfile;;
+            n|nothing)
+                break;;
+            *)
+                echo "INVALID CHOICE \"$CHOICE\", (overwrite, change, nothing)"
+                read CHOICE
+        esac
+    done
+
+}
+
 install_links() {
     . ./DICT
     if [ -n "$FILES" ]; then
-	for i in `seq 1 $(echo "$FILES" | wc -w)`; do
-	    file=$(echo "$FILES" | cut -d' ' -f $i)
-	    loc=$(echo "$LOCATIONS" | cut -d' ' -f $i)
-        while [ 1 ]; do
-            CHOICE="overwrite"
-            if [ -a "$loc" ] && [ "$FORCE" = "0" ]; then
-                echo "WARNING: \"$loc\" exists, (overwrite, change, nothing): "
-                read CHOICE
-            fi
-            case "$CHOICE" in
-                o|overwrite)
-	                dir=$(dirname "$loc")
-	                mkdir -p "$dir"
-	                ln -sf "$(pwd)/$file" "$loc"; break;;
-                c|change)
-                    tmpfile=$(mktemp)
-                    echo "$loc" >> $tmpfile
-                    $EDITOR "$tmpfile"
-                    loc=$(cat $tmpfile)
-                    rm $tmpfile
-                    unset tmpfile;;
-                n|nothing)
-                    break;;
-                *)
-                    echo "INVALID CHOICE \"$CHOICE\", (overwrite, change, nothing)"
-                    read CHOICE
-            esac
-        done
+	for i in $(seq 1 "$(echo "$FILES" | wc -w)"); do
+	    file=$(echo "$FILES" | cut -d' ' -f "$i")
+	    loc=$(echo "$LOCATIONS" | cut -d' ' -f "$i")
+        install_conflict "$file" "$loc"
 	done
     fi
     if [ -n "$SUDO_FILES" ]; then
-	for i in `seq 1 $(echo "$SUDO_FILES" | wc -w)`; do
-	    file=$(echo "$SUDO_FILES" | cut -d' ' -f $i)
-	    loc=$(echo "$SUDO_LOCATIONS" | cut -d' ' -f $i)
-	    dir=$(echo "$loc" | rev | cut -d'/' -f2- | rev)
-	    sudo mkdir -p "$dir"
-	    sudo ln -sf "$(pwd)/$file" "$loc"
-	done
+	    for i in $(seq 1 "$(echo "$SUDO_FILES" | wc -w)"); do
+	        file=$(echo "$SUDO_FILES" | cut -d' ' -f "$i")
+	        loc=$(echo "$SUDO_LOCATIONS" | cut -d' ' -f "$i")
+            install_conflict "$file" "$loc" 1
+	    done
     fi
-    if [ "$(type -t custom)" = "function" ]; then
-	custom install
+    if type custom 2>/dev/null | grep -q "function" ; then
+	    custom install
     fi
 }
 
 remove_links() {
     . ./DICT
     if [ -n "$FILES" ]; then
-	for i in `seq 1 $(echo $FILES | wc -w)`; do
-	    loc=$(echo "$LOCATIONS" | cut -d' ' -f $i)
+	for i in $(seq 1 "$(echo "$FILES" | wc -w)"); do
+	    loc=$(echo "$LOCATIONS" | cut -d' ' -f "$i")
 	    rm "$loc" 2>/dev/null
-	    loc=$(echo "$loc" | rev | cut -d'/' -f2- | rev)
-	    while [ -z "$(ls -A $loc)" ]; do
+	    loc=$(dirname "$loc")
+	    while [ -z "$(ls -A "$loc")" ]; do
 		rm -r "$loc"
-		loc=$(echo "$loc" | rev | cut -d'/' -f2- | rev)
+		loc=$(dirname "$loc")
 	    done 2>/dev/null
 	done
     fi
     if [ -n "$SUDO_FILES" ]; then
-	for i in `seq 1 $(echo $SUDO_FILES | wc -w)`; do
-	    loc=$(echo "$SUDO_LOCATIONS" | cut -d' ' -f $i)
+	for i in $(seq 1 "$(echo "$SUDO_FILES" | wc -w)"); do
+	    loc=$(echo "$SUDO_LOCATIONS" | cut -d' ' -f "$i")
 	    sudo rm "$loc" 2>/dev/null
 	    loc=$(echo "$loc" | rev | cut -d'/' -f2- | rev)
-	    while [ -z "ls -A $loc" ]; do
+	    while [ -z "$(ls -A "$loc")" ]; do
 		sudo rm -r "$loc"
 		loc=$(echo "$loc" | rev | cut -d'/' -f2- | rev)
 	    done 2>/dev/null
 	done
     fi
-    if [ "$(type -t custom)" = "function" ]; then
-	custom remove
+    if type custom | grep -q "function"; then
+	    custom remove
     fi
 }
 
 handle_package() {
-    echo $1
     if [ -d "$1" ]; then
 	unset DEPS
-	eval $(grep "DEPS=" $1/DICT)
-	for i in $DEPS; do
-        if ! grep -q "$i" "$PACKAGE_CACHE"; then
-	        (handle_package $i $2)
-        fi
-	done
+	eval "$(grep "DEPS=" "$1/DICT")"
+    if ! [ "$INSTALL" = "0" ] && [ "$REMOVE_DEPS" = "0" ]; then
+	    for i in $DEPS; do
+            if ! grep -q "$i" "$PACKAGE_CACHE"; then
+	            (handle_package "$i")
+            fi
+	    done
+    fi
+    echo "$1"
     echo "$1" >> "$PACKAGE_CACHE"
-	(cd "$1"; $2)
+	(cd "$1" || exit; "$([ "$INSTALL" = "1" ] && echo install || echo remove)_links")
     else
 	echo "No configuration found for $i"
     fi
 }
 
 usage() {
-    echo "Install dotfiles with symlinks"
-    echo "Usage with -h|--help"
-    echo "Install with -i|--install (default)"
-    echo "Remove with -r|--remove"
-    echo "Force install with -f|--force"
-    echo "Directories have the configurations for their programs/use cases"
-    echo "List all configurations to be installed in the command line"
-    echo "If there is a file at the install location, you will be prompted to change it"
-    echo "Example usage: $0 -i bash zsh"
+    cat << EOF
+USAGE
+    $(basename "$0") [options] configs... ([option] [configs])...
+
+OPTIONS
+    -h, --help          Display this help message
+    -i, --install       Install packages following this flag (default)
+    -r, --remove        Remove packages following this flag
+    -f, --force         Force install all packages following this flag
+EOF
 }
 
 INSTALL=1
 FORCE=0
-PACKAGE_CACHE=$(mktemp)
-DOTFILES_PATH="$(dirname $0)"
+REMOVE_DEPS=0
+PACKAGE_CACHE="$(mktemp)"
+DOTFILES_PATH="$(dirname "$0")"
 
-cd $DOTFILES_PATH
+cd "$DOTFILES_PATH" || exit
 
 if [ -z "$1" ]; then
     usage
@@ -120,18 +134,21 @@
 while [ -n "$1" ]; do
       case "$1" in
 	  -h|--help|"") usage; exit;;
-	  -i|--install) INSTALL=1;;
-	  -r|--remove) INSTALL=0;;
+	  -i|--install) INSTALL=1; FORCE=0;;
       -f|--force) FORCE=1;;
+      -if|-fi) INSTALL=1; FORCE=1;;
+	  -r|--remove) INSTALL=0; REMOVE_DEPS=0;;
+      -d|--deps) REMOVE_DEPS=1;;
+      -rd|-dr) INSTALL=0; REMOVE_DEPS=1;;
 	  --) shift; break;;
 	  -*) echo "Invalid argument"; usage; exit;;
-	  *) handle_package "$1" "$([ \"$INSTALL\" = \"1\" ] && echo install || echo remove)_links";;
+	  *) handle_package "$1";; # "$([ \"$INSTALL\" = \"1\" ] && echo install || echo remove)_links";;
       esac
       shift
 done
 
 while [ -n "$1" ]; do
-    handle_package "$1" "$([ \"$INSTALL\" = \"1\" ] && echo install || echo remove)_links"
+    handle_package "$1"
 done
 
-rm $PACKAGE_CACHE
+rm "$PACKAGE_CACHE"

--
Gitblit v1.9.3