#!/usr/bin/env bash if [[ $(uname) == 'Darwin' ]]; then if ! command -v brew &>/dev/null then # We need to update bash, so we'll start with setting up homebrew. ./osx/pre_install exit fi fi source "script_helpers/printing.sh" source "script_helpers/core.sh" source "script_helpers/platform.sh" source "script_helpers/file_ops.sh" dotfiles_dir=$PWD os_is_windows is_windows os_is_macos is_macos os_is_linux is_linux # Check for admin permissions when running on Windows. if [[ $is_windows -eq 1 ]]; then # `openfiles` is a command present on all supported Windows versions, # requires admin privileges, and has no side effects. openfiles &>/dev/null admin_error=$? if [[ ! $admin_error -eq 0 ]]; then fatal "You need to run this in an admin shell!" fi fi set -e #################################################################################################### # Helpers #################################################################################################### use_shell() { shell=$1 if hash chsh >/dev/null 2>&1; then printf "\n${BLUE}Changing the default shell to $shell${NORMAL}\n" chsh -s $(which $shell) else error "\nUnable to change the shell because this system does not have chsh.\n" fi } setup_zsh() { printf "${MAGENTA}==> ${NORMAL}Setting up zsh...\n" if [[ $is_linux -eq 1 ]]; then sudo apt install zsh fi make_link .dotfiles/zsh/core .zsh FILES=() FILES+=('zshrc') FILES+=('zlogin') for file in "${FILES[@]}" do make_link .dotfiles/zsh/$file .$file done } setup_bash() { printf "${MAGENTA}==> ${NORMAL}Setting up bash...\n" FILES=() FILES+=('bashrc') FILES+=('bash_profile') FILES+=('inputrc') for file in "${FILES[@]}" do make_link .dotfiles/bash/$file .$file done } #################################################################################################### # Setup #################################################################################################### pushd "$HOME" &>/dev/null make_link $dotfiles_dir .dotfiles 1 # expand source path in case we're reinstalling and the cwd is a symlink. if [[ $is_windows -eq 1 ]]; then do_vim_copy=1 if [[ -d "$PWD/.vim" ]]; then printf "\n${BOLD}Vim folder already found at destination. Overwrite? [1,0]\n> ${NORMAL}" read -e copy_vim if [[ $copy_vim != "0" && $copy_vim != "1" ]]; then fatal "Invalid value '$copy_vim'" elif [[ $copy_vim == "0" ]]; then do_vim_copy=0 printf "\n" fi fi if [[ $do_vim_copy -eq 1 ]]; then printf "${MAGENTA}==> ${NORMAL}Copying ${YELLOW}.dotfiles/vim${NORMAL} to ${YELLOW}$PWD/.vim${NORMAL}\n" cp -r .dotfiles/vim .vim fi else make_link .dotfiles/vim .vim fi FILES=() FILES+=('env.loader') FILES+=('aliases') FILES+=('gitconfig') FILES+=('vimrc') FILES+=('curlrc') for file in "${FILES[@]}" do make_link .dotfiles/$file .$file done set +e git_comp_filename=".git-completion.bash" printf "${MAGENTA}==> ${NORMAL}Downloading Git completion list to ${YELLOW}$PWD/$git_comp_filename${NORMAL}\n" curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o $git_comp_filename set -e ######################### # Setup platform files ######################### if [[ $is_windows -eq 1 ]]; then printf "\n${BOLD}Setting up Windows${NORMAL}\n\n" os_name="windows" # Already using bash if running msys2. setup_bash elif [[ $is_macos -eq 1 ]]; then printf "\n${BOLD}Setting up MacOS${NORMAL}\n\n" os_name="osx" setup_zsh setup_bash use_shell zsh elif [[ $is_linux -eq 1 ]]; then printf "\n${BOLD}Setting up Linux${NORMAL}\n\n" os_name="linux" setup_zsh setup_bash use_shell bash fi if [[ $os_name != "" ]]; then if [ -f .dotfiles/$os_name/env.platform ]; then make_link .dotfiles/$os_name/env.platform .env.platform fi if [ -f .dotfiles/$os_name/gitconfig.platform ]; then make_link .dotfiles/$os_name/gitconfig.platform .gitconfig.platform fi $dotfiles_dir/$os_name/install fi popd "$HOME" &>/dev/null printf "${BOLD}${GREEN}Done!${NORMAL}\n"