]> src.twobees.de Git - dotfiles.git/blob - stow/oh-my-zsh/.oh-my-zsh/themes/emotty.zsh-theme
...
[dotfiles.git] / stow / oh-my-zsh / .oh-my-zsh / themes / emotty.zsh-theme
1 #!/usr/bin/env zsh
2 # ------------------------------------------------------------------------------
3 #          FILE: emotty.zsh-theme
4 #   DESCRIPTION: A varying emoji based theme
5 #        AUTHOR: Alexis Hildebrandt (afh[at]surryhill.net)
6 #       VERSION: 1.0.0
7 #       DEPENDS: emotty plugin
8 #    RECOMMENDS: Hasklig font
9 #
10 # This theme shows a different emoji for each tty at the main prompt.
11 #
12 # There are pre-defined different emoji sets to choose from, e.g.:
13 # emoji, stellar, floral, zodiac, love (see emotty plugin).
14
15 # To choose a different emotty set than the default (emoji)
16 # % export emotty_set=nature
17 #
18 # For the superuser (root) this theme shows a designated indicator
19 # and switches the foreground color to red
20 # (see root_prompt variable, default: skull).
21 # But you are using sudo (8) instead of designated a root shell, right‽
22 #
23 # When logged in via SSH the main prompt also shows the user- and hostname.
24 #
25 # The exit status of the last failed command is displayed in the window title
26 # along with an indicator (see warn_glyph variable, default: collision symbol).
27 # To clear it just run: $NULL, true or :
28 #
29 # The right prompt shows the current working directory (3 levels up) in cyan.
30 #
31 # When in a git repository the main prompt shows the current branch name
32 # with a branch indicator in yellow
33 # (see vcs_branch_glyph variable, default: Hasklig branch glyph).
34 #
35 # If there are modified files the prompt switches to red and shows an unstaged
36 # indicator (see vcs_unstaged_glyph variable, default: circled letter M).
37 #
38 # If there are staged files the prompt switches to green and shows an staged
39 # indicator (see vcs_staged_glyph variable, default: high voltage sign).
40 #
41 # In a git repository the right prompt shows the repository name in bold and
42 # prepends the current working directory subpath within the repository.
43 #
44 # When git currently performs an action such as merge or rebase, the action is
45 # displayed in red instead of the branch name and a special action indicator
46 # is shown (see vcs_action_glyph variable, default: chevron).
47 # ------------------------------------------------------------------------------
48
49 (( ${+functions[emotty]} )) || {
50   echo "error: the emotty theme requires the emotty plugin" >&2
51   return 1
52 }
53
54 (( ${+emoji} )) || {
55   echo "error: the emotty theme requires the emoji plugin" >&2
56   return 1
57 }
58
59 user_prompt="$(emotty)"
60 root_prompt="$emoji[skull]"
61 warn_prompt="$emoji[collision_symbol]"
62
63 vcs_unstaged_glyph="%{$emoji[circled_latin_capital_letter_m]$emoji2[emoji_style] %2G%}"
64 vcs_staged_glyph="%{$emoji[high_voltage_sign]%2G%}"
65 vcs_branch_glyph=$'\Ue0a0' # 
66 vcs_action_glyph=$'\U276f' # ❯
67
68 red="$FG[001]"
69 yellow="$FG[003]"
70 green="$FG[002]"
71 cyan="$FG[014]"
72
73 prompt_glyph="%{%(#.${root_prompt}.${user_prompt}) %2G%}"
74
75 # Uncomment the next line if you also like to see the warn_prompt in the prompt on the right.
76 #last_command_failed="%(?.. %F{red}%1{${warn_prompt} %1G%}%?%f)"
77
78
79 setopt promptsubst
80
81 # Workaround for zsh 5.2 release (kudos to @timothybasanov)
82 autoload +X VCS_INFO_nvcsformats
83 functions[VCS_INFO_nvcsformats]=${functions[VCS_INFO_nvcsformats]/local -a msgs/}
84
85 autoload -U add-zsh-hook
86 autoload -Uz vcs_info
87
88 zstyle ':vcs_info:*' enable git #hg svn cvs
89 zstyle ':vcs_info:*' get-revision false
90 zstyle ':vcs_info:*' check-for-changes true
91 zstyle ':vcs_info:git:*' unstagedstr "${red}${vcs_unstaged_glyph}"
92 zstyle ':vcs_info:*' stagedstr "${green}${vcs_staged_glyph}"
93
94 # %(K|F){color} set (back|fore)ground color
95 # %(k|f) reset (back|fore)ground color
96 zstyle ':vcs_info:*' max-exports 3
97 zstyle ':vcs_info:*' nvcsformats "${prompt_glyph}" '%3~' ''
98 zstyle ':vcs_info:*' formats "${yellow}%u%c%b${vcs_branch_glyph}%f" '%S|' "$FX[bold]%r$FX[no-bold]" 
99 zstyle ':vcs_info:*' actionformats "${red}%K{white}%a${vcs_action_glyph}%k%f" '%S|' "$FX[bold]%r$FX[no-bold]"
100
101 red_if_root="%(!.%F{red}.)"
102 sshuser_on_host="${SSH_TTY:+%(!.$red.$yellow)%n@%m$reset_color}"
103
104 PROMPT='${sshuser_on_host}${vcs_info_msg_0_}${red_if_root} '
105 RPROMPT='${cyan}${vcs_info_msg_1_##.|}${vcs_info_msg_2_}%f${last_command_failed}'
106
107 emotty_title() {
108   title "${${?/[^0]*/$warn_prompt $?}/0/${prompt_glyph}}"
109 }
110 add-zsh-hook precmd emotty_title
111 add-zsh-hook precmd vcs_info
112
113 # vim:ft=zsh ts=2 sw=2 sts=2