You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
311 lines
7.2 KiB
311 lines
7.2 KiB
#!/bin/bash
|
|
|
|
# This symlinks all the dotfiles (and .atom/) to ~/
|
|
# It also symlinks ~/bin for easy updating
|
|
|
|
# This is safe to run multiple times and will prompt you about anything unclear
|
|
|
|
|
|
#
|
|
# Utils
|
|
#
|
|
|
|
answer_is_yes() {
|
|
[[ "$REPLY" =~ ^[Yy]$ ]] \
|
|
&& return 0 \
|
|
|| return 1
|
|
}
|
|
|
|
ask() {
|
|
print_question "$1"
|
|
read
|
|
}
|
|
|
|
ask_for_confirmation() {
|
|
print_question "$1 (y/n) "
|
|
read -n 1
|
|
printf "\n"
|
|
}
|
|
|
|
ask_for_sudo() {
|
|
|
|
# Ask for the administrator password upfront
|
|
sudo -v
|
|
|
|
# Update existing `sudo` time stamp until this script has finished
|
|
# https://gist.github.com/cowboy/3118588
|
|
while true; do
|
|
sudo -n true
|
|
sleep 60
|
|
kill -0 "$$" || exit
|
|
done &> /dev/null &
|
|
|
|
}
|
|
|
|
cmd_exists() {
|
|
[ -x "$(command -v "$1")" ] \
|
|
&& printf 0 \
|
|
|| printf 1
|
|
}
|
|
|
|
execute() {
|
|
$1 &> /dev/null
|
|
print_result $? "${2:-$1}"
|
|
}
|
|
|
|
get_answer() {
|
|
printf "$REPLY"
|
|
}
|
|
|
|
get_os() {
|
|
|
|
declare -r OS_NAME="$(uname -s)"
|
|
local os=""
|
|
|
|
if [ "$OS_NAME" == "Darwin" ]; then
|
|
os="osx"
|
|
elif [ "$OS_NAME" == "Linux" ] && [ -e "/etc/lsb-release" ]; then
|
|
os="ubuntu"
|
|
fi
|
|
|
|
printf "%s" "$os"
|
|
|
|
}
|
|
|
|
is_git_repository() {
|
|
[ "$(git rev-parse &>/dev/null; printf $?)" -eq 0 ] \
|
|
&& return 0 \
|
|
|| return 1
|
|
}
|
|
|
|
mkd() {
|
|
if [ -n "$1" ]; then
|
|
if [ -e "$1" ]; then
|
|
if [ ! -d "$1" ]; then
|
|
print_error "$1 - a file with the same name already exists!"
|
|
else
|
|
print_success "$1"
|
|
fi
|
|
else
|
|
execute "mkdir -p $1" "$1"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
print_error() {
|
|
# Print output in red
|
|
printf "\e[0;31m [✖] $1 $2\e[0m\n"
|
|
}
|
|
|
|
print_info() {
|
|
# Print output in purple
|
|
printf "\n\e[0;35m $1\e[0m\n\n"
|
|
}
|
|
|
|
print_question() {
|
|
# Print output in yellow
|
|
printf "\e[0;33m [?] $1\e[0m"
|
|
}
|
|
|
|
print_result() {
|
|
[ $1 -eq 0 ] \
|
|
&& print_success "$2" \
|
|
|| print_error "$2"
|
|
|
|
[ "$3" == "true" ] && [ $1 -ne 0 ] \
|
|
&& exit
|
|
}
|
|
|
|
print_success() {
|
|
# Print output in green
|
|
printf "\e[0;32m [✔] $1\e[0m\n"
|
|
}
|
|
|
|
|
|
dir=~/dotfiles # dotfiles directory
|
|
dir_backup=~/dotfiles_old # old dotfiles backup directory
|
|
|
|
# Get current dir (so run this script from anywhere)
|
|
|
|
export DOTFILES_DIR
|
|
DOTFILES_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
# Create dotfiles_old in homedir
|
|
echo -n "Creating $dir_backup for backup of any existing dotfiles in ~..."
|
|
mkdir -p $dir_backup
|
|
echo "done"
|
|
|
|
# Change to the dotfiles directory
|
|
echo -n "Changing to the $dir directory..."
|
|
cd $dir
|
|
echo "done"
|
|
|
|
#
|
|
# Actual symlink stuff
|
|
#
|
|
|
|
|
|
# Atom editor settings
|
|
echo -n "Copying Atom settings.."
|
|
mv -f ~/.atom ~/dotfiles_old/
|
|
ln -s $HOME/dotfiles/atom ~/.atom
|
|
echo "done"
|
|
|
|
|
|
declare -a FILES_TO_SYMLINK=(
|
|
|
|
'shell/shell_aliases'
|
|
'shell/shell_exports'
|
|
'shell/shell_functions'
|
|
'shell/bash_profile'
|
|
'shell/bash_prompt'
|
|
'shell/bashrc'
|
|
'shell/zshrc'
|
|
'shell/ackrc'
|
|
'shell/curlrc'
|
|
'shell/gemrc'
|
|
'shell/inputrc'
|
|
'shell/screenrc'
|
|
|
|
'git/gitattributes'
|
|
'git/gitconfig'
|
|
'git/gitignore'
|
|
|
|
)
|
|
|
|
# FILES_TO_SYMLINK="$FILES_TO_SYMLINK .vim bin" # add in vim and the binaries
|
|
|
|
# Move any existing dotfiles in homedir to dotfiles_old directory, then create symlinks from the homedir to any files in the ~/dotfiles directory specified in $files
|
|
|
|
for i in ${FILES_TO_SYMLINK[@]}; do
|
|
echo "Moving any existing dotfiles from ~ to $dir_backup"
|
|
mv ~/.${i##*/} ~/dotfiles_old/
|
|
done
|
|
|
|
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
main() {
|
|
|
|
local i=''
|
|
local sourceFile=''
|
|
local targetFile=''
|
|
|
|
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
for i in ${FILES_TO_SYMLINK[@]}; do
|
|
|
|
sourceFile="$(pwd)/$i"
|
|
targetFile="$HOME/.$(printf "%s" "$i" | sed "s/.*\/\(.*\)/\1/g")"
|
|
|
|
if [ ! -e "$targetFile" ]; then
|
|
execute "ln -fs $sourceFile $targetFile" "$targetFile → $sourceFile"
|
|
elif [ "$(readlink "$targetFile")" == "$sourceFile" ]; then
|
|
print_success "$targetFile → $sourceFile"
|
|
else
|
|
ask_for_confirmation "'$targetFile' already exists, do you want to overwrite it?"
|
|
if answer_is_yes; then
|
|
rm -rf "$targetFile"
|
|
execute "ln -fs $sourceFile $targetFile" "$targetFile → $sourceFile"
|
|
else
|
|
print_error "$targetFile → $sourceFile"
|
|
fi
|
|
fi
|
|
|
|
done
|
|
|
|
# Copy batcharge
|
|
ln -fs $HOME/dotfiles/bin $HOME
|
|
chmod +rwx $HOME/bin/batcharge.py
|
|
|
|
# Symlink online-check.sh
|
|
ln -fs $HOME/dotfiles/lib/online-check.sh $HOME/online-check.sh
|
|
|
|
# Write out current crontab
|
|
crontab -l > mycron
|
|
# Echo new cron into cron file
|
|
echo "* * * * * ~/online-check.sh" >> mycron
|
|
# Install new cron file
|
|
crontab mycron
|
|
rm mycron
|
|
|
|
}
|
|
|
|
install_zsh () {
|
|
# Test to see if zshell is installed. If it is:
|
|
if [ -f /bin/zsh -o -f /usr/bin/zsh ]; then
|
|
# Install Oh My Zsh if it isn't already present
|
|
if [[ ! -d $dir/oh-my-zsh/ ]]; then
|
|
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
|
|
fi
|
|
# Set the default shell to zsh if it isn't currently set to zsh
|
|
if [[ ! $(echo $SHELL) == $(which zsh) ]]; then
|
|
chsh -s $(which zsh)
|
|
fi
|
|
else
|
|
# If zsh isn't installed, get the platform of the current machine
|
|
platform=$(uname);
|
|
# If the platform is Linux, try an apt-get to install zsh and then recurse
|
|
if [[ $platform == 'Linux' ]]; then
|
|
if [[ -f /etc/redhat-release ]]; then
|
|
sudo yum install zsh
|
|
install_zsh
|
|
fi
|
|
if [[ -f /etc/debian_version ]]; then
|
|
sudo apt-get install zsh
|
|
install_zsh
|
|
fi
|
|
# If the platform is OS X, tell the user to install zsh :)
|
|
elif [[ $platform == 'Darwin' ]]; then
|
|
echo "We'll install zsh, then re-run this script!"
|
|
brew install zsh
|
|
exit
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Package managers & packages
|
|
|
|
# . "$DOTFILES_DIR/install/brew.sh"
|
|
# . "$DOTFILES_DIR/install/npm.sh"
|
|
|
|
# if [ "$(uname)" == "Darwin" ]; then
|
|
# . "$DOTFILES_DIR/install/brew-cask.sh"
|
|
# fi
|
|
|
|
main
|
|
# install_zsh
|
|
|
|
###############################################################################
|
|
# Atom #
|
|
###############################################################################
|
|
|
|
# Copy over Atom configs
|
|
#cp -r atom/packages.list $HOME/.atom
|
|
|
|
# Install community packages
|
|
#apm list --installed --bare - get a list of installed packages
|
|
#apm install --packages-file $HOME/.atom/packages.list
|
|
|
|
###############################################################################
|
|
# Zsh #
|
|
###############################################################################
|
|
|
|
# Install Zsh settings
|
|
ln -s ~/dotfiles/zsh/themes/nick.zsh-theme $HOME/.oh-my-zsh/themes
|
|
|
|
|
|
###############################################################################
|
|
# Terminal & iTerm 2 #
|
|
###############################################################################
|
|
|
|
# Only use UTF-8 in Terminal.app
|
|
defaults write com.apple.terminal StringEncodings -array 4
|
|
|
|
# Install the Solarized Dark theme for iTerm
|
|
open "${HOME}/dotfiles/iterm/themes/Solarized Dark.itermcolors"
|
|
|
|
# Don’t display the annoying prompt when quitting iTerm
|
|
defaults write com.googlecode.iterm2 PromptOnQuit -bool false
|
|
|
|
# Reload zsh settings
|
|
source ~/.zshrc
|
|
|