diff --git a/dotlink b/dotlink index 76af01e..79f584c 100755 --- a/dotlink +++ b/dotlink @@ -17,8 +17,44 @@ function warning { function error { echo -ne "${text_bold}${text_red}ERROR${text_reset} $1\n" + exit 1 } +function print_usage { + cat < /dev/null && pwd )" @@ -32,35 +68,56 @@ fi cd "$dotfiles/machines/$HOSTNAME" files=( $(find -L -type f -printf '%P\n')) -log "Linking $text_bold${#files[@]}$text_reset files..\n" +if [ "$unlink" == true ]; then + log "Unlinking $text_bold${#files[@]}$text_reset files..\n" +else + log "Linking $text_bold${#files[@]}$text_reset files..\n" +fi -# Link files for file in "${files[@]}"; do - - # Check if target is a link - if [ -L "$HOME/$file" ]; then - if [ "$(readlink $HOME/$file)" != "$dotfiles/machines/$HOSTNAME/$file" ]; then - warning "$text_bold$HOME/$file$text_reset is a link but doesn't point to this repository, it will not be linked" - continue + # Unlink files + if [ "$unlink" == true ]; then + + if [ -L "$HOME/$file" ] && [ "$(readlink $HOME/$file)" == "$dotfiles/machines/$HOSTNAME/$file" ]; then + + rm "$HOME/$file" + log "Unlinked $text_bold$HOME/$file$text_reset" + + # Remove base directory if empty + if ! [ "$(ls -A $(dirname $HOME/$file))" ]; then + rmdir "$(dirname $HOME/$file)" + log "Removed empty directory $text_bold$(dirname $HOME/$file)$text_reset" + fi fi - # Check if target is a file or directory - elif [ -f "$HOME/$file" ]; then - - warning "$text_bold$HOME/$file$text_reset exists and will not be linked" - continue - - # Create link + # Link files else - # Create target directory if not existent - mkdir -p "$(dirname $HOME/$file)" + # Check if target is a link + if [ -L "$HOME/$file" ]; then - # Link file - ln -s "$dotfiles/machines/$HOSTNAME/$file" "$HOME/$file" - log "Linked $text_bold$dotfiles/$file$text_reset to $text_bold$HOME/$file$text_reset" + if [ "$(readlink $HOME/$file)" != "$dotfiles/machines/$HOSTNAME/$file" ]; then + warning "$text_bold$HOME/$file$text_reset is a link but doesn't point to this repository, it will not be linked" + continue + fi + # Check if target is a file or directory + elif [ -f "$HOME/$file" ]; then + + warning "$text_bold$HOME/$file$text_reset exists and will not be linked" + continue + + # Create link + else + + # Create target directory if not existent + mkdir -p "$(dirname $HOME/$file)" + + # Link file + ln -s "$dotfiles/machines/$HOSTNAME/$file" "$HOME/$file" + log "Linked $text_bold$dotfiles/$file$text_reset to $text_bold$HOME/$file$text_reset" + fi fi done