# Install zsh-async if it's not present if [[ ! -a ~/.zsh-async ]]; then git clone -b 'v1.5.2' git@github.com:mafredri/zsh-async ~/.zsh-async fi source ~/.zsh-async/async.zsh # Initialize zsh-async async_init # Start a worker that will report job completion async_start_worker vagrant_prompt_worker -n # Wrap vagrant status in a function, so we can pass in the working directory vagrant_status() { VAGRANT_CWD=$1 vagrant status } # Define a function to process the result of the job completed_callback() { local output=$@ if [[ $output =~ 'running' ]]; then H_PROMPT_VAGRANT_UP='vagrant up' else H_PROMPT_VAGRANT_UP='' fi async_job vagrant_prompt_worker vagrant_status $(pwd) } # Register our callback function to run when the job completes async_register_callback vagrant_prompt_worker completed_callback # Start the job async_job vagrant_prompt_worker vagrant_status $(pwd) # add our variable to our prompt. TMOUT=1 TRAPALRM() { zle reset-prompt } username="%n" path_string="%3c" precmd() { date_string=$(date +'%Y-%m-%d %H:%M:%S') } PROMPT='${date_string} ${username} ${path_string} $H_PROMPT_VAGRANT_UP ยป '