{
  config,
  lib,
  pkgs,
}: ''
  # The following lines were added by compinstall

  zstyle ':completion:*' auto-description 'specify: %d'
  zstyle ':completion:*' completer _expand _complete _ignored _correct _approximate
  zstyle ':completion:*' expand prefix suffix
  zstyle ':completion:*' ignore-parents parent
  zstyle ':completion:*' insert-unambiguous true
  zstyle ':completion:*' list-colors ""
  zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s
  zstyle ':completion:*' list-suffixes true
  zstyle ':completion:*' matcher-list "" 'm:{[:lower:]}={[:upper:]} m:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'r:|[._-]=** r:|=** l:|=*'
  zstyle ':completion:*' menu select=1
  zstyle ':completion:*' original true
  zstyle ':completion:*' preserve-prefix '//[^/]##/'
  zstyle ':completion:*' verbose true
  zstyle :compinstall filename '/home/fabian/.zshrc'

  autoload -Uz compinit
  compinit
  # End of lines added by compinstall
  # Lines configured by zsh-newuser-install
  HISTFILE=~/.histfile
  HISTSIZE=1000
  SAVEHIST=1000
  setopt autocd extendedglob nomatch
  unsetopt beep notify
  bindkey -v
  # End of lines configured by zsh-newuser-install

  # Prompt
  setopt prompt_subst
  autoload -Uz vcs_info
  precmd_vcs_info() { vcs_info }
  precmd_functions+=( precmd_vcs_info )

  zstyle ':vcs_info:*' disable bzr cdv darcs mtn svk tla cvs svn
  zstyle ':vcs_info:*' enable git
  zstyle ':vcs_info:git+set-message:*' hooks format_msg

  function +vi-format_msg {
  local branch=$(git branch --show-current)

  if [[ -z "$branch" ]] ; then
  	branch=$(git rev-parse --short HEAD)
  fi

  local color=""

  if [[ -z $(git status --porcelain 2>/dev/null) ]];
  then
  	color="%F{blue}"
  fi

  if [[ $(git status --porcelain 2>/dev/null | grep "^A \|^M " | wc -l) > 0 ]];
  	then
  	color="%F{green}"
  fi

  if [[ $(git status --porcelain 2>/dev/null | grep "^??\|^AM\|^.D" | wc -l) > 0 ]]
  then
  	color="%F{red}"
  fi

  ret=1
  hook_com[message]="$color($branch)%f "

  return 0
  }

  PROMPT='${config.local.services.zsh.prompt}'

  # Aliases and binds
  alias ls='ls --color -F'
  alias l='ls --color -FhAltr'
  alias x='killall --ignore-case --user=$(whoami) --interactive'
  alias sc='${lib.getExe pkgs.maim} -s -u | ${lib.getExe pkgs.xclip} -selection clipboard -t image/png -i'
  alias tree='tree -CF'
  alias lock="betterlockscreen -l"
  alias nightmode="${lib.getExe pkgs.redshift} -P -O 1000"
  alias lightmode="${lib.getExe pkgs.redshift} -x="
  alias inbox="echo >> $HOME/gtd/inbox"
  alias nixoide="nix repl '<nixpkgs>'"
  alias vps="ssh -A vps"
  bindkey -e
  bindkey "^[[1;5D" backward-word
  bindkey "^[[1;5C" forward-word
  bindkey "\e[3~" delete-char

  function use() {
    local pkg
    pkg="$1"
    shift
    echo "nix shell nixpkgs#$pkg"
    nix shell "nixpkgs#$pkg" "$@"
  }

  function unuse() {
    local pkg
    pkg="$1"
    shift
    echo "nix shell unstable#$pkg --impure"
    nix shell "unstable#$pkg" "$@"  --impure
  }

  function spawn () {
    if [ ! -x "$(command -v $1)" ]
      then
         echo "spawn: no such program: $1" >&2
         return 1
     fi
     $@ > /dev/null 0>&1 2>&1 &
     disown
  }

  autoload -Uz up-line-or-beginning-search
  zle -N up-line-or-beginning-search
  autoload -Uz down-line-or-beginning-search
  zle -N down-line-or-beginning-search
  bindkey '\eOA' up-line-or-beginning-search
  bindkey '\e[A' up-line-or-beginning-search
  bindkey '\eOB' down-line-or-beginning-search
  bindkey '\e[B' down-line-or-beginning-search

  # Env
  export TERM=xterm-256color
  export EDITOR=nvim
  export VISUAL=nvim
  export PATH="$PATH:$HOME/.local/bin:$HOME/.cargo/bin"
  export NIXPKGS_ALLOW_UNFREE=1
''