# 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](http://www.jukie.net/~bart) 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:

![Default zsh prompt](/images/2009/default-prompt.png)

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)

![Remote zsh prompt](/images/2009/remote-prompt.png)

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](http://github.com/jcorbin/zsh-git/blob/fca801c9978e17d7fba536e5461ade4d1238a046/functions/zgitinit)
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)

![Branch zsh prompt](/images/2009/branch-prompt.png)

Code is from [Bart](http://www.jukie.net/~bart/blog/zsh-git-branch).

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:

![Branch change zsh prompt](/images/2009/branch-change-prompt.png)

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:

![Showing all](/images/2009/all-prompt.png)

I'm still figuring out ways to get even *more* colors in the prompt :)

