Created
December 27, 2018 23:28
-
-
Save runofthemill/bdf0d9d1efd3d8c22c2fad9387149b47 to your computer and use it in GitHub Desktop.
Vagrant plugin for spaceship-prompt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# Vagrant | |
# | |
# Vagrant is a tool for building and managing virtual machine environments in a single workflow. | |
# Link: https://www.vagrantup.com | |
# ------------------------------------------------------------------------------ | |
# Configuration | |
# ------------------------------------------------------------------------------ | |
SPACESHIP_VAGRANT_SHOW="${SPACESHIP_VAGRANT_SHOW=true}" | |
SPACESHIP_VAGRANT_PREFIX="${SPACESHIP_VAGRANT_PREFIX="$SPACESHIP_PROMPT_DEFAULT_PREFIX"}" | |
SPACESHIP_VAGRANT_SUFFIX="${SPACESHIP_VAGRANT_SUFFIX="$SPACESHIP_PROMPT_DEFAULT_SUFFIX"}" | |
SPACESHIP_VAGRANT_SYMBOL="${SPACESHIP_VAGRANT_SYMBOL="đŚ "}" | |
SPACESHIP_VAGRANT_COLOR="${SPACESHIP_VAGRANT_COLOR="39"}" | |
SPACESHIP_VAGRANT_DISPLAY_SHORT="${SPACESHIP_VAGRANT_DISPLAY_SHORT=false}" | |
SPACESHIP_VAGRANT_RUNNING="${SPACESHIP_VAGRANT_RUNNING="%{$fg_no_bold[green]%}â"}" | |
SPACESHIP_VAGRANT_POWEROFF="${SPACESHIP_VAGRANT_POWEROFF="%{$fg_no_bold[red]%}â"}" | |
SPACESHIP_VAGRANT_SUSPENDED="${SPACESHIP_VAGRANT_SUSPENDED="%{$fg_no_bold[yellow]%}â"}" | |
SPACESHIP_VAGRANT_NOT_CREATED="${SPACESHIP_VAGRANT_NOT_CREATED="%{$fg_no_bold[white]%}â"}" | |
SPACESHIP_VAGRANT_ABORTED="${SPACESHIP_VAGRANT_ABORTED="%{$fg_no_bold[red]%}â"}" | |
# ------------------------------------------------------------------------------ | |
# Section | |
# ------------------------------------------------------------------------------ | |
# Show vagrant status | |
# spaceship_ prefix before section's name is required! | |
# Otherwise this section won't be loaded. | |
spaceship_vagrant() { | |
# If SPACESHIP_VAGRANT_SHOW is false, don't show vagrant section | |
[[ $SPACESHIP_VAGRANT_SHOW == false ]] && return | |
# Check if vagrant command is available for execution | |
spaceship::exists vagrant || return | |
# Show vagrant section only when there are vagrant-specific files in current | |
# working direcotory. | |
# Here glob qualifiers are used to check if files with specific extention are | |
# present in directory. Read more about them here: | |
# http://zsh.sourceforge.net/Doc/Release/Expansion.html | |
[[ -f Vagrantfile || -n *.vagrant ]] || return | |
# Use quotes around unassigned local variables to prevent | |
# getting replaced by global aliases | |
# http://zsh.sourc3eforge.net/Doc/Release/Shell-Grammar.html#Aliasing | |
local 'vagrant_status' | |
# vagrant_prompt_info() { | |
# test -d .vagrant && test -f Vagrantfile | |
# if [[ "$?" == "0" ]]; then | |
# local 'statuses' | |
# statuses=$(vagrant status 2> /dev/null | grep -P "\w+\s+[\w\s]+\s\(\w+\)") | |
# statuses=("${(f)statuses}") | |
# for vm_details in $statuses; do | |
# vm_state=$(echo $vm_details | grep -o -E "saved|poweroff|not created|running|aborted") | |
# if [[ "$vm_state" == "running" ]]; then | |
# printf '%s' $SPACESHIP_VAGRANT_RUNNING | |
# elif [[ "$vm_state" == "saved" ]]; then | |
# printf '%s' $SPACESHIP_VAGRANT_SUSPENDED | |
# elif [[ "$vm_state" == "not created" ]]; then | |
# printf '%s' $SPACESHIP_VAGRANT_NOT_CREATED | |
# elif [[ "$vm_state" == "poweroff" ]]; then | |
# printf '%s' $SPACESHIP_VAGRANT_POWEROFF | |
# elif [[ "$vm_state" == "aborted" ]]; then | |
# printf '%s' $SPACESHIP_VAGRANT_ABORTED | |
# fi | |
# done | |
# fi | |
# } | |
vagrant_prompt_info() { | |
test -d .vagrant && test -f Vagrantfile | |
if [[ "$?" == "0" ]]; then | |
if spaceship::exists jq; then | |
vagrant_state=$(cat "$HOME/.vagrant.d/data/machine-index/index" | | |
jq -r --arg dir "$PWD" '.machines[] | select(.vagrantfile_path == $dir).state') | |
else | |
vagrant_state=$(cat ${HOME}/.vagrant.d/data/machine-index/index | python -c 'import sys, os, json; | |
json_file = json.load(sys.stdin)["machines"] | |
for box in json_file: | |
if (json_file[box]["vagrantfile_path"] == os.getcwd()): | |
print (json_file[box]["state"]) | |
break; | |
') | |
fi | |
if ! $SPACESHIP_VAGRANT_DISPLAY_SHORT; then | |
printf $vagrant_state | |
else | |
if [[ "$vagrant_state" == "running" ]]; then | |
printf '%s' $SPACESHIP_VAGRANT_RUNNING | |
elif [[ "$vagrant_state" == "saved" ]]; then | |
printf '%s' $SPACESHIP_VAGRANT_SUSPENDED | |
elif [[ "$vagrant_state" == "not created" ]]; then | |
printf '%s' $SPACESHIP_VAGRANT_NOT_CREATED | |
elif [[ "$vagrant_state" == "poweroff" ]]; then | |
printf '%s' $SPACESHIP_VAGRANT_POWEROFF | |
elif [[ "$vagrant_state" == "aborted" ]]; then | |
printf '%s' $SPACESHIP_VAGRANT_ABORTED | |
fi | |
fi | |
fi | |
} | |
vagrant_status=$(vagrant_prompt_info) | |
[[ -n ${vagrant_status} ]] || return | |
# Display vagrant section | |
spaceship::section \ | |
"$SPACESHIP_VAGRANT_COLOR" \ | |
"$SPACESHIP_VAGRANT_PREFIX" \ | |
"$SPACESHIP_VAGRANT_SYMBOL$vagrant_status" \ | |
"$SPACESHIP_VAGRANT_SUFFIX" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment