#! /usr/bin/env bash # Use the iterm2 material theme in the root directory of the essentials repository. For linux, # you will need to source a material theme color scheme for your terminal (for XFCE use nord in the xfce # themes folder). # This monstrosity returns the directory of the .bashrc from it's symlinked source so we can # call script files correctly. if [[ "$OSTYPE" == "linux-gnu" ]]; then symlink_dir=$(cd "$( dirname "`readlink -f ${BASH_SOURCE[0]}`" )" && pwd) else # OS X is not a fan of `readlink -f` symlink_dir=$(cd "$( dirname "`readlink ${BASH_SOURCE[0]}`" )" && pwd) fi # -------------------------------- SETUP -------------------------------- # # Store private information (exports, keys, etc) in .bash_private. if [[ -f $HOME/.bash_private ]]; then source $HOME/.bash_private echo ".bash_private loaded" fi if [ -f $HOME/.inputrc ]; then bind -f $HOME/.inputrc else echo "No .inputrc detected" fi if [[ "$OSTYPE" == "darwin"* ]]; then if [ -f $HOME/.macrc ]; then source $HOME/.macrc fi fi # Set up projects and gopath folder properly for the export in the export section. if [[ ! -d $HOME/projects ]]; then echo "Making $HOME/projects" mkdir -p $HOME/projects fi if [[ -x go ]]; then echo "Making $HOME/projects/go" mkdir -p $HOME/projects/go fi # ------------------------------ END SETUP ------------------------------ # # -------------------- FUNCTIONS -------------------- # parse_git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1) /' } # If you ever needed weather... weather() { curl wttr.in } # ------------------ END FUNCTIONS ------------------ # # ---------------- ALIASES ----------------# # Useful global functions alias cgen=$symlink_dir/scripts/cgen.sh if [[ "$OS_TYPE" != "gnu-linux" ]]; then alias python='python3' fi alias vim='nvim' # -------------- END ALIASES --------------# # -------------- EXPORTS --------------# export EDITOR=nvim export CC=$(which clang) export CXX=$(which clang++) export OPENSSL_ROOT_DIR=$(which openssl) export PATH="/usr/local/opt/openjdk/bin:$PATH" # Ignore duplicates in history to make history less of a hassle to use. export HISTCONTROL=ignoredups # If go is installed, set the $GOPATH to the projects directory created above. if [[ -x go ]]; then export GOPATH=$HOME/projects/go # Add Go executables to the system path export PATH=$PATH:$(go env GOPATH)/bin fi # ------------ END EXPORTS ------------# # ----------------------------------------- INITIALIZATIONS -------------------------------------- # if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi eval "$(pyenv virtualenv-init -)" # Test for the `bash-completion` package. Installing this adds better tab completion to bash. [[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh" # --------------------------------------- END INITIALIZATIONS ------------------------------------ # # ------------------------------------------ FORMATTING ------------------------------------------ # # Better color handling so scrolling doesn't get broken. # Note for Cygwin you need ncurses for this to work. reset=$(tput sgr0) green=$(tput setaf 2) blue=$(tput setaf 4) white=$(tput setaf 7) bold=$(tput bold || tput md) export PROMPT_DIRTRIM=2 # Important note for PS1 modification - everything non-printable must be escaped with `\[` and `\]`. Otherwise readline # fails to track the prompt right and things get messed up when you input long strings. if [[ "$OSTYPE" == "linux-gnu" ]]; then # I had some rendering issues running in XFCE unless I added an extra space at the end. export PS1='\[$bold\]\[$white\]\u@\h\[$reset\]: \[$bold\]\[$blue\]\w\[$reset\] \[$green\]$(parse_git_branch)\[$reset\]\[$bold\]\[$white\]⇨\[$reset\] ' else export PS1='\[$bold\]\[$white\]\u@\h\[$reset\]: \[$bold\]\[$blue\]\w\[$reset\] \[$green\]$(parse_git_branch)\[$reset\]\[$bold\]\[$white\]⇨\[$reset\] ' fi