diff --git a/lib/git.zsh b/lib/git.zsh index fb4ad8ca6..2ac79834f 100644 --- a/lib/git.zsh +++ b/lib/git.zsh @@ -1,7 +1,12 @@ # get the name of the branch we are on function git_prompt_info() { ref=$(git symbolic-ref HEAD 2> /dev/null) || return - echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX" + if parse_git_dirty; then + INFO="$ZSH_THEME_GIT_PROMPT_DIRTY_PREFIX${ref#refs/heads/}$ZSH_THEME_GIT_PROMPT_DIRTY" + else + INFO="$ZSH_THEME_GIT_PROMPT_CLEAN_PREFIX${ref#refs/heads/}$ZSH_THEME_GIT_PROMPT_CLEAN" + fi + echo "$ZSH_THEME_GIT_PROMPT_PREFIX$INFO$ZSH_THEME_GIT_PROMPT_SUFFIX" } @@ -11,11 +16,7 @@ parse_git_dirty() { if [[ $POST_1_7_2_GIT -gt 0 ]]; then SUBMODULE_SYNTAX="--ignore-submodules=dirty" fi - if [[ -n $(git status -s ${SUBMODULE_SYNTAX} 2> /dev/null) ]]; then - echo "$ZSH_THEME_GIT_PROMPT_DIRTY" - else - echo "$ZSH_THEME_GIT_PROMPT_CLEAN" - fi + [[ -n $(git status -s ${SUBMODULE_SYNTAX} 2> /dev/null) ]] && return 0 || return 1 } diff --git a/lib/theme-and-appearance.zsh b/lib/theme-and-appearance.zsh index aec67721a..80830e3be 100644 --- a/lib/theme-and-appearance.zsh +++ b/lib/theme-and-appearance.zsh @@ -28,7 +28,9 @@ PS1="%n@%m:%~%# " # git theming default: Variables for theming the git info prompt ZSH_THEME_GIT_PROMPT_PREFIX="git:(" # Prefix at the very beginning of the prompt, before the branch name ZSH_THEME_GIT_PROMPT_SUFFIX=")" # At the very end of the prompt +ZSH_THEME_GIT_PROMPT_DIRTY_PREFIX="" # Text to display if the branch is dirty ZSH_THEME_GIT_PROMPT_DIRTY="*" # Text to display if the branch is dirty +ZSH_THEME_GIT_PROMPT_CLEAN_PREFIX="" # Text to display if the branch is clean ZSH_THEME_GIT_PROMPT_CLEAN="" # Text to display if the branch is clean # Setup the prompt with pretty colors diff --git a/plugins/gpg-agent/gpg-agent.plugin.zsh b/plugins/gpg-agent/gpg-agent.plugin.zsh index 8cc71fd57..059973391 100644 --- a/plugins/gpg-agent/gpg-agent.plugin.zsh +++ b/plugins/gpg-agent/gpg-agent.plugin.zsh @@ -8,19 +8,39 @@ function start_agent { . ${GPG_ENV} > /dev/null } +if [[ -n $SSH_AUTH_SOCK && -n $SSH_CONNECTION ]]; then + case $GPG_USE_FORWARDED_SSH_AGENT in + 'always') + FOWARDED_AGENT=1 + ;; + 'never') + ;; + *) + echo "Use forwarded ssh-agent?(y/N) " + read + [[ $REPLY == 'y' ]] && FOWARDED_AGENT=1 + esac + if [[ -n $FOWARDED_AGENT ]]; then + SSH_AUTH_SOCK_TMP=$SSH_AUTH_SOCK + fi +fi + # Source GPG agent settings, if applicable if [ -f "${GPG_ENV}" ]; then . ${GPG_ENV} > /dev/null - ps -ef | grep ${SSH_AGENT_PID} | grep gpg-agent > /dev/null || { + command ps -ef | grep ${SSH_AGENT_PID} | grep gpg-agent > /dev/null || { start_agent; } else start_agent; fi +[[ -n $FOWARDED_AGENT ]] && SSH_AUTH_SOCK=$SSH_AUTH_SOCK_TMP + export GPG_AGENT_INFO export SSH_AUTH_SOCK export SSH_AGENT_PID + GPG_TTY=$(tty) export GPG_TTY diff --git a/themes/nc.zsh-theme b/themes/nc.zsh-theme new file mode 100644 index 000000000..259f28412 --- /dev/null +++ b/themes/nc.zsh-theme @@ -0,0 +1,40 @@ +ps1='%S%B[%n@%m]%s%b %! %3(~|~/%B...%b/%2~|%~)$(git_prompt_info)%B%F{green}]%f%b ' +ps2='%_%B%F{green}>%f%b ' + +PROMPT=$ps1 +PROMPT2=$ps2 +RPS1='%F{yellow}$(git_prompt_status)%f %(?|%F{green}%?%f|%F{yellow}%?%f)(%j) %T' + +function zle-keymap-select zle-line-init { + if [[ $KEYMAP == 'vicmd' ]] { + PROMPT=${ps1//green/red} + PROMPT2=${ps2//green/red} + } else { + PROMPT=$ps1 + PROMPT2=$ps2 + } + zle reset-prompt +} +function zle-line-finish { + PROMPT=$ps1 + PROMPT2=$ps2 + zle reset-prompt +} + +zle -N zle-line-init +zle -N zle-line-finish +zle -N zle-keymap-select + +ZSH_THEME_GIT_PROMPT_PREFIX=" git:" +ZSH_THEME_GIT_PROMPT_SUFFIX="" +ZSH_THEME_GIT_PROMPT_CLEAN_PREFIX="%{$fg[green]%}(" +ZSH_THEME_GIT_PROMPT_DIRTY_PREFIX="%{$fg[yellow]%}(" +ZSH_THEME_GIT_PROMPT_CLEAN=")%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_DIRTY=")%{$reset_color%}" + +ZSH_THEME_GIT_PROMPT_UNTRACKED="?" +ZSH_THEME_GIT_PROMPT_ADDED="+" +ZSH_THEME_GIT_PROMPT_MODIFIED="!" +ZSH_THEME_GIT_PROMPT_RENAMED="R" +ZSH_THEME_GIT_PROMPT_DELETED="-" +ZSH_THEME_GIT_PROMPT_UNMERGED="U"