# If not running interactively, don't do anything [[ $- != *i* ]] && return # Ansible defaults export ANSIBLE_BECOME_ASK_PASS=yes # Add ~/bin and ~/bin/scripts to my path export PATH=$PATH:$HOME/bin/:$HOME/bin/scripts/:$HOME/.cargo/bin # Set editor to neovim. alias edit=nvim export EDITOR="nvim" # Prompt stuff # # LINEAGE: # # Based on work by woods and sundeepgupta # # https://gist.github.com/31967 # https://gist.github.com/sundeepgupta/b099c31ee2cc1eb31b6d # The various escape codes that we can use to color our prompt. RED="\[\033[0;31m\]" YELLOW="\[\033[0;33m\]" GREEN="\[\033[0;32m\]" BLUE="\[\033[1;34m\]" LIGHT_RED="\[\033[1;31m\]" LIGHT_GREEN="\[\033[1;32m\]" WHITE="\[\033[1;37m\]" LIGHT_GRAY="\[\033[0;37m\]" CYAN="\[\033[0;36m\]" PURPLE="\[\033[0;35m\]" COLOR_NONE="\[\e[0m\]" # Detect whether the current directory is a git repository. function is_git_repository { git branch > /dev/null 2>&1 } # Determine the branch/state information for this git repository. function set_git_branch { # Capture the output of the "git status" command. git_status="$(git status 2> /dev/null)" # Set color based on clean/staged/dirty. if [[ ${git_status} =~ "working tree clean" ]]; then state="${GREEN}" elif [[ ${git_status} =~ "Changes to be committed" ]]; then state="${YELLOW}" else state="${RED}" fi # Set arrow icon based on status against remote. remote_pattern="Your branch is (.*) of" if [[ ${git_status} =~ ${remote_pattern} ]]; then if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then remote="↑" else remote="↓" fi else remote="" fi diverge_pattern="Your branch and (.*) have diverged" if [[ ${git_status} =~ ${diverge_pattern} ]]; then remote="↕" fi # Get the name of the branch. branch_pattern="^(# )?On branch ([^${IFS}]*)" if [[ ${git_status} =~ ${branch_pattern} ]]; then branch=${BASH_REMATCH[2]} fi # Set the final branch string. BRANCH="${state}(${branch})${remote}${COLOR_NONE} " } # Return the prompt symbol to use, colorized based on the return value of the # previous command. function set_prompt_symbol () { if test $1 -eq 0 ; then PROMPT_SYMBOL="\$" else PROMPT_SYMBOL="${LIGHT_RED}\$${COLOR_NONE}" fi } # Set the full bash prompt. function set_bash_prompt () { # Set the PROMPT_SYMBOL variable. We do this first so we don't lose the # return value of the last command. set_prompt_symbol $? # Set the BRANCH variable. if is_git_repository ; then set_git_branch else BRANCH='' fi # Set the bash prompt variable. PS1=" ${BLUE}[\t] ${CYAN}\w ${COLOR_NONE}${BRANCH} ${PROMPT_SYMBOL} " } # Tell bash to execute this function just before displaying its prompt. PROMPT_COMMAND=set_bash_prompt # fzf is love, fzf is life. source /usr/share/fzf/key-bindings.bash function cdl() { cd $@ ls } # Functions function cd-projects { project_name=`project list | fzf --preview="proj_preview {}"` cd "`project path "$project_name"`" } # Aliases alias gg="git log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an (%ae)%C(reset)' --all" alias gca="git add -A; git commit -a --amend --no-edit" alias gs="git status" alias proj="cd-projects" # Use the kitty kitten for ssh so sessions can be cached and remote editing/session cloning is possible. alias ssh="kitty +kitten ssh" alias paru="paru --bottomup" #THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!! export SDKMAN_DIR="$HOME/.sdkman" [[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"