commit bc7082c817fdcaf5698d91fce4e72bc00fa08e03
Author: Mustafa Rasheed <72335959+MRZ07@users.noreply.github.com>
Date: Sun Mar 27 23:21:56 2022 +0200
Init
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2752eb9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+node_modules/
+.DS_Store
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..45569e1
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 Caio Gondim
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..42c44ee
--- /dev/null
+++ b/README.md
@@ -0,0 +1,366 @@
+
+
+# Bullet Train for oh-my-zsh
+
+Bullet Train is a [oh-my-zsh shell](https://github.com/robbyrussell/oh-my-zsh)
+theme based on the
+[Powerline Vim plugin](https://github.com/Lokaltog/vim-powerline). It aims for
+simplicity, showing information only when it's relevant.
+
+It currently shows:
+- Current Python virtualenv; when using Pyenv and no active virtualenv shows the current Python version the shell uses
+- Current Ruby version using chruby; version and gemset when on RVM or Rbenv
+- Current Node.js version, through NVM (if present) or Node.js
+- Current Perl version using plenv
+- Current Elixir version
+- Git status
+- Timestamp
+- Current directory
+- Background jobs
+- Exit code of last command
+
+If you want add some new feature, of fix some bug, open an issue and lets hack
+together.
+
+For a tmux theme to work with it, I suggest [Maglev](https://github.com/caiogondim/maglev).
+
+## Preview
+
+
+
+
+## Requirements
+
+In order to use the theme, you will first need:
+
+* Powerline compatible fonts like [Vim Powerline patched fonts](https://github.com/Lokaltog/powerline-fonts), [Input Mono](http://input.fontbureau.com/) or [Monoid](http://larsenwork.com/monoid/).
+* On Ubuntu like systems you'll need the `ttf-ancient-fonts` package to correctly display some unicode symbols that are not covered by the Powerline fonts above.
+* A ZSH framework like [antigen](https://github.com/zsh-users/antigen), [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh) or [zgen](https://github.com/tarjoilija/zgen)
+* Make sure terminal is using 256-colors mode with `export TERM="xterm-256color"`
+* For [iTerm 2](http://iterm2.com/) users, make sure you go into your settings and set both the regular font and the non-ascii font to powerline compatible [fonts](https://github.com/powerline/fonts) or the prompt separators and special characters will not display correctly.
+
+
+## Installing
+
+### For oh-my-zsh users
+
+1. Download the theme [here](http://raw.github.com/caiogondim/bullet-train-oh-my-zsh-theme/master/bullet-train.zsh-theme)
+
+2. Put the file **bullet-train.zsh-theme** in **$ZSH_CUSTOM/themes/**
+
+3. Configure the theme in your **~/.zshrc** file:
+
+```bash
+ZSH_THEME="bullet-train"
+```
+
+### For antigen users
+
+Add the following snippet to your **.zshrc** somewhere after the line
+`antigen use oh-my-zsh`.
+
+```bash
+antigen theme https://github.com/caiogondim/bullet-train-oh-my-zsh-theme bullet-train
+```
+
+### For Zgen users
+
+If you're using [zgen](https://github.com/tarjoilija/zgen), add the following line to your **~/.zshrc** where you're adding your other zsh plugins **after** the line `zgen oh-my-zsh`.
+
+```bash
+zgen load caiogondim/bullet-train-oh-my-zsh-theme bullet-train
+```
+
+### For Zplug users
+
+If you're using [zplug](https://github.com/zplug/zplug), add the following line
+to your **~/.zshrc** where you're adding your other zsh plugins.
+
+```bash
+setopt prompt_subst # Make sure prompt is able to be generated properly.
+zplug "caiogondim/bullet-train.zsh", use:bullet-train.zsh-theme, defer:3 # defer until other plugins like oh-my-zsh is loaded
+```
+
+## Options
+
+Bullet Train is configurable. You can change colors and which segments you want
+or don't want to see. All options must be overridden in your **.zshrc** file.
+
+### Order
+`BULLETTRAIN_PROMPT_ORDER` defines order of prompt segments. Use zsh array
+syntax to specify your own order, e.g:
+
+```bash
+BULLETTRAIN_PROMPT_ORDER=(
+ git
+ context
+ dir
+ time
+)
+```
+
+NOTE: You do not need to specify *end* segment - it will be added automatically. With this you can also specify custom segments.
+
+### Prompt
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_PROMPT_CHAR`|`\$`|Character to be show before any command
+|`BULLETTRAIN_PROMPT_ROOT`|`true`|Highlight if running as root
+|`BULLETTRAIN_PROMPT_SEPARATE_LINE`|`true`|Make the prompt span across two lines
+|`BULLETTRAIN_PROMPT_ADD_NEWLINE`|`true`|Adds a newline character before each prompt line
+
+
+### Status
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_STATUS_EXIT_SHOW`|`false`|Show/hide exit code of last command
+|`BULLETTRAIN_STATUS_BG`|`green`|Background color
+|`BULLETTRAIN_STATUS_ERROR_BG`|`red`|Background color of segment when last command exited with an error
+|`BULLETTRAIN_STATUS_FG`|`black`|Foreground color
+
+### Time
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_TIME_12HR`|`false`|Format time using 12-hour clock (am/pm)
+|`BULLETTRAIN_TIME_BG`|`white`|Background color
+|`BULLETTRAIN_TIME_FG`|`black`|Foreground color
+
+### Custom
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_CUSTOM_MSG`|`false`|Free segment you can put a custom message which will be eval'ed for every prompt
+|`BULLETTRAIN_CUSTOM_BG`|`black`|Background color
+|`BULLETTRAIN_CUSTOM_FG`|`default`|Foreground color
+
+### Context
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_CONTEXT_BG`|`black`|Background color
+|`BULLETTRAIN_CONTEXT_FG`|`default`|Foreground color
+|`BULLETTRAIN_CONTEXT_DEFAULT_USER`|none|Default user. If you are running with other user other than default, the segment will be showed.
+|`BULLETTRAIN_CONTEXT_HOSTNAME`|`%m`|Hostname. Set %M to display the full qualified domain name.
+|`BULLETTRAIN_IS_SSH_CLIENT`|none|If `true`, the segment will be showed.
+
+### Python virtualenv (+Pyenv)
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_VIRTUALENV_BG`|`yellow`|Background color
+|`BULLETTRAIN_VIRTUALENV_FG`|`white`|Foreground color
+|`BULLETTRAIN_VIRTUALENV_PREFIX`|`🐍`|Prefix of the segment
+
+### node.js nvm
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_NVM_BG`|`green`|Background color
+|`BULLETTRAIN_NVM_FG`|`white`|Foreground color
+|`BULLETTRAIN_NVM_PREFIX`|`"⬡ "`|Prefix of the segment
+
+### Ruby RVM/Rbenv
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_RUBY_BG`|`magenta`|Background color
+|`BULLETTRAIN_RUBY_FG`|`white`|Foreground color
+|`BULLETTRAIN_RUBY_PREFIX`|`"♦"`|Prefix of the segment
+
+### Elixir
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_ELIXIR_BG`|`magenta`|Background color
+|`BULLETTRAIN_ELIXIR_FG`|`white`|Foreground color
+|`BULLETTRAIN_ELIXIR_PREFIX`|`"💧"`|Prefix of the segment
+
+### Go
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_GO_BG`|`green`|Background color
+|`BULLETTRAIN_GO_FG`|`white`|Foreground color
+|`BULLETTRAIN_GO_PREFIX`|`go`|Prefix of the segment
+
+### Kubernetes Context
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_KCTX_BG`|`yellow`|Background color
+|`BULLETTRAIN_KCTX_FG`|`white`|Foreground color
+|`BULLETTRAIN_KCTX_PREFIX`|`⎈`|[Kubernetes](https://unicode-table.com/de/2388/) prefix of the segment
+|`BULLETTRAIN_KCTX_KUBECTL`|`true`|If `false` disable `kubectl` usage
+|`BULLETTRAIN_KCTX_NAMESPACE`|`true`|If `false` will not show the default namespace. Namespace is only visible if `kubectl` is installed
+|`BULLETTRAIN_KCTX_KCONFIG`|`${HOME}/.kube/config`|Location of kube config file (e.g. /Users/Hugo/.kube/config)
+
+The prompt will first check if `BULLETTRAIN_KCTX_KUBECTL=true` and `kubectl` is installed than it will use `kubectl config view --minify` to determine the context and default namespace in use.
+If `BULLETTRAIN_KCTX_KUBECTL=false` or `kubectl` is not installed, `BULLETTRAIN_KCTX_KCONFIG` will be parsed to get the current context.
+
+The usage of `kubectl` allow the prompt to get the default namespace even if you are using multiple kube config files (e.g. KUBECONFIG=~/.kube/config:path-to-config1:path-to-config2)
+
+
+### AWS Profile
+
+Displays which AWS (Amazon Web Services) credentials profile is currently set.
+This environment var is used by aws-cli and other tools to use the right access keys and other parameters.
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_AWS_BG`|`yellow`|Background color
+|`BULLETTRAIN_AWS_FG`|`black`|Foreground color
+|`BULLETTRAIN_AWS_PREFIX`|`☁️`|Prefix of the segment
+
+### Perl
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_PERL_BG`|`yellow`|Background color
+|`BULLETTRAIN_PERL_FG`|`black`|Foreground color
+|`BULLETTRAIN_PERL_PREFIX`|`🐪`|Prefix of the segment
+
+### Dir
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_DIR_BG`|`blue`|Background color
+|`BULLETTRAIN_DIR_FG`|`white`|Foreground color
+|`BULLETTRAIN_DIR_CONTEXT_SHOW`|`false`|Show user and machine in an SCP formatted style
+|`BULLETTRAIN_DIR_EXTENDED`|`1`|Extended path (0=short path, 1=medium path, 2=complete path, everything else=medium path)
+
+### Git
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_GIT_COLORIZE_DIRTY`|`false`|Set `BULLETTRAIN_GIT_BG` to `BULLETTRAIN_GIT_COLORIZE_DIRTY_COLOR` in dirty state
+|`BULLETTRAIN_GIT_COLORIZE_DIRTY_BG_COLOR`|`yellow`|`BULLETTRAIN_GIT_BG` in dirty state
+|`BULLETTRAIN_GIT_COLORIZE_DIRTY_FG_COLOR`|`black`|`BULLETTRAIN_GIT_FG` in dirty state
+|`BULLETTRAIN_GIT_BG`|`white`|Background color
+|`BULLETTRAIN_GIT_FG`|`black`|Foreground color
+|`BULLETTRAIN_GIT_PROMPT_CMD`|`git_prompt_info`|Function to display details about your git segment.
+|`BULLETTRAIN_GIT_EXTENDED`|`true`|
+|`BULLETTRAIN_GIT_PREFIX`|`""`|Prefix
+|`BULLETTRAIN_GIT_SUFFIX`|`""`|Suffix
+|`BULLETTRAIN_GIT_DIRTY`|`"✘"`|Icon for dirty state
+|`BULLETTRAIN_GIT_CLEAN`|`"✔"`|Icon for clean state
+|`BULLETTRAIN_GIT_ADDED`|`"%F{green}✚%F{black}"`|Icon for added files on stage
+|`BULLETTRAIN_GIT_MODIFIED`|`"%F{blue}✹%F{black}"`|Icon for modified files
+|`BULLETTRAIN_GIT_DELETED`|`"%F{red}✖%F{black}"`|Icon for delete files on stage
+|`BULLETTRAIN_GIT_UNTRACKED`|`"%F{yellow}✭%F{black}"`|Icon for untracked files
+|`BULLETTRAIN_GIT_RENAMED`|`"➜"`|Icon for renamed
+|`BULLETTRAIN_GIT_UNMERGED`|`"═"`|Icon for unmerged state
+|`BULLETTRAIN_GIT_AHEAD`|`" ⬆"`|Icon for ahead state from remote
+|`BULLETTRAIN_GIT_BEHIND`|`" ⬇"`|Icon for behind state from remote
+|`BULLETTRAIN_GIT_DIVERGED`|`" ⬍"`|Icon for diverged state from remote
+
+The git prompt can be disabled for a specific repository by setting a git config flag: `git config oh-my-zsh.hide-status 1`. This is useful to avoid performance issues for particularly huge repositories.
+
+### Screen
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_SCREEN_BG`|`white`|Background color
+|`BULLETTRAIN_SCREEN_FG`|`black`|Foreground color
+|`BULLETTRAIN_SCREEN_PREFIX`|`⬗`|Prefix of the segment
+
+### Mercurial/HG
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+
+### Command execution time
+
+|Variable|Default|Meaning
+|--------|-------|-------|
+|`BULLETTRAIN_EXEC_TIME_ELAPSED`|5|Minimum elapsed time of command execution. If the execution time of a command is smaller than this, the segment will be hidden.
+|`BULLETTRAIN_EXEC_TIME_BG`|`yellow`|Background color
+|`BULLETTRAIN_EXEC_TIME_FG`|`black`|Foreground color
+
+## Wiki
+
+- [FAQ](https://github.com/caiogondim/bullet-train-oh-my-zsh-theme/wiki/FAQ)
+- [Screenshots](https://github.com/caiogondim/bullet-train-oh-my-zsh-theme/wiki/Screenshots)
+- [Tips](https://github.com/caiogondim/bullet-train-oh-my-zsh-theme/wiki/Tips)
+
+## Contributors
+
+That project was originally a fork from
+[Powerline](https://github.com/jeremyFreeAgent/oh-my-zsh-powerline-theme), but
+most of the code was later erased and its now more closely related to
+[Agnoster](https://gist.github.com/agnoster/3712874). Below is a `git summary`
+of the project:
+
+```
+156 Caio Gondim
+ 33 Jérémy Romey
+ 14 Greg Fitzgerald
+ 8 Dan Kaplun
+ 8 Viktor (Icon) VAD
+ 7 Jocelyn Mallon
+ 7 Dawid Kurek
+ 6 Joe Block
+ 6 Jérémy Romey
+ 5 Arthur Wang
+ 4 Flavius Aspra
+ 3 Mario Zigliotto
+ 3 Michael Robinson
+ 3 Michael Cornell
+ 3 Iulian Onofrei
+ 2 itsZero (Chien-An Cho)
+ 2 Daniel Loader
+ 2 Charlie Smith
+ 2 wujtruj
+ 2 Jiri Tyr
+ 1 Sébastien Bordenave
+ 1 Yongqian Li
+ 1 alysson
+ 1 gvillalta99
+ 1 illuminatis
+ 1 krischer
+ 1 m.kuehn
+ 1 timfeirg
+ 1 Adrien Brault
+ 1 yachi
+ 1 Andreas Galauner
+ 1 Dale Davis
+ 1 Fabio Poloni
+ 1 Faure Hu
+ 1 Guillaume BINET
+ 1 Hannes Frank
+ 1 Heng-Yi Wu
+ 1 Jack Chu
+ 1 Jason Hollis
+ 1 KVoll
+ 1 Kevin
+ 1 Lyncredible
+ 1 Manuel Hoffmann
+ 1 Marius Krämer
+ 1 Maxime Bruguet
+ 1 Mertcan Mermerkaya
+ 1 Nicholas
+ 1 Peter Nagy
+ 1 Sen Jiang
+```
+
+## Credits
+
+This theme is highly inspired by the following themes:
+- [Powerline](https://github.com/jeremyFreeAgent/oh-my-zsh-powerline-theme)
+- [Agnoster](https://gist.github.com/agnoster/3712874)
+
+## Donating
+
+If you found this project useful and are willing to donate, transfer some
+bitcoins to `1BqqKiZA8Tq43CdukdBEwCdDD42jxuX9UY` or through the
+[URL](https://www.coinbase.com/caiogondim) https://www.coinbase.com/caiogondim
+
+Or via [PayPal.me](https://www.paypal.me/caiogondim) https://www.paypal.me/caiogondim.
+
+---
+
+[caiogondim.com](https://caiogondim.com) ·
+GitHub [@caiogondim](https://github.com/caiogondim) ·
+Twitter [@caio_gondim](https://twitter.com/caio_gondim)
diff --git a/bullet-train.zsh-theme b/bullet-train.zsh-theme
new file mode 100644
index 0000000..d72c4f5
--- /dev/null
+++ b/bullet-train.zsh-theme
@@ -0,0 +1,696 @@
+# README
+#
+# In order for this theme to render correctly, you will need a
+# [Powerline-patched font](https://github.com/Lokaltog/powerline-fonts).
+#
+# In addition, I recommend the
+# [Tomorrow Night theme](https://github.com/chriskempson/tomorrow-theme) and, if
+# you're using it on Mac OS X, [iTerm 2](http://www.iterm2.com/) over
+# Terminal.app - it has significantly better color fidelity.
+
+# ------------------------------------------------------------------------------
+# CONFIGURATION
+# The default configuration, that can be overwrite in your .zshrc file
+# ------------------------------------------------------------------------------
+
+VIRTUAL_ENV_DISABLE_PROMPT=true
+
+# Define order and content of prompt
+if [ ! -n "${BULLETTRAIN_PROMPT_ORDER+1}" ]; then
+ BULLETTRAIN_PROMPT_ORDER=(
+ time
+ status
+ custom
+ context
+ dir
+ screen
+ perl
+ ruby
+ virtualenv
+ nvm
+ aws
+ go
+ rust
+ elixir
+ git
+ hg
+ cmd_exec_time
+ )
+fi
+
+# PROMPT
+if [ ! -n "${BULLETTRAIN_PROMPT_CHAR+1}" ]; then
+ BULLETTRAIN_PROMPT_CHAR="\$"
+fi
+if [ ! -n "${BULLETTRAIN_PROMPT_ROOT+1}" ]; then
+ BULLETTRAIN_PROMPT_ROOT=true
+fi
+if [ ! -n "${BULLETTRAIN_PROMPT_SEPARATE_LINE+1}" ]; then
+ BULLETTRAIN_PROMPT_SEPARATE_LINE=true
+fi
+if [ ! -n "${BULLETTRAIN_PROMPT_ADD_NEWLINE+1}" ]; then
+ BULLETTRAIN_PROMPT_ADD_NEWLINE=true
+fi
+
+# STATUS
+if [ ! -n "${BULLETTRAIN_STATUS_EXIT_SHOW+1}" ]; then
+ BULLETTRAIN_STATUS_EXIT_SHOW=false
+fi
+if [ ! -n "${BULLETTRAIN_STATUS_BG+1}" ]; then
+ BULLETTRAIN_STATUS_BG=green
+fi
+if [ ! -n "${BULLETTRAIN_STATUS_ERROR_BG+1}" ]; then
+ BULLETTRAIN_STATUS_ERROR_BG=red
+fi
+if [ ! -n "${BULLETTRAIN_STATUS_FG+1}" ]; then
+ BULLETTRAIN_STATUS_FG=white
+fi
+
+# TIME
+if [ ! -n "${BULLETTRAIN_TIME_BG+1}" ]; then
+ BULLETTRAIN_TIME_BG=white
+fi
+if [ ! -n "${BULLETTRAIN_TIME_FG+1}" ]; then
+ BULLETTRAIN_TIME_FG=black
+fi
+
+# CUSTOM
+if [ ! -n "${BULLETTRAIN_CUSTOM_MSG+1}" ]; then
+ BULLETTRAIN_CUSTOM_MSG=false
+fi
+if [ ! -n "${BULLETTRAIN_CUSTOM_BG+1}" ]; then
+ BULLETTRAIN_CUSTOM_BG=black
+fi
+if [ ! -n "${BULLETTRAIN_CUSTOM_FG+1}" ]; then
+ BULLETTRAIN_CUSTOM_FG=default
+fi
+
+# VIRTUALENV
+if [ ! -n "${BULLETTRAIN_VIRTUALENV_BG+1}" ]; then
+ BULLETTRAIN_VIRTUALENV_BG=yellow
+fi
+if [ ! -n "${BULLETTRAIN_VIRTUALENV_FG+1}" ]; then
+ BULLETTRAIN_VIRTUALENV_FG=white
+fi
+if [ ! -n "${BULLETTRAIN_VIRTUALENV_PREFIX+1}" ]; then
+ BULLETTRAIN_VIRTUALENV_PREFIX=🐍
+fi
+
+# NVM
+if [ ! -n "${BULLETTRAIN_NVM_BG+1}" ]; then
+ BULLETTRAIN_NVM_BG=green
+fi
+if [ ! -n "${BULLETTRAIN_NVM_FG+1}" ]; then
+ BULLETTRAIN_NVM_FG=white
+fi
+if [ ! -n "${BULLETTRAIN_NVM_PREFIX+1}" ]; then
+ BULLETTRAIN_NVM_PREFIX="⬡ "
+fi
+
+# AWS
+if [ ! -n "${BULLETTRAIN_AWS_BG+1}" ]; then
+ BULLETTRAIN_AWS_BG=yellow
+fi
+if [ ! -n "${BULLETTRAIN_AWS_FG+1}" ]; then
+ BULLETTRAIN_AWS_FG=black
+fi
+if [ ! -n "${BULLETTRAIN_AWS_PREFIX+1}" ]; then
+ BULLETTRAIN_AWS_PREFIX="☁️"
+fi
+
+# RUBY
+if [ ! -n "${BULLETTRAIN_RUBY_BG+1}" ]; then
+ BULLETTRAIN_RUBY_BG=red
+fi
+if [ ! -n "${BULLETTRAIN_RUBY_FG+1}" ]; then
+ BULLETTRAIN_RUBY_FG=white
+fi
+if [ ! -n "${BULLETTRAIN_RUBY_PREFIX+1}" ]; then
+ BULLETTRAIN_RUBY_PREFIX=♦️
+fi
+
+# Go
+if [ ! -n "${BULLETTRAIN_GO_BG+1}" ]; then
+ BULLETTRAIN_GO_BG=cyan
+fi
+if [ ! -n "${BULLETTRAIN_GO_FG+1}" ]; then
+ BULLETTRAIN_GO_FG=white
+fi
+if [ ! -n "${BULLETTRAIN_GO_PREFIX+1}" ]; then
+ BULLETTRAIN_GO_PREFIX="go"
+fi
+
+# Rust
+if [ ! -n "${BULLETTRAIN_RUST_BG+1}" ]; then
+ BULLETTRAIN_RUST_BG=black
+fi
+if [ ! -n "${BULLETTRAIN_RUST_FG+1}" ]; then
+ BULLETTRAIN_RUST_FG=white
+fi
+if [ ! -n "${BULLETTRAIN_RUST_PREFIX+1}" ]; then
+ BULLETTRAIN_RUST_PREFIX="🦀"
+fi
+
+# Kubernetes Context
+if [ ! -n "${BULLETTRAIN_KCTX_BG+1}" ]; then
+ BULLETTRAIN_KCTX_BG=yellow
+fi
+if [ ! -n "${BULLETTRAIN_KCTX_FG+1}" ]; then
+ BULLETTRAIN_KCTX_FG=white
+fi
+if [ ! -n "${BULLETTRAIN_KCTX_PREFIX+1}" ]; then
+ BULLETTRAIN_KCTX_PREFIX="⎈"
+fi
+if [ ! -n "${BULLETTRAIN_KCTX_KCONFIG+1}" ]; then
+ BULLETTRAIN_KCTX_KCONFIG="${HOME}/.kube/config"
+fi
+if [ ! -n "${BULLETTRAIN_KCTX_KUBECTL+1}" ]; then
+ BULLETTRAIN_KCTX_KUBECTL="true"
+fi
+if [ ! -n "${BULLETTRAIN_KCTX_NAMESPACE+1}" ]; then
+ BULLETTRAIN_KCTX_NAMESPACE="true"
+fi
+
+# ELIXIR
+if [ ! -n "${BULLETTRAIN_ELIXIR_BG+1}" ]; then
+ BULLETTRAIN_ELIXIR_BG=magenta
+fi
+if [ ! -n "${BULLETTRAIN_ELIXIR_FG+1}" ]; then
+ BULLETTRAIN_ELIXIR_FG=white
+fi
+if [ ! -n "${BULLETTRAIN_ELIXIR_PREFIX+1}" ]; then
+ BULLETTRAIN_ELIXIR_PREFIX="💧"
+fi
+
+# DIR
+if [ ! -n "${BULLETTRAIN_DIR_BG+1}" ]; then
+ BULLETTRAIN_DIR_BG=blue
+fi
+if [ ! -n "${BULLETTRAIN_DIR_FG+1}" ]; then
+ BULLETTRAIN_DIR_FG=white
+fi
+if [ ! -n "${BULLETTRAIN_DIR_CONTEXT_SHOW+1}" ]; then
+ BULLETTRAIN_DIR_CONTEXT_SHOW=false
+fi
+if [ ! -n "${BULLETTRAIN_DIR_EXTENDED+1}" ]; then
+ BULLETTRAIN_DIR_EXTENDED=1
+fi
+
+# GIT
+if [ ! -n "${BULLETTRAIN_GIT_COLORIZE_DIRTY+1}" ]; then
+ BULLETTRAIN_GIT_COLORIZE_DIRTY=false
+fi
+if [ ! -n "${BULLETTRAIN_GIT_COLORIZE_DIRTY_FG_COLOR+1}" ]; then
+ BULLETTRAIN_GIT_COLORIZE_DIRTY_FG_COLOR=black
+fi
+if [ ! -n "${BULLETTRAIN_GIT_COLORIZE_DIRTY_BG_COLOR+1}" ]; then
+ BULLETTRAIN_GIT_COLORIZE_DIRTY_BG_COLOR=yellow
+fi
+if [ ! -n "${BULLETTRAIN_GIT_BG+1}" ]; then
+ BULLETTRAIN_GIT_BG=white
+fi
+if [ ! -n "${BULLETTRAIN_GIT_FG+1}" ]; then
+ BULLETTRAIN_GIT_FG=black
+fi
+if [ ! -n "${BULLETTRAIN_GIT_EXTENDED+1}" ]; then
+ BULLETTRAIN_GIT_EXTENDED=true
+fi
+if [ ! -n "${BULLETTRAIN_GIT_PROMPT_CMD+1}" ]; then
+ BULLETTRAIN_GIT_PROMPT_CMD="\$(git_prompt_info)"
+fi
+
+# PERL
+if [ ! -n "${BULLETTRAIN_PERL_BG+1}" ]; then
+ BULLETTRAIN_PERL_BG=yellow
+fi
+if [ ! -n "${BULLETTRAIN_PERL_FG+1}" ]; then
+ BULLETTRAIN_PERL_FG=black
+fi
+if [ ! -n "${BULLETTRAIN_PERL_PREFIX+1}" ]; then
+ BULLETTRAIN_PERL_PREFIX=🐪
+fi
+
+# CONTEXT
+if [ ! -n "${BULLETTRAIN_CONTEXT_BG+1}" ]; then
+ BULLETTRAIN_CONTEXT_BG=black
+fi
+if [ ! -n "${BULLETTRAIN_CONTEXT_FG+1}" ]; then
+ BULLETTRAIN_CONTEXT_FG=default
+fi
+if [ ! -n "${BULLETTRAIN_CONTEXT_HOSTNAME+1}" ]; then
+ BULLETTRAIN_CONTEXT_HOSTNAME=%m
+fi
+
+# GIT PROMPT
+if [ ! -n "${BULLETTRAIN_GIT_PREFIX+1}" ]; then
+ ZSH_THEME_GIT_PROMPT_PREFIX="\ue0a0 "
+else
+ ZSH_THEME_GIT_PROMPT_PREFIX=$BULLETTRAIN_GIT_PREFIX
+fi
+if [ ! -n "${BULLETTRAIN_GIT_SUFFIX+1}" ]; then
+ ZSH_THEME_GIT_PROMPT_SUFFIX=""
+else
+ ZSH_THEME_GIT_PROMPT_SUFFIX=$BULLETTRAIN_GIT_SUFFIX
+fi
+if [ ! -n "${BULLETTRAIN_GIT_DIRTY+1}" ]; then
+ ZSH_THEME_GIT_PROMPT_DIRTY=" %F{red}✘%F{black}"
+else
+ ZSH_THEME_GIT_PROMPT_DIRTY=$BULLETTRAIN_GIT_DIRTY
+fi
+if [ ! -n "${BULLETTRAIN_GIT_CLEAN+1}" ]; then
+ ZSH_THEME_GIT_PROMPT_CLEAN=" %F{green}✔%F{black}"
+else
+ ZSH_THEME_GIT_PROMPT_CLEAN=$BULLETTRAIN_GIT_CLEAN
+fi
+if [ ! -n "${BULLETTRAIN_GIT_ADDED+1}" ]; then
+ ZSH_THEME_GIT_PROMPT_ADDED=" %F{green}✚%F{black}"
+else
+ ZSH_THEME_GIT_PROMPT_ADDED=$BULLETTRAIN_GIT_ADDED
+fi
+if [ ! -n "${BULLETTRAIN_GIT_MODIFIED+1}" ]; then
+ ZSH_THEME_GIT_PROMPT_MODIFIED=" %F{blue}✹%F{black}"
+else
+ ZSH_THEME_GIT_PROMPT_MODIFIED=$BULLETTRAIN_GIT_MODIFIED
+fi
+if [ ! -n "${BULLETTRAIN_GIT_DELETED+1}" ]; then
+ ZSH_THEME_GIT_PROMPT_DELETED=" %F{red}✖%F{black}"
+else
+ ZSH_THEME_GIT_PROMPT_DELETED=$BULLETTRAIN_GIT_DELETED
+fi
+if [ ! -n "${BULLETTRAIN_GIT_UNTRACKED+1}" ]; then
+ ZSH_THEME_GIT_PROMPT_UNTRACKED=" %F{yellow}✭%F{black}"
+else
+ ZSH_THEME_GIT_PROMPT_UNTRACKED=$BULLETTRAIN_GIT_UNTRACKED
+fi
+if [ ! -n "${BULLETTRAIN_GIT_RENAMED+1}" ]; then
+ ZSH_THEME_GIT_PROMPT_RENAMED=" ➜"
+else
+ ZSH_THEME_GIT_PROMPT_RENAMED=$BULLETTRAIN_GIT_RENAMED
+fi
+if [ ! -n "${BULLETTRAIN_GIT_UNMERGED+1}" ]; then
+ ZSH_THEME_GIT_PROMPT_UNMERGED=" ═"
+else
+ ZSH_THEME_GIT_PROMPT_UNMERGED=$BULLETTRAIN_GIT_UNMERGED
+fi
+if [ ! -n "${BULLETTRAIN_GIT_AHEAD+1}" ]; then
+ ZSH_THEME_GIT_PROMPT_AHEAD=" ⬆"
+else
+ ZSH_THEME_GIT_PROMPT_AHEAD=$BULLETTRAIN_GIT_AHEAD
+fi
+if [ ! -n "${BULLETTRAIN_GIT_BEHIND+1}" ]; then
+ ZSH_THEME_GIT_PROMPT_BEHIND=" ⬇"
+else
+ ZSH_THEME_GIT_PROMPT_BEHIND=$BULLETTRAIN_GIT_BEHIND
+fi
+if [ ! -n "${BULLETTRAIN_GIT_DIVERGED+1}" ]; then
+ ZSH_THEME_GIT_PROMPT_DIVERGED=" ⬍"
+else
+ ZSH_THEME_GIT_PROMPT_DIVERGED=$BULLETTRAIN_GIT_PROMPT_DIVERGED
+fi
+
+# SCREEN
+if [ ! -n "${BULLETTRAIN_SCREEN_BG+1}" ]; then
+ BULLETTRAIN_SCREEN_BG=white
+fi
+if [ ! -n "${BULLETTRAIN_SCREEN_FG+1}" ]; then
+ BULLETTRAIN_SCREEN_FG=black
+fi
+if [ ! -n "${BULLETTRAIN_SCREEN_PREFIX+1}" ]; then
+ BULLETTRAIN_SCREEN_PREFIX="⬗"
+fi
+
+# COMMAND EXECUTION TIME
+if [ ! -n "${BULLETTRAIN_EXEC_TIME_ELAPSED+1}" ]; then
+ BULLETTRAIN_EXEC_TIME_ELAPSED=5
+fi
+if [ ! -n "${BULLETTRAIN_EXEC_TIME_BG+1}" ]; then
+ BULLETTRAIN_EXEC_TIME_BG=yellow
+fi
+if [ ! -n "${BULLETTRAIN_EXEC_TIME_FG+1}" ]; then
+ BULLETTRAIN_EXEC_TIME_FG=black
+fi
+
+
+# ------------------------------------------------------------------------------
+# SEGMENT DRAWING
+# A few functions to make it easy and re-usable to draw segmented prompts
+# ------------------------------------------------------------------------------
+
+CURRENT_BG='NONE'
+SEGMENT_SEPARATOR=''
+
+# Begin a segment
+# Takes three arguments, background, foreground and text. All of them can be omitted,
+# rendering default background/foreground and no text.
+prompt_segment() {
+ local bg fg
+ [[ -n $1 ]] && bg="%K{$1}" || bg="%k"
+ [[ -n $2 ]] && fg="%F{$2}" || fg="%f"
+ if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then
+ echo -n " %{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} "
+ else
+ echo -n "%{$bg%}%{$fg%} "
+ fi
+ CURRENT_BG=$1
+ [[ -n $3 ]] && echo -n $3
+}
+
+# End the prompt, closing any open segments
+prompt_end() {
+ if [[ -n $CURRENT_BG ]]; then
+ echo -n " %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR"
+ else
+ echo -n "%{%k%}"
+ fi
+ echo -n "%{%f%}"
+ CURRENT_BG=''
+}
+
+# ------------------------------------------------------------------------------
+# PROMPT COMPONENTS
+# Each component will draw itself, and hide itself if no information needs
+# to be shown
+# ------------------------------------------------------------------------------
+
+# Context: user@hostname (who am I and where am I)
+context() {
+ local user="$(whoami)"
+ [[ "$user" != "$BULLETTRAIN_CONTEXT_DEFAULT_USER" || -n "$BULLETTRAIN_IS_SSH_CLIENT" ]] && echo -n "${user}@$BULLETTRAIN_CONTEXT_HOSTNAME"
+}
+
+prompt_context() {
+ local _context="$(context)"
+ [[ -n "$_context" ]] && prompt_segment $BULLETTRAIN_CONTEXT_BG $BULLETTRAIN_CONTEXT_FG "$_context"
+}
+
+# Based on http://stackoverflow.com/a/32164707/3859566
+function displaytime {
+ local T=$1
+ local D=$((T/60/60/24))
+ local H=$((T/60/60%24))
+ local M=$((T/60%60))
+ local S=$((T%60))
+ [[ $D > 0 ]] && printf '%dd' $D
+ [[ $H > 0 ]] && printf '%dh' $H
+ [[ $M > 0 ]] && printf '%dm' $M
+ printf '%ds' $S
+}
+
+# Prompt previous command execution time
+preexec() {
+ cmd_timestamp=`date +%s`
+}
+
+precmd() {
+ local stop=`date +%s`
+ local start=${cmd_timestamp:-$stop}
+ let BULLETTRAIN_last_exec_duration=$stop-$start
+ cmd_timestamp=''
+}
+
+prompt_cmd_exec_time() {
+ [ $BULLETTRAIN_last_exec_duration -gt $BULLETTRAIN_EXEC_TIME_ELAPSED ] && prompt_segment $BULLETTRAIN_EXEC_TIME_BG $BULLETTRAIN_EXEC_TIME_FG "$(displaytime $BULLETTRAIN_last_exec_duration)"
+}
+
+# Custom
+prompt_custom() {
+ if [[ $BULLETTRAIN_CUSTOM_MSG == false ]]; then
+ return
+ fi
+
+ local custom_msg
+ eval custom_msg=$BULLETTRAIN_CUSTOM_MSG
+ [[ -n "${custom_msg}" ]] && prompt_segment $BULLETTRAIN_CUSTOM_BG $BULLETTRAIN_CUSTOM_FG "${custom_msg}"
+}
+
+# Git
+prompt_git() {
+ if [[ "$(command git config --get oh-my-zsh.hide-status 2>/dev/null)" == "1" ]]; then
+ return
+ fi
+
+ local ref dirty mode repo_path git_prompt
+ repo_path=$(git rev-parse --git-dir 2>/dev/null)
+
+ if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
+ if [[ $BULLETTRAIN_GIT_COLORIZE_DIRTY == true && -n $(git status --porcelain --ignore-submodules) ]]; then
+ BULLETTRAIN_GIT_BG=$BULLETTRAIN_GIT_COLORIZE_DIRTY_BG_COLOR
+ BULLETTRAIN_GIT_FG=$BULLETTRAIN_GIT_COLORIZE_DIRTY_FG_COLOR
+ fi
+ prompt_segment $BULLETTRAIN_GIT_BG $BULLETTRAIN_GIT_FG
+
+ eval git_prompt=${BULLETTRAIN_GIT_PROMPT_CMD}
+ if [[ $BULLETTRAIN_GIT_EXTENDED == true ]]; then
+ echo -n ${git_prompt}$(git_prompt_status)
+ else
+ echo -n ${git_prompt}
+ fi
+ fi
+}
+
+prompt_hg() {
+ local rev status
+ if $(hg id >/dev/null 2>&1); then
+ if $(hg prompt >/dev/null 2>&1); then
+ if [[ $(hg prompt "{status|unknown}") = "?" ]]; then
+ # if files are not added
+ prompt_segment red white
+ st='±'
+ elif [[ -n $(hg prompt "{status|modified}") ]]; then
+ # if any modification
+ prompt_segment yellow black
+ st='±'
+ else
+ # if working copy is clean
+ prompt_segment green black
+ fi
+ echo -n $(hg prompt "☿ {rev}@{branch}") $st
+ else
+ st=""
+ rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g')
+ branch=$(hg id -b 2>/dev/null)
+ if $(hg st | grep -Eq "^\?"); then
+ prompt_segment red black
+ st='±'
+ elif $(hg st | grep -Eq "^(M|A)"); then
+ prompt_segment yellow black
+ st='±'
+ else
+ prompt_segment green black
+ fi
+ echo -n "☿ $rev@$branch" $st
+ fi
+ fi
+}
+
+# Dir: current working directory
+prompt_dir() {
+ local dir=''
+ local _context="$(context)"
+ [[ $BULLETTRAIN_DIR_CONTEXT_SHOW == true && -n "$_context" ]] && dir="${dir}${_context}:"
+
+ if [[ $BULLETTRAIN_DIR_EXTENDED == 0 ]]; then
+ #short directories
+ dir="${dir}%1~"
+ elif [[ $BULLETTRAIN_DIR_EXTENDED == 2 ]]; then
+ #long directories
+ dir="${dir}%0~"
+ else
+ #medium directories (default case)
+ dir="${dir}%4(c:...:)%3c"
+ fi
+
+ prompt_segment $BULLETTRAIN_DIR_BG $BULLETTRAIN_DIR_FG $dir
+}
+
+# RUBY
+# RVM: only shows RUBY info if on a gemset that is not the default one
+# RBENV: shows current ruby version active in the shell; also with non-global gemsets if any is active
+# CHRUBY: shows current ruby version active in the shell
+prompt_ruby() {
+ if command -v rvm-prompt > /dev/null 2>&1; then
+ prompt_segment $BULLETTRAIN_RUBY_BG $BULLETTRAIN_RUBY_FG $BULLETTRAIN_RUBY_PREFIX" $(rvm-prompt i v g)"
+ elif command -v chruby > /dev/null 2>&1; then
+ prompt_segment $BULLETTRAIN_RUBY_BG $BULLETTRAIN_RUBY_FG $BULLETTRAIN_RUBY_PREFIX" $(chruby | sed -n -e 's/ \* //p')"
+ elif command -v rbenv > /dev/null 2>&1; then
+ current_gemset() {
+ echo "$(rbenv gemset active 2&>/dev/null | sed -e 's/ global$//')"
+ }
+
+ if [[ -n $(current_gemset) ]]; then
+ prompt_segment $BULLETTRAIN_RUBY_BG $BULLETTRAIN_RUBY_FG $BULLETTRAIN_RUBY_PREFIX" $(rbenv version | sed -e 's/ (set.*$//')"@"$(current_gemset)"
+ else
+ prompt_segment $BULLETTRAIN_RUBY_BG $BULLETTRAIN_RUBY_FG $BULLETTRAIN_RUBY_PREFIX" $(rbenv version | sed -e 's/ (set.*$//')"
+ fi
+ fi
+}
+
+# ELIXIR
+prompt_elixir() {
+ if command -v elixir > /dev/null 2>&1; then
+ prompt_segment $BULLETTRAIN_ELIXIR_BG $BULLETTRAIN_ELIXIR_FG $BULLETTRAIN_ELIXIR_PREFIX" $(elixir -v | tail -n 1 | awk '{print $2}')"
+ fi
+}
+
+# PERL
+# PLENV: shows current PERL version active in the shell
+prompt_perl() {
+ if command -v plenv > /dev/null 2>&1; then
+ prompt_segment $BULLETTRAIN_PERL_BG $BULLETTRAIN_PERL_FG $BULLETTRAIN_PERL_PREFIX" $(plenv version | sed -e 's/ (set.*$//')"
+ fi
+}
+
+# Go
+prompt_go() {
+ setopt extended_glob
+ if [[ (-f *.go(#qN) || -d Godeps || -f glide.yaml) ]]; then
+ if command -v go > /dev/null 2>&1; then
+ prompt_segment $BULLETTRAIN_GO_BG $BULLETTRAIN_GO_FG $BULLETTRAIN_GO_PREFIX" $(go version | grep --colour=never -oE '[[:digit:]].[[:digit:]]+')"
+ fi
+ fi
+}
+
+# Rust
+prompt_rust() {
+ if [[ (-f Cargo.toml) ]]; then
+ if command -v rustc > /dev/null 2>&1; then
+ prompt_segment $BULLETTRAIN_RUST_BG $BULLETTRAIN_RUST_FG $BULLETTRAIN_RUST_PREFIX" $(rustc -V version | cut -d' ' -f2)"
+ fi
+ fi
+}
+
+# Kubernetes Context
+prompt_kctx() {
+ if [[ "$BULLETTRAIN_KCTX_KUBECTL" == "true" ]] && command -v kubectl > /dev/null 2>&1; then
+ local jsonpath='{.current-context}'
+ if [[ "$BULLETTRAIN_KCTX_NAMESPACE" == "true" ]]; then
+ jsonpath="${jsonpath}{':'}{..namespace}"
+ fi
+ prompt_segment $BULLETTRAIN_KCTX_BG $BULLETTRAIN_KCTX_FG $BULLETTRAIN_KCTX_PREFIX" $(kubectl config view --minify --output "jsonpath=${jsonpath}" 2>/dev/null)"
+ elif [[ -f $BULLETTRAIN_KCTX_KCONFIG ]]; then
+ prompt_segment $BULLETTRAIN_KCTX_BG $BULLETTRAIN_KCTX_FG $BULLETTRAIN_KCTX_PREFIX" $(cat $BULLETTRAIN_KCTX_KCONFIG | grep current-context | awk '{print $2}')"
+ fi
+}
+
+# Virtualenv: current working virtualenv
+prompt_virtualenv() {
+ local virtualenv_path="$VIRTUAL_ENV"
+ if [[ -n $virtualenv_path && -n $VIRTUAL_ENV_DISABLE_PROMPT ]]; then
+ prompt_segment $BULLETTRAIN_VIRTUALENV_BG $BULLETTRAIN_VIRTUALENV_FG $BULLETTRAIN_VIRTUALENV_PREFIX" $(basename $virtualenv_path)"
+ elif which pyenv &> /dev/null; then
+ if [[ "$(pyenv version | sed -e 's/ (set.*$//' | tr '\n' ' ' | sed 's/.$//')" != "system" ]]; then
+ prompt_segment $BULLETTRAIN_VIRTUALENV_BG $BULLETTRAIN_VIRTUALENV_FG $BULLETTRAIN_VIRTUALENV_PREFIX" $(pyenv version | sed -e 's/ (set.*$//' | tr '\n' ' ' | sed 's/.$//')"
+ fi
+ fi
+}
+
+# NVM: Node version manager
+prompt_nvm() {
+ local nvm_prompt
+ if type nvm >/dev/null 2>&1; then
+ nvm_prompt=$(nvm current 2>/dev/null)
+ [[ "${nvm_prompt}x" == "x" || "${nvm_prompt}" == "system" ]] && return
+ elif type node >/dev/null 2>&1; then
+ nvm_prompt="$(node --version)"
+ else
+ return
+ fi
+ nvm_prompt=${nvm_prompt}
+ prompt_segment $BULLETTRAIN_NVM_BG $BULLETTRAIN_NVM_FG $BULLETTRAIN_NVM_PREFIX$nvm_prompt
+}
+
+#AWS Profile
+prompt_aws() {
+ local spaces=" "
+
+ if [[ -n "$AWS_PROFILE" ]]; then
+ prompt_segment $BULLETTRAIN_AWS_BG $BULLETTRAIN_AWS_FG $BULLETTRAIN_AWS_PREFIX$spaces$AWS_PROFILE
+ fi
+}
+
+# SCREEN Session
+prompt_screen() {
+ local session_name="$STY"
+ if [[ "$session_name" != "" ]]; then
+ prompt_segment $BULLETTRAIN_SCREEN_BG $BULLETTRAIN_SCREEN_FG $BULLETTRAIN_SCREEN_PREFIX" $session_name"
+ fi
+}
+
+prompt_time() {
+ if [[ $BULLETTRAIN_TIME_12HR == true ]]; then
+ prompt_segment $BULLETTRAIN_TIME_BG $BULLETTRAIN_TIME_FG %D{%r}
+ else
+ prompt_segment $BULLETTRAIN_TIME_BG $BULLETTRAIN_TIME_FG %D{%T}
+ fi
+}
+
+# Status:
+# - was there an error
+# - am I root
+# - are there background jobs?
+prompt_status() {
+ local symbols
+ symbols=()
+ [[ $RETVAL -ne 0 && $BULLETTRAIN_STATUS_EXIT_SHOW != true ]] && symbols+="✘"
+ [[ $RETVAL -ne 0 && $BULLETTRAIN_STATUS_EXIT_SHOW == true ]] && symbols+="✘ $RETVAL"
+ [[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}⚡%f"
+ [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="⚙"
+
+ if [[ -n "$symbols" && $RETVAL -ne 0 ]]; then
+ prompt_segment $BULLETTRAIN_STATUS_ERROR_BG $BULLETTRAIN_STATUS_FG "$symbols"
+ elif [[ -n "$symbols" ]]; then
+ prompt_segment $BULLETTRAIN_STATUS_BG $BULLETTRAIN_STATUS_FG "$symbols"
+ fi
+
+}
+
+# Prompt Character
+prompt_chars() {
+ local bt_prompt_chars="${BULLETTRAIN_PROMPT_CHAR}"
+
+ if [[ $BULLETTRAIN_PROMPT_ROOT == true ]]; then
+ bt_prompt_chars="%(!.%F{red}# .%F{green}${bt_prompt_chars}%f)"
+ fi
+
+ if [[ $BULLETTRAIN_PROMPT_SEPARATE_LINE == false ]]; then
+ bt_prompt_chars="${bt_prompt_chars}"
+ fi
+
+ echo -n "$bt_prompt_chars"
+
+ if [[ -n $BULLETTRAIN_PROMPT_CHAR ]]; then
+ echo -n " "
+ fi
+}
+
+# Prompt Line Separator
+prompt_line_sep() {
+ if [[ $BULLETTRAIN_PROMPT_SEPARATE_LINE == true ]]; then
+ # newline wont print without a non newline character, so add a zero-width space
+ echo -e '\n%{\u200B%}'
+ fi
+}
+
+# ------------------------------------------------------------------------------
+# MAIN
+# Entry point
+# ------------------------------------------------------------------------------
+
+build_prompt() {
+ RETVAL=$?
+ for segment in $BULLETTRAIN_PROMPT_ORDER
+ do
+ prompt_$segment
+ done
+ prompt_end
+}
+
+NEWLINE='
+'
+PROMPT=''
+[[ $BULLETTRAIN_PROMPT_ADD_NEWLINE == true ]] && PROMPT="$PROMPT$NEWLINE"
+PROMPT="$PROMPT"'%{%f%b%k%}$(build_prompt)'
+[[ $BULLETTRAIN_PROMPT_SEPARATE_LINE == true ]] && PROMPT="$PROMPT$NEWLINE"
+PROMPT="$PROMPT"'%{${fg_bold[default]}%}'
+[[ $BULLETTRAIN_PROMPT_SEPARATE_LINE == false ]] && PROMPT="$PROMPT "
+PROMPT="$PROMPT"'$(prompt_chars)%{$reset_color%}'
diff --git a/img/icon-square.png b/img/icon-square.png
new file mode 100644
index 0000000..81629bb
Binary files /dev/null and b/img/icon-square.png differ
diff --git a/img/icon-square.sketch b/img/icon-square.sketch
new file mode 100644
index 0000000..8317946
Binary files /dev/null and b/img/icon-square.sketch differ
diff --git a/img/icon.png b/img/icon.png
new file mode 100644
index 0000000..47adcf4
Binary files /dev/null and b/img/icon.png differ
diff --git a/img/icon.sketch b/img/icon.sketch
new file mode 100644
index 0000000..14dff13
Binary files /dev/null and b/img/icon.sketch differ
diff --git a/img/icon.svg b/img/icon.svg
new file mode 100644
index 0000000..5e711c2
--- /dev/null
+++ b/img/icon.svg
@@ -0,0 +1,24 @@
+
+
\ No newline at end of file
diff --git a/img/preview.gif b/img/preview.gif
new file mode 100644
index 0000000..b2c41bd
Binary files /dev/null and b/img/preview.gif differ
diff --git a/img/wiki/screenshots/monokai.png b/img/wiki/screenshots/monokai.png
new file mode 100644
index 0000000..49bb28e
Binary files /dev/null and b/img/wiki/screenshots/monokai.png differ
diff --git a/img/wiki/screenshots/solarized-dark.png b/img/wiki/screenshots/solarized-dark.png
new file mode 100644
index 0000000..01eadf7
Binary files /dev/null and b/img/wiki/screenshots/solarized-dark.png differ
diff --git a/img/wiki/screenshots/tomorrow-night-bright.png b/img/wiki/screenshots/tomorrow-night-bright.png
new file mode 100644
index 0000000..4c704e2
Binary files /dev/null and b/img/wiki/screenshots/tomorrow-night-bright.png differ
diff --git a/img/wiki/screenshots/tomorrow-night-eighties.png b/img/wiki/screenshots/tomorrow-night-eighties.png
new file mode 100644
index 0000000..9f1378b
Binary files /dev/null and b/img/wiki/screenshots/tomorrow-night-eighties.png differ
diff --git a/img/wiki/tips/git_prompt_command.png b/img/wiki/tips/git_prompt_command.png
new file mode 100644
index 0000000..4861afe
Binary files /dev/null and b/img/wiki/tips/git_prompt_command.png differ
diff --git a/img/wiki/tips/git_prompt_function.png b/img/wiki/tips/git_prompt_function.png
new file mode 100644
index 0000000..b84ea6f
Binary files /dev/null and b/img/wiki/tips/git_prompt_function.png differ
diff --git a/img/wiki/tips/git_prompt_origin.png b/img/wiki/tips/git_prompt_origin.png
new file mode 100644
index 0000000..2db03e0
Binary files /dev/null and b/img/wiki/tips/git_prompt_origin.png differ
diff --git a/img/wiki/tips/prompt_order.png b/img/wiki/tips/prompt_order.png
new file mode 100644
index 0000000..daae6b2
Binary files /dev/null and b/img/wiki/tips/prompt_order.png differ
diff --git a/makefile b/makefile
new file mode 100644
index 0000000..3801b59
--- /dev/null
+++ b/makefile
@@ -0,0 +1,7 @@
+# Installs a copy of the theme on the folder `~/.oh-my-zsh/themes/`
+install:
+ cp ./bullet-train.zsh-theme ~/.oh-my-zsh/themes/bullet-train.zsh-theme
+
+# Symlinks the theme for easier development
+link:
+ ln -sF `pwd`/bullet-train.zsh-theme ~/.oh-my-zsh/themes/