I have not been deep-diving into any shell, usually just used the default provided by various distributions, however I thought it was time to dive in at the semi-deep end and try to get an understanding of how it works and learn something. For this I selected zsh since i like how completions works, it was also the default in the install media i used. If one would be interested in another shell there are quite a few.1

Holy crap there is a lot of functions / options and stuff to a Z-shell. So the swim will not be that long.

autoload -Uz compinit promptinit
compinit
promptinit
 
prompt grml
 
bindkey -v
 
HISTSIZE=1000
SAVEHIST=1000
HISTFILE=~/.zsh_history
 
setopt SHARE_HISTORY
setopt APPEND_HISTORY
setopt HIST_IGNORE_DUPS

if [[ -r ~/.aliasrc ]]; then
	. ~/.aliasrc
fi

For reference and learning I will go through each line in the config and explain what it do.

autoload -Uz compinit promptinit

The autoload directive marks the function compinit and promptinit as undefined2 and then searches the fpath for the functions, rather than the PATH variable for executables. The -U options suppresses any alias expansion3 and the -z marks the function to be auto loaded using zsh style

echo $FPATH will print the directories listed in that environment variable

compinit will execute the script /usr/share/zsh/functions/Completion/compinit

promptinit will execute the script /usr/share/zsh/functions/Prompts/promptinit

prompt grml load the grml theme for prompt, worth noting since this was not auto loaded its and executable. There are a number of available prompts, you can view how the look by running prompt -p. If one would be really interested in tweaking the prompt, one could edit the $PS1 variable for the default prompt or the additional 3 prompts.

bindkey -v will put zsh into vi-mode however it is worth noting that you will start in insert mode, so you will have to press ‘ESC’ to be able to enter vi commands

HISTSIZE=1000, this option will tell zsh the number (in this case 1000) of lines to load from history when a shell is loaded. SAVEHIST=1000, this option tells the shell how many lines to store in history when exiting HISTFILE=~/.zsh_history tell zsh where to store history.

SHARE_HISTORY Causes shell to import history-commands from history file, it will also append history as typed to history file.4 HIST_IGNORE_DUPS This command tells the shell not to store duplicates of commands.4

It is probably nice to have an alias file, .aliassrc to have a clean .zshrc

  if [[ -r ~/.aliasrc ]]; then
    . ~/.aliasrc
  fi

Note . before ~/.aliasrc is the same as source (Thanks for this)5