Last active
October 22, 2024 21:19
-
-
Save nickistre/34c27e4a4f2f9c6a93091a562eb95d5d to your computer and use it in GitHub Desktop.
ZSH Setup Examples
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## Path section | |
# Set $PATH if ~/.local/bin exist | |
if [ -d "$HOME/.local/bin" ]; then | |
export PATH=$HOME/.local/bin:$PATH | |
fi | |
eval "$(starship init zsh)" | |
function set_win_title(){ | |
echo -ne "\033]0; $USER@$HOST:${PWD/$HOME/~} \007" | |
} | |
precmd_functions+=(set_win_title) | |
## Plugins section: Enable fish style features | |
# Use syntax highlighting | |
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh | |
# Use autosuggestion | |
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh | |
# Use history substring search | |
source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh | |
# Use fzf | |
source /usr/share/fzf/key-bindings.zsh | |
source /usr/share/fzf/completion.zsh | |
# Arch Linux command-not-found support, you must have package pkgfile installed | |
# https://wiki.archlinux.org/index.php/Pkgfile#.22Command_not_found.22_hook | |
[[ -e /usr/share/doc/pkgfile/command-not-found.zsh ]] && source /usr/share/doc/pkgfile/command-not-found.zsh | |
# Advanced command-not-found hook | |
[[ -e /usr/share/doc/find-the-command/ftc.zsh ]] && source /usr/share/doc/find-the-command/ftc.zsh | |
## Options section | |
setopt correct # Auto correct mistakes | |
setopt extendedglob # Extended globbing. Allows using regular expressions with * | |
setopt nocaseglob # Case insensitive globbing | |
setopt rcexpandparam # Array expension with parameters | |
setopt nocheckjobs # Don't warn about running processes when exiting | |
setopt numericglobsort # Sort filenames numerically when it makes sense | |
setopt nobeep # No beep | |
setopt appendhistory # Immediately append history instead of overwriting | |
setopt histignorealldups # If a new command is a duplicate, remove the older one | |
setopt autocd # if only directory path is entered, cd there. | |
setopt auto_pushd | |
setopt pushd_ignore_dups | |
setopt pushdminus | |
# Completion. | |
autoload -Uz compinit | |
compinit | |
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # Case insensitive tab completion | |
zstyle ':completion:*' rehash true # automatically find new executables in path | |
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" # Colored completion (different colors for dirs/files/etc) | |
zstyle ':completion:*' completer _expand _complete _ignored _approximate | |
zstyle ':completion:*' menu select | |
zstyle ':completion:*' select-prompt '%SScrolling active: current selection at %p%s' | |
zstyle ':completion:*:descriptions' format '%U%F{cyan}%d%f%u' | |
# Speed up completions | |
zstyle ':completion:*' accept-exact '*(N)' | |
zstyle ':completion:*' use-cache on | |
zstyle ':completion:*' cache-path ~/.cache/zcache | |
# automatically load bash completion functions | |
autoload -U +X bashcompinit && bashcompinit | |
HISTFILE=~/.zhistory | |
HISTSIZE=50000 | |
SAVEHIST=10000 | |
## Keys | |
# Use emacs key bindings | |
bindkey -e | |
# [PageUp] - Up a line of history | |
if [[ -n "${terminfo[kpp]}" ]]; then | |
bindkey -M emacs "${terminfo[kpp]}" up-line-or-history | |
bindkey -M viins "${terminfo[kpp]}" up-line-or-history | |
bindkey -M vicmd "${terminfo[kpp]}" up-line-or-history | |
fi | |
# [PageDown] - Down a line of history | |
if [[ -n "${terminfo[knp]}" ]]; then | |
bindkey -M emacs "${terminfo[knp]}" down-line-or-history | |
bindkey -M viins "${terminfo[knp]}" down-line-or-history | |
bindkey -M vicmd "${terminfo[knp]}" down-line-or-history | |
fi | |
# Start typing + [Up-Arrow] - fuzzy find history forward | |
if [[ -n "${terminfo[kcuu1]}" ]]; then | |
autoload -U up-line-or-beginning-search | |
zle -N up-line-or-beginning-search | |
bindkey -M emacs "${terminfo[kcuu1]}" up-line-or-beginning-search | |
bindkey -M viins "${terminfo[kcuu1]}" up-line-or-beginning-search | |
bindkey -M vicmd "${terminfo[kcuu1]}" up-line-or-beginning-search | |
fi | |
# Start typing + [Down-Arrow] - fuzzy find history backward | |
if [[ -n "${terminfo[kcud1]}" ]]; then | |
autoload -U down-line-or-beginning-search | |
zle -N down-line-or-beginning-search | |
bindkey -M emacs "${terminfo[kcud1]}" down-line-or-beginning-search | |
bindkey -M viins "${terminfo[kcud1]}" down-line-or-beginning-search | |
bindkey -M vicmd "${terminfo[kcud1]}" down-line-or-beginning-search | |
fi | |
# [Home] - Go to beginning of line | |
if [[ -n "${terminfo[khome]}" ]]; then | |
bindkey -M emacs "${terminfo[khome]}" beginning-of-line | |
bindkey -M viins "${terminfo[khome]}" beginning-of-line | |
bindkey -M vicmd "${terminfo[khome]}" beginning-of-line | |
fi | |
# [End] - Go to end of line | |
if [[ -n "${terminfo[kend]}" ]]; then | |
bindkey -M emacs "${terminfo[kend]}" end-of-line | |
bindkey -M viins "${terminfo[kend]}" end-of-line | |
bindkey -M vicmd "${terminfo[kend]}" end-of-line | |
fi | |
# [Shift-Tab] - move through the completion menu backwards | |
if [[ -n "${terminfo[kcbt]}" ]]; then | |
bindkey -M emacs "${terminfo[kcbt]}" reverse-menu-complete | |
bindkey -M viins "${terminfo[kcbt]}" reverse-menu-complete | |
bindkey -M vicmd "${terminfo[kcbt]}" reverse-menu-complete | |
fi | |
# [Backspace] - delete backward | |
bindkey -M emacs '^?' backward-delete-char | |
bindkey -M viins '^?' backward-delete-char | |
bindkey -M vicmd '^?' backward-delete-char | |
# [Delete] - delete forward | |
if [[ -n "${terminfo[kdch1]}" ]]; then | |
bindkey -M emacs "${terminfo[kdch1]}" delete-char | |
bindkey -M viins "${terminfo[kdch1]}" delete-char | |
bindkey -M vicmd "${terminfo[kdch1]}" delete-char | |
else | |
bindkey -M emacs "^[[3~" delete-char | |
bindkey -M viins "^[[3~" delete-char | |
bindkey -M vicmd "^[[3~" delete-char | |
bindkey -M emacs "^[3;5~" delete-char | |
bindkey -M viins "^[3;5~" delete-char | |
bindkey -M vicmd "^[3;5~" delete-char | |
fi | |
typeset -g -A key | |
if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then | |
autoload -Uz add-zle-hook-widget | |
function zle_application_mode_start { echoti smkx } | |
function zle_application_mode_stop { echoti rmkx } | |
add-zle-hook-widget -Uz zle-line-init zle_application_mode_start | |
add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop | |
fi | |
# Control Left - go back a word | |
key[Control-Left]="${terminfo[kLFT5]}" | |
if [[ -n "${key[Control-Left]}" ]]; then | |
bindkey -M emacs "${key[Control-Left]}" backward-word | |
bindkey -M viins "${key[Control-Left]}" backward-word | |
bindkey -M vicmd "${key[Control-Left]}" backward-word | |
fi | |
# Control Left - go forward a word | |
key[Control-Right]="${terminfo[kRIT5]}" | |
if [[ -n "${key[Control-Right]}" ]]; then | |
bindkey -M emacs "${key[Control-Right]}" forward-word | |
bindkey -M viins "${key[Control-Right]}" forward-word | |
bindkey -M vicmd "${key[Control-Right]}" forward-word | |
fi | |
# Alt Left - go back a word | |
key[Alt-Left]="${terminfo[kLFT3]}" | |
if [[ -n "${key[Alt-Left]}" ]]; then | |
bindkey -M emacs "${key[Alt-Left]}" backward-word | |
bindkey -M viins "${key[Alt-Left]}" backward-word | |
bindkey -M vicmd "${key[Alt-Left]}" backward-word | |
fi | |
# Control Right - go forward a word | |
key[Alt-Right]="${terminfo[kRIT3]}" | |
if [[ -n "${key[Alt-Right]}" ]]; then | |
bindkey -M emacs "${key[Alt-Right]}" forward-word | |
bindkey -M viins "${key[Alt-Right]}" forward-word | |
bindkey -M vicmd "${key[Alt-Right]}" forward-word | |
fi | |
## Useful aliases | |
alias grubup="sudo update-grub" | |
alias fixpacman="sudo rm /var/lib/pacman/db.lck" | |
alias tarnow='tar -acf ' | |
alias untar='tar -zxvf ' | |
alias wget='wget -c ' | |
alias rmpkg="sudo pacman -Rdd" | |
alias psmem='ps auxf | sort -nr -k 4' | |
alias psmem10='ps auxf | sort -nr -k 4 | head -10' | |
alias ..='cd ..' | |
alias ...='cd ../..' | |
alias ....='cd ../../..' | |
alias .....='cd ../../../..' | |
alias ......='cd ../../../../..' | |
alias dir='dir --color=auto' | |
alias vdir='vdir --color=auto' | |
alias grep='grep --color=auto' | |
alias fgrep='fgrep --color=auto' | |
alias egrep='egrep --color=auto' | |
alias hw='hwinfo --short' # Hardware Info | |
alias big="expac -H M '%m\t%n' | sort -h | nl" # Sort installed packages according to size in MB (expac must be installed) | |
alias gitpkg='pacman -Q | grep -i "\-git" | wc -l' # List amount of -git packages | |
# Get fastest mirrors | |
alias mirror="sudo reflector -f 30 -l 30 --number 10 --verbose --save /etc/pacman.d/mirrorlist" | |
alias mirrord="sudo reflector --latest 50 --number 20 --sort delay --save /etc/pacman.d/mirrorlist" | |
alias mirrors="sudo reflector --latest 50 --number 20 --sort score --save /etc/pacman.d/mirrorlist" | |
alias mirrora="sudo reflector --latest 50 --number 20 --sort age --save /etc/pacman.d/mirrorlist" | |
# Help people new to Arch | |
alias apt-get='man pacman' | |
alias apt='man pacman' | |
alias helpme='cht.sh --shell' | |
alias pacdiff='sudo -H DIFFPROG=meld pacdiff' | |
alias please='sudo' | |
alias tb='nc termbin.com 9999' | |
alias upd="/usr/bin/update" | |
# Replace yay with paru if installed | |
[ ! -x /usr/bin/yay ] && [ -x /usr/bin/paru ] && alias yay='paru' | |
## Run neofetch | |
neofetch |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Install packages: zsh zsh-theme-powerlevel9k | |
# Copy this file to ~/.zshrc | |
# Setup ZSH as default shell with: | |
# chsh -s /bin/zsh | |
# On Client systems, (if using from different host), make sure a font like Inconsolata for Powerline is installed: | |
# https://github.com/powerline/fonts/tree/master/Inconsolata | |
# Or install fonts-powerline package. Make sure terminal you are using is configured to use a Powerline font. | |
export TERM="xterm-256color" | |
# Lines configured by zsh-newuser-install | |
HISTFILE=~/.histfile | |
HISTSIZE=1000 | |
SAVEHIST=1000 | |
bindkey -e | |
zstyle :omz:plugins:ssh-agent lazy yes | |
# End of lines configured by zsh-newuser-install | |
# The following lines were added by compinstall | |
zstyle :compinstall filename '/home/nick/.zshrc' | |
autoload -Uz compinit | |
compinit | |
# End of lines added by compinstall | |
source /usr/share/powerlevel9k/powerlevel9k.zsh-theme | |
DEFAULT_USER=$USER | |
POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 | |
POWERLEVEL9K_SHORTEN_DELIMITER=".." | |
POWERLEVEL9K_SHORTEN_STRATEGY="truncate_from_right" | |
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir dir_writable vcs) | |
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator background_jobs history command_execution_time time) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# To setup ssh-agent on a remote host, copy this to ~/.config/systemd/user/ssh-agent.service | |
# Then run: | |
# $ systemctl --user enable ssh-agent | |
# $ systemctl --user start ssh-agent | |
# | |
# Add the following to ~/.zshrc: | |
# export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket" | |
# | |
# Finally, Add the following to ~/.ssh/config: | |
# AddKeysToAgent yes | |
[Unit] | |
Description=SSH key agent | |
[Service] | |
Type=simple | |
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket | |
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK | |
[Install] | |
WantedBy=default.target |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment