This gist aims to facilitate the switching from bash
to zsh
as our defaut shell.
We will be using oh-my-zsh with the powerful theme: Powerlevel9k. You will find all the links below.
This process applies mainly for Arch Linux, but can be setup for any other distro (in theory :)).
I'm also using Gnome Terminal and pacaur as package manager.
- Zsh: https://wiki.archlinux.org/index.php/zsh
- Default shell: https://wiki.archlinux.org/index.php/Command-line_shell#Changing_your_default_shell
- Oh-my-zsh: https://ohmyz.sh/
- Oh-my-zsh plugins: https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins
- Powerlevel9k theme: https://github.com/bhilburn/powerlevel9k
- Nerd Fonts: https://nerdfonts.com/
pacaur -S zsh oh-my-zsh-git
chsh -l
chsh -s /usr/bin/zsh
$ sudo git clone https://github.com/bhilburn/powerlevel9k.git /usr/share/oh-my-zsh/themes/powerlevel9k
pacaur -S nerd-fonts-hack
You will have to move some content from your files .bash_profile
and .bashrc
to .zshrc
and .zprofile
respectively.
# Path to your oh-my-zsh installation.
ZSH=/usr/share/oh-my-zsh/
export DEFAULT_USER="fernando"
export TERM="xterm-256color"
export ZSH=/usr/share/oh-my-zsh
ZSH_THEME="powerlevel9k/powerlevel9k"
POWERLEVEL9K_MODE="nerdfont-complete"
source $ZSH/themes/powerlevel9k/powerlevel9k.zsh-theme
POWERLEVEL9K_FOLDER_ICON=""
POWERLEVEL9K_HOME_SUB_ICON="$(print_icon "HOME_ICON")"
POWERLEVEL9K_DIR_PATH_SEPARATOR=" $(print_icon "LEFT_SUBSEGMENT_SEPARATOR") "
POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=0
POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true
POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND='black'
POWERLEVEL9K_BACKGROUND_JOBS_BACKGROUND='178'
POWERLEVEL9K_NVM_BACKGROUND="238"
POWERLEVEL9K_NVM_FOREGROUND="green"
POWERLEVEL9K_CONTEXT_DEFAULT_FOREGROUND="blue"
POWERLEVEL9K_DIR_WRITABLE_FORBIDDEN_FOREGROUND="015"
POWERLEVEL9K_TIME_BACKGROUND='255'
#POWERLEVEL9K_COMMAND_TIME_FOREGROUND='gray'
POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND='245'
POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND='black'
POWERLEVEL9K_TIME_FORMAT="%D{%H:%M}"
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(root_indicator context dir dir_writable vcs)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status background_jobs command_execution_time time)
POWERLEVEL9K_SHOW_CHANGESET=true
HYPHEN_INSENSITIVE="true"
COMPLETION_WAITING_DOTS="true"
# /!\ do not use with zsh-autosuggestions
plugins=(archlinux
asdf
bundler
docker
jsontools
vscode
web-search
k
tig
gitfast
colored-man-pages
colorize
command-not-found
cp
dirhistory
autojump
sudo
zsh-syntax-highlighting)
# /!\ zsh-syntax-highlighting and then zsh-autosuggestions must be at the end
source $ZSH/oh-my-zsh.sh
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern cursor)
typeset -gA ZSH_HIGHLIGHT_STYLES
ZSH_HIGHLIGHT_STYLES[cursor]='bold'
ZSH_HIGHLIGHT_STYLES[alias]='fg=green,bold'
ZSH_HIGHLIGHT_STYLES[suffix-alias]='fg=green,bold'
ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold'
ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold'
ZSH_HIGHLIGHT_STYLES[command]='fg=green,bold'
ZSH_HIGHLIGHT_STYLES[precommand]='fg=green,bold'
ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green,bold'
rule () {
print -Pn '%F{blue}'
local columns=$(tput cols)
for ((i=1; i<=columns; i++)); do
printf "\u2588"
done
print -P '%f'
}
function _my_clear() {
echo
rule
zle clear-screen
}
zle -N _my_clear
bindkey '^l' _my_clear
# Ctrl-O opens zsh at the current location, and on exit, cd into ranger's last location.
ranger-cd() {
tempfile=$(mktemp)
ranger --choosedir="$tempfile" "${@:-$(pwd)}" < $TTY
test -f "$tempfile" &&
if [ "$(cat -- "$tempfile")" != "$(echo -n `pwd`)" ]; then
cd -- "$(cat "$tempfile")"
fi
rm -f -- "$tempfile"
# hacky way of transferring over previous command and updating the screen
VISUAL=true zle edit-command-line
}
zle -N ranger-cd
bindkey '^o' ranger-cd
# Uncomment the following line to disable bi-weekly auto-update checks.
DISABLE_AUTO_UPDATE="true"
ZSH_CACHE_DIR=$HOME/.cache/oh-my-zsh
if [[ ! -d $ZSH_CACHE_DIR ]]; then
mkdir $ZSH_CACHE_DIR
fi
source $ZSH/oh-my-zsh.sh
plugins=(archlinux asdf bundler docker jsontools vscode web-search k tig gitfast colored-man colorize
command-not-found cp dirhistory autojump sudo zsh-syntax-highlighting)
- Install GNOME Tweaks in case you have GNOME
- Set the system monospace font to "Hack Nerd Font Regular"
- In the Terminal's Font Preference, I leave the Custom Font option unchecked, .i.e use system font.