Closed AlanGreene closed 4 years ago
Symlink dotfiles, prompt to overwrite:
#!/bin/bash
cd "$(dirname "${BASH_SOURCE[0]}")" \
&& . "utils.sh"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
create_symlinks() {
declare -a FILES_TO_SYMLINK=(
"shell/aliases/bash_aliases"
"shell/autocomplete/$(get_os)/bash_autocomplete"
"shell/bash_exports"
"shell/bash_functions"
"shell/bash_logout"
"shell/bash_options"
"shell/bash_profile"
"shell/bash_prompt"
"shell/bashrc"
"shell/curlrc"
"shell/inputrc"
"git/gitattributes"
"git/gitconfig"
"git/gitignore"
"tmux/tmux.conf"
"vim/vim"
"vim/vimrc"
)
local i=""
local sourceFile=""
local targetFile=""
local skipQuestions=false
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
skip_questions "$@" \
&& skipQuestions=true
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
for i in "${FILES_TO_SYMLINK[@]}"; do
sourceFile="$(cd .. && pwd)/$i"
targetFile="$HOME/.$(printf "%s" "$i" | sed "s/.*\/\(.*\)/\1/g")"
if [ ! -e "$targetFile" ] || $skipQuestions; then
execute \
"ln -fs $sourceFile $targetFile" \
"$targetFile → $sourceFile"
elif [ "$(readlink "$targetFile")" == "$sourceFile" ]; then
print_success "$targetFile → $sourceFile"
else
if ! $skipQuestions; then
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
fi
done
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
main() {
print_in_purple "\n • Create symbolic links\n\n"
create_symlinks "$@"
}
main "$@"
GitHub SSH keys
#!/bin/bash
cd "$(dirname "${BASH_SOURCE[0]}")" \
&& . "utils.sh"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
add_ssh_configs() {
printf "%s\n" \
"Host github.com" \
" IdentityFile $1" \
" LogLevel ERROR" >> ~/.ssh/config
print_result $? "Add SSH configs"
}
copy_public_ssh_key_to_clipboard () {
if cmd_exists "pbcopy"; then
pbcopy < "$1"
print_result $? "Copy public SSH key to clipboard"
elif cmd_exists "xclip"; then
xclip -selection clip < "$1"
print_result $? "Copy public SSH key to clipboard"
else
print_warning "Please copy the public SSH key ($1) to clipboard"
fi
}
generate_ssh_keys() {
ask "Please provide an email address: " && printf "\n"
ssh-keygen -t rsa -b 4096 -C "$(get_answer)" -f "$1"
print_result $? "Generate SSH keys"
}
open_github_ssh_page() {
declare -r GITHUB_SSH_URL="https://github.com/settings/ssh"
# The order of the following checks matters
# as on Ubuntu there is also a utility called `open`.
if cmd_exists "xdg-open"; then
xdg-open "$GITHUB_SSH_URL"
elif cmd_exists "open"; then
open "$GITHUB_SSH_URL"
else
print_warning "Please add the public SSH key to GitHub ($GITHUB_SSH_URL)"
fi
}
set_github_ssh_key() {
local sshKeyFileName="$HOME/.ssh/github"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# If there is already a file with that
# name, generate another, unique, file name.
if [ -f "$sshKeyFileName" ]; then
sshKeyFileName="$(mktemp -u "$HOME/.ssh/github_XXXXX")"
fi
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
generate_ssh_keys "$sshKeyFileName"
add_ssh_configs "$sshKeyFileName"
copy_public_ssh_key_to_clipboard "${sshKeyFileName}.pub"
open_github_ssh_page
test_ssh_connection \
&& rm "${sshKeyFileName}.pub"
}
test_ssh_connection() {
while true; do
ssh -T git@github.com &> /dev/null
[ $? -eq 1 ] && break
sleep 5
done
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
main() {
print_in_purple "\n • Set up GitHub SSH keys\n\n"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if ! is_git_repository; then
print_error "Not a Git repository"
exit 1
fi
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ssh -T git@github.com &> /dev/null
if [ $? -ne 1 ]; then
set_github_ssh_key
fi
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
print_result $? "Set up GitHub SSH keys"
}
main
.gitconfig
https://git-scm.com/docs/git-config#_conditional_includes
[includeIf "gitdir:~/personal/"]
path = ~/personal/.gitconfig
# function checks if the application is installed
function __add_command_replace_alias() {
if [ -x "`which $2 2>&1`" ]; then
alias $1=$2
fi
}
if [ -x "`which most 2>&1`" ]; then
alias less=most
export PAGER=most
fi
__add_command_replace_alias tail 'multitail'
__add_command_replace_alias df 'pydf'
__add_command_replace_alias traceroute 'mtr'
__add_command_replace_alias tracepath 'mtr'
__add_command_replace_alias top 'htop'
docker-compose (still needed?)gradleyarn[ -n "$PS1" ] && source ~/.bash_profile
+ .netrc (same deal...).tmux/https://github.com/AlanGreene/starter/issues/19Possibly others, needs further review
See https://github.com/AlanGreene/dotfiles-12 for ideas on organisation and install.
- [ ] .zshrc - [ ] (check out ohmyzsh) - [ ] https://github.com/bnb/dotfiles/blob/master/.zshrczsh