diff --git a/themes/nwinkler_random_colors/README.md b/themes/nwinkler_random_colors/README.md new file mode 100644 index 00000000..80620efb --- /dev/null +++ b/themes/nwinkler_random_colors/README.md @@ -0,0 +1,29 @@ +# Nwinkler Random Color Theme + +## Description + +The *Nwinkler Random Color* Theme is based on the [nwinkler theme](https://github.com/Bash-it/bash-it/wiki/Themes#nwinkler), but it randomizes the colors for: + +* time +* username +* hostname +* path + +The random colors are chosen the first time this theme is used and saved to the `~/.nwinkler_random_colors` file. So, the next time you connect to the same machine, you will get the same colors. + +To force new random colors to be selected, run the command: + +```sh +randomize_nwinkler +``` + +## Screenshot + +Here it is in action: + +![alt text](screenshot.png "Nwinkler Random Color Theme in Action!") + +## Usage Scenario + +This theme is especially useful when connecting to many different machines and switching between them often. Yes, the hostname *is* present in the prompt. But I argue that it's a lot faster to get a "feel" of what machine you are currently on because of the custom colors on that machine's prompt than by reading the hostname. + diff --git a/themes/nwinkler_random_colors/nwinkler_random_colors.theme.bash b/themes/nwinkler_random_colors/nwinkler_random_colors.theme.bash new file mode 100644 index 00000000..23634276 --- /dev/null +++ b/themes/nwinkler_random_colors/nwinkler_random_colors.theme.bash @@ -0,0 +1,112 @@ +#!/bin/bash + +# Two line prompt showing the following information: +# (time) SCM [username@hostname] pwd (SCM branch SCM status) +# → +# +# Example: +# (14:00:26) ± [foo@bar] ~/.bash_it (master ✓) +# → +# +# The arrow on the second line is showing the exit status of the last command: +# * Green: 0 exit status +# * Red: non-zero exit status +# +# The exit code functionality currently doesn't work if you are using the 'fasd' plugin, +# since 'fasd' is messing with the $PROMPT_COMMAND + +RANDOM_COLOR_FILE=$HOME/.nwinkler_random_colors + +function randomize_nwinkler { + declare -a AVAILABLE_COLORS + + AVAILABLE_COLORS=( + $black + $red + $green + $yellow + $blue + $purple + $cyan + $white + $orange + $bold_black + $bold_red + $bold_green + $bold_yellow + $bold_blue + $bold_purple + $bold_cyan + $bold_white + $bold_orange + ) + # Uncomment these to allow underlines: + #$underline_black + #$underline_red + #$underline_green + #$underline_yellow + #$underline_blue + #$underline_purple + #$underline_cyan + #$underline_white + #$underline_orange + #) + + USERNAME_COLOR=${AVAILABLE_COLORS[$RANDOM % ${#AVAILABLE_COLORS[@]} ]} + HOSTNAME_COLOR=${AVAILABLE_COLORS[$RANDOM % ${#AVAILABLE_COLORS[@]} ]} + TIME_COLOR=${AVAILABLE_COLORS[$RANDOM % ${#AVAILABLE_COLORS[@]} ]} + PATH_COLOR=${AVAILABLE_COLORS[$RANDOM % ${#AVAILABLE_COLORS[@]} ]} + + echo "$USERNAME_COLOR,$HOSTNAME_COLOR,$TIME_COLOR,$PATH_COLOR," > $RANDOM_COLOR_FILE +} + +if [ -f $RANDOM_COLOR_FILE ]; +then + # read the colors already stored in the file + IFS=',' read -ra COLORS < $RANDOM_COLOR_FILE + USERNAME_COLOR=${COLORS[0]} + HOSTNAME_COLOR=${COLORS[1]} + TIME_COLOR=${COLORS[2]} + PATH_COLOR=${COLORS[3]} +else + # No colors stored yet. Generate them! + randomize_nwinkler + + echo + echo "Looks like you are using the nwinkler_random_color bashit theme for the first time." + echo "Random colors have been generated to be used in your prompt." + echo "If you don't like them, run the command:" + echo " randomize_nwinkler" + echo "until you get a combination that you like." + echo +fi + +PROMPT_END_CLEAN="${green}→${reset_color}" +PROMPT_END_DIRTY="${red}→${reset_color}" + +function prompt_end() { + echo -e "$PROMPT_END" +} + +prompt_setter() { + local exit_status=$? + if [[ $exit_status -eq 0 ]]; then PROMPT_END=$PROMPT_END_CLEAN + else PROMPT_END=$PROMPT_END_DIRTY + fi + # Save history + history -a + history -c + history -r + PS1="(${TIME_COLOR}\t${reset_color}) $(scm_char) [${USERNAME_COLOR}\u${reset_color}@${HOSTNAME_COLOR}\H${reset_color}] ${PATH_COLOR}\w${reset_color}$(scm_prompt_info) ${reset_color}\n$(prompt_end) " + PS2='> ' + PS4='+ ' +} + +PROMPT_COMMAND=prompt_setter + +SCM_THEME_PROMPT_DIRTY=" ${bold_red}✗${normal}" +SCM_THEME_PROMPT_CLEAN=" ${bold_green}✓${normal}" +SCM_THEME_PROMPT_PREFIX=" (" +SCM_THEME_PROMPT_SUFFIX=")" +RVM_THEME_PROMPT_PREFIX=" (" +RVM_THEME_PROMPT_SUFFIX=")" diff --git a/themes/nwinkler_random_colors/screenshot.png b/themes/nwinkler_random_colors/screenshot.png new file mode 100644 index 00000000..e8cc75d8 Binary files /dev/null and b/themes/nwinkler_random_colors/screenshot.png differ