Zsh prompt updates
I wanted some git
information in the prompt I currently have.
While thinking and googling about this, a quote on
Bart’s log got me thinking. I don’t need
to see my current host, nor do I need to see my current user name.
I always login under my own account (miekg
) and if I do change
accounts, I probably will be forced to use bash
. So showing the current user name
is quite useless.
Showing the host you are logged into is also only worth showing
when you ssh
-ing to a remote host.
So my default prompt now only shows the prompt (%
) on the left and
the current directory (~
) on the right, like this:
Very clean.
When logging into a remote system, the hostname of the system
is added (in grey) to the right side of the prompt, like so:
(I’m ssh
-ing to my other host called elektron
, which is
electron in Dutch)
The code to do this:
[[ -n "$SSH_CLIENT" ]] && __ZH=$HOST
if $SSH_CLIENT
is set, set $__ZH
to the current hostname, then use
$__ZH
in your prompt.
Next I wanted some git
support in my prompt, there are
lots of sites
which can help you. I stole code from all of them :)
There was however one annoying thing. I store my entire home directory
in git
, but I don’t want to see git information about it all the time.
So I created the following function to detect if my the current git
repository was the one from my home directory:
zsh_git_home() {
# I have my homedir in git, quite annoying to see 'master' all the time
git_dir=$(git rev-parse --git-dir 2> /dev/null)
[[ -z "$git_dir" ]] && return 0
[[ $(realpath "$git_dir") == $HOME/.git ]] && return 0
return 1
}
If I enter a git
repository the current branch is put into the prompt
at the left side, here I enter a repository with the master
branch.
(Note: as the window is very small my path is truncated)
Code is from Bart.
One other thing I added is that if the working directory is not clean (i.e. you have made some changes) an exclamation mark is added. Like so:
The code for this can be found on the sites listed above.
Of course my other prompt features still work. Here is a shot
with one background job. Notice that ^Z
suspends this program
and leaves an exit code of 20, which is shown in red:
I’m still figuring out ways to get even more colors in the prompt :)