#!/bin/sh install_links() { source ./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) dir=$(echo "$loc" | rev | cut -d'/' -f2- | rev) mkdir -p "$dir" ln -sf "$(pwd)/$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 fi if [ "$(type -t custom)" = "function" ]; then custom install fi } remove_links() { source ./DICT if [ -n "$FILES" ]; then 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 rm -r "$loc" loc=$(echo "$loc" | rev | cut -d'/' -f2- | rev) 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) sudo rm "$loc" 2>/dev/null loc=$(echo "$loc" | rev | cut -d'/' -f2- | rev) 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 fi } handle_package() { echo $1 if [ -d "$1" ]; then unset DEPS eval $(grep "DEPS=" $1/DICT) for i in $DEPS; do (handle_package $i $2) done (cd "$1"; $2) 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 "Directories have the configurations for their programs/use cases" echo "List all configurations to be installed in the command line" echo "Example usage: $0 -i bash zsh" } INSTALL=1 PACKAGES="" FUNCTION="" while [ -n "$1" ]; do case "$1" in -h|--help|"") usage; exit;; -i|--install) INSTALL=1;; -r|--remove) INSTALL=0;; --) shift; break;; -*) echo "Invalid argument"; usage; exit;; *) 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" done