diff --git a/install.sh b/install.sh index c6dafb8..af4149c 100755 --- a/install.sh +++ b/install.sh @@ -5,7 +5,7 @@ commonFiles=(); for sourceFile in .*; do # Exclude some files. - if [[ "$sourceFile" == "dotfiles-002.png" || "$sourceFile" == "dotfiles-001.png" || "$sourceFile" == "install.sh" ]] || [[ "$sourceFile" == "README.md" ]] || [[ "$sourceFile" == "." ]] || [[ "$sourceFile" == ".." ]] || [[ "$sourceFile" == ".git" ]]; then + if [[ "$sourceFile" == "install_unattended.sh" || "$sourceFile" == "install.sh" ]] || [[ "$sourceFile" == "README.md" ]] || [[ "$sourceFile" == "." ]] || [[ "$sourceFile" == ".." ]] || [[ "$sourceFile" == ".git" ]]; then continue; fi; diff --git a/install_unattended.sh b/install_unattended.sh new file mode 100755 index 0000000..a634ddb --- /dev/null +++ b/install_unattended.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +# Go trough all the files available in this folder. +commonFiles=(); +for sourceFile in .*; do + + # Exclude some files. + if [[ "$sourceFile" == "install_unattended.sh" || "$sourceFile" == "install.sh" ]] || [[ "$sourceFile" == "README.md" ]] || [[ "$sourceFile" == "." ]] || [[ "$sourceFile" == ".." ]] || [[ "$sourceFile" == ".git" ]]; then + continue; + fi; + + # Set the target path for the source file. + # We'll port them to the ~/ (home) directory. + targetFile="$HOME/$sourceFile"; + + # The file already exists. + if [ -e "$targetFile" ]; then + + # The source and target point to the same file, continue. + [ "$sourceFile" -ef "$targetFile" ] && continue; + + # The content of the file is the same, continue. + diff -rq "$sourceFile" "$targetFile" > /dev/null 2>&1 && continue; + + # The source file is another file than our dotfile. + # Store it in the commonFiles array so we can back it up. + commonFiles+=("$sourceFile"); + + fi; +done; + +# Show the files that will be overwritten. +conflictCount=${#commonFiles[@]}; + +# Create a suffix with a timestamp so the user can see which +# files and when they've been backupped. +backupSuffix=".jsVimconfig-$(date +'%Y%m%d-%H%M%S')"; + +# Rename the conflicting files as backup. +for sourceFile in "${commonFiles[@]}"; do + targetFile="$HOME/$sourceFile"; + mv -v "$targetFile" "$targetFile$backupSuffix"; +done; + +# Symlink the files in the home dir by those in the dotfiles repo. +for sourceFile in .*; do + + # Exclude some files. + if [[ "$sourceFile" == "install_unattended.sh" || "$sourceFile" == "install.sh" ]] || [[ "$sourceFile" == "README.md" ]] || [[ "$sourceFile" == "." ]] || [[ "$sourceFile" == ".." ]] || [[ "$sourceFile" == ".git" ]]; then + continue; + fi; + + targetFile="$HOME/$sourceFile"; + + # Delete the old file and replace it by the symlink. + rm -rf "$targetFile" && + ln -vs "$PWD/$sourceFile" "$targetFile"; +done; + +# This will add a tag to our prompt, so we know which environment we're in. +# It is adaptable in ~/.bash_environment +touch ~/.bash_environment; +echo -e "export __prompt_environment='DEVELOPMENT'" | tee ~/.bash_environment > /dev/null; \ No newline at end of file