Files
dotfiles/.config/zsh/.zshrc
T
2026-06-11 19:13:52 +02:00

437 lines
15 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# last change: Wed 2025-02-04
#
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block, everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
# Log WLR errors and logs to the hyprland log. Recommended
export HYPRLAND_LOG_WLR=1
exec start-hyprland &> /dev/null
# exec Hyprland &> /dev/null
fi
# Catppuccin Mocha Theme (for zsh-syntax-highlighting)
# Paste this files contents inside your ~/.zshrc before you activate zsh-syntax-highlighting
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main cursor)
typeset -gA ZSH_HIGHLIGHT_STYLES
source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
source ~/.config/zsh/catppuccin_mocha-zsh-syntax-highlighting.zsh
source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh 1>/dev/null
# Enable colors and change prompt:
autoload -U colors && colors # Load colors
setopt autocd # Automatically cd into typed directory.
setopt interactive_comments
# History in cache directory:
HISTSIZE=10000000
SAVEHIST=10000000
HISTFILE="${XDG_DATA_HOME:-$HOME/.local/share}/history"
# HISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}/zsh/history"
# setopt appendhistory
# Load aliases and shortcuts if existent.
[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc"
[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc"
#[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc"
# Basic auto/tab complete:
autoload -U compinit
zstyle ':completion:*' menu select
zmodload zsh/complist
compinit
_comp_options+=(globdots) # Include hidden files.
# 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
# [Ctrl-Delete] - delete whole forward-word
bindkey -M emacs '^[[3;5~' kill-word
bindkey -M viins '^[[3;5~' kill-word
bindkey -M vicmd '^[[3;5~' kill-word
# [Ctrl-RightArrow] - move forward one word
bindkey -M emacs '^[[1;5C' forward-word
bindkey -M viins '^[[1;5C' forward-word
bindkey -M vicmd '^[[1;5C' forward-word
# [Ctrl-LeftArrow] - move backward one word
bindkey -M emacs '^[[1;5D' backward-word
bindkey -M viins '^[[1;5D' backward-word
bindkey -M vicmd '^[[1;5D' backward-word
bindkey '\ew' kill-region # [Esc-w] - Kill from the cursor to the mark
bindkey -s '\el' 'ls\n' # [Esc-l] - run command: ls
bindkey '^r' history-incremental-search-backward # [Ctrl-r] - Search backward incrementally for a specified string. The string may begin with ^ to anchor the search to the beginning of the line.
bindkey ' ' magic-space # [Space] - don't do history expansion
if [[ "$TERM" != emacs ]]; then
[[ -z "$terminfo[kdch1]" ]] || bindkey -M emacs "$terminfo[kdch1]" delete-char
[[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
[[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line
[[ -z "$terminfo[kich1]" ]] || bindkey -M emacs "$terminfo[kich1]" overwrite-mode
[[ -z "$terminfo[kdch1]" ]] || bindkey -M vicmd "$terminfo[kdch1]" vi-delete-char
[[ -z "$terminfo[khome]" ]] || bindkey -M vicmd "$terminfo[khome]" vi-beginning-of-line
[[ -z "$terminfo[kend]" ]] || bindkey -M vicmd "$terminfo[kend]" vi-end-of-line
[[ -z "$terminfo[kich1]" ]] || bindkey -M vicmd "$terminfo[kich1]" overwrite-mode
[[ -z "$terminfo[cuu1]" ]] || bindkey -M viins "$terminfo[cuu1]" vi-up-line-or-history
[[ -z "$terminfo[cuf1]" ]] || bindkey -M viins "$terminfo[cuf1]" vi-forward-char
[[ -z "$terminfo[kcuu1]" ]] || bindkey -M viins "$terminfo[kcuu1]" vi-up-line-or-history
[[ -z "$terminfo[kcud1]" ]] || bindkey -M viins "$terminfo[kcud1]" vi-down-line-or-history
[[ -z "$terminfo[kcuf1]" ]] || bindkey -M viins "$terminfo[kcuf1]" vi-forward-char
[[ -z "$terminfo[kcub1]" ]] || bindkey -M viins "$terminfo[kcub1]" vi-backward-char
# ncurses fogyatekos
[[ "$terminfo[kcuu1]" == "^[O"* ]] && bindkey -M viins "${terminfo[kcuu1]/O/[}" vi-up-line-or-history
[[ "$terminfo[kcud1]" == "^[O"* ]] && bindkey -M viins "${terminfo[kcud1]/O/[}" vi-down-line-or-history
[[ "$terminfo[kcuf1]" == "^[O"* ]] && bindkey -M viins "${terminfo[kcuf1]/O/[}" vi-forward-char
[[ "$terminfo[kcub1]" == "^[O"* ]] && bindkey -M viins "${terminfo[kcub1]/O/[}" vi-backward-char
[[ "$terminfo[khome]" == "^[O"* ]] && bindkey -M viins "${terminfo[khome]/O/[}" beginning-of-line
[[ "$terminfo[kend]" == "^[O"* ]] && bindkey -M viins "${terminfo[kend]/O/[}" end-of-line
[[ "$terminfo[khome]" == "^[O"* ]] && bindkey -M emacs "${terminfo[khome]/O/[}" beginning-of-line
[[ "$terminfo[kend]" == "^[O"* ]] && bindkey -M emacs "${terminfo[kend]/O/[}" end-of-line
fi
# del, home and end !! THIS WORKS!!
bindkey "\e[3~" delete-char
bindkey "\e[H" beginning-of-line
bindkey "\e[F" end-of-line
# Edit the current command line in $EDITOR
autoload -U edit-command-line
zle -N edit-command-line
bindkey '\C-x\C-e' edit-command-line
# file rename magick
bindkey "^[m" copy-prev-shell-word
# alt-bs
bindkey "\e\d" undo
# consider emacs keybindings:
#bindkey -e ## emacs key bindings
#
#bindkey '^[[A' up-line-or-search
#bindkey '^[[B' down-line-or-search
#bindkey '^[^[[C' emacs-forward-word
#bindkey '^[^[[D' emacs-backward-word
#
#bindkey -s '^X^Z' '%-^M'
#bindkey '^[e' expand-cmd-path
#bindkey '^[^I' reverse-menu-complete
#bindkey '^X^N' accept-and-infer-next-history
#bindkey '^W' kill-region
#bindkey '^I' complete-word
## Fix weird sequence that rxvt produces
#bindkey -s '^[[Z' '\t'
#
############ POWERLEVEL THEME SETTINGS ##############
POWERLEVEL9K_MODE="nerdfont-complete"
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_arch_icon dir vcs)
# POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(disk_usage time)
# POWERLEVEL9K_CUSTOM_ARCH_ICON='echo  nf'
POWERLEVEL9K_CUSTOM_ARCH_ICON_BACKGROUND=031
POWERLEVEL9K_CUSTOM_ARCH_ICON_FOREGROUND=252
# POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
# POWERLEVEL9K_PROMPT_ON_NEWLINE=true
# POWERLEVEL9K_SHOW_RULER=true
# POWERLEVEL9K_RULER_CHAR='─'
# POWERLEVEL9K_RULER_BACKGROUND=none
# POWERLEVEL9K_RULER_FOREGROUND=252
# POWERLEVEL9K_LEFT_SEGMENT_END_SEPARATOR=
# POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR=
# POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR=' '
# POWERLEVEL9K_RIGHT_SEGMENT_END_SEPARATOR=
# POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR=
# POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR=
# POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS=
# POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
# POWERLEVEL9K_SHORTEN_STRATEGY="truncate_middle"
# POWERLEVEL9K_DIR_SHOW_WRITABLE=true
# POWERLEVEL9K_DISK_USAGE_NORMAL_BACKGROUND=none
# POWERLEVEL9K_DISK_USAGE_WARNING_BACKGROUND=magenta
# POWERLEVEL9K_DISK_USAGE_CRITICAL_BACKGROUND=red
# POWERLEVEL9K_TIME_BACKGROUND=none
# POWERLEVEL9K_TIME_FOREGROUND=white
POWERLEVEL9K_DIR_HOME_BACKGROUND=239
# POWERLEVEL9K_DIR_HOME_SUBFOLDER_BACKGROUND=none
# POWERLEVEL9K_DIR_ETC_BACKGROUND=none
# POWERLEVEL9K_DIR_DEFAULT_BACKGROUND=none
# POWERLEVEL9K_DIR_NOT_WRITABLE_BACKGROUND=none
POWERLEVEL9K_DIR_HOME_FOREGROUND=252
POWERLEVEL9K_DIR_HOME_SUBFOLDER_FOREGROUND=252
POWERLEVEL9K_DIR_ETC_FOREGROUND=252
POWERLEVEL9K_DIR_DEFAULT_FOREGROUND=252
POWERLEVEL9K_DIR_NOT_WRITABLE_FOREGROUND=100
# POWERLEVEL9K_OS_ICON_BACKGROUND="white"
# POWERLEVEL9K_OS_ICON_FOREGROUND="white"
# POWERLEVEL9K_VCS_GIT_ICON='%fon %F{040}\uf1d3 '
# POWERLEVEL9K_VCS_GIT_GITHUB_ICON='%fon %F{040}\uf09b '
# POWERLEVEL9K_VCS_GIT_BITBUCKET_ICON='%fon %F{040}\uf171 '
# POWERLEVEL9K_VCS_GIT_GIT_GITLAB_ICON='%fon %F{040}\uf296 '
# POWERLEVEL9K_VCS_CLEAN_BACKGROUND=none
# POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=none
# POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=none
# POWERLEVEL9K_VCS_LOADING_BACKGROUND=none
# POWERLEVEL9K_VCS_CLEAN_FOREGROUND="040"
# POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND="red"
# POWERLEVEL9K_VCS_MODIFIED_FOREGROUND="yellow"
# POWERLEVEL9K_VCS_LOADING_FOREGROUND="grey"
# POWERLEVEL9K_VCS_UNTRACKED_ICON=$'%{\b?%}'
# POWERLEVEL9K_VCS_UNSTAGED_ICON=$'%{\b!%}'
# POWERLEVEL9K_VCS_STAGED_ICON=$'%{\b+%}'
# POWERLEVEL9K_DIR_NOT_WRITABLE_VISUAL_IDENTIFIER_COLOR=red
# POWERLEVEL9K_LOCK_ICON=$'\uf023'
# POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=''
# local p='%F{%(?.green.red)}${${${KEYMAP:-0}:#vicmd}:+}${${$((!${#${KEYMAP:-0}:#vicmd})):#0}:+}%f '
# POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="$p"
# POWERLEVEL9K_NVM_BACKGROUND=none
# POWERLEVEL9K_NVM_FOREGROUND=green
# POWERLEVEL9K_NODE_ICON='%fvia %F{green}⬢'
############ END- POWERLEVEL THEME SETTINGS ##############
# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
# export EDITOR='vim'
# else
# export EDITOR='mvim'
# fi
# Compilation flags
# export ARCHFLAGS="-arch x86_64"
### ARCHIVE EXTRACTION
# usage: ex <file>
# ex ()
# {
# if [ -f $1 ] ; then
# case $1 in
# *.tar.bz2) tar xjf $1 ;;
# *.tar.gz) tar xzf $1 ;;
# *.bz2) bunzip2 $1 ;;
# *.rar) unrar x $1 ;;
# *.gz) gunzip $1 ;;
# *.tar) tar xf $1 ;;
# *.tbz2) tar xjf $1 ;;
# *.tgz) tar xzf $1 ;;
# *.zip) unzip $1 ;;
# *.Z) uncompress $1;;
# *.7z) 7z x $1 ;;
# *.deb) ar x $1 ;;
# *.tar.xz) tar xf $1 ;;
# *.tar.zst) unzstd $1 ;;
# *) echo "'$1' cannot be extracted via ex()" ;;
# esac
# else
# echo "'$1' is not a valid file"
# fi
# }
### ALIASES ###
# !!! DEPRECATED !!!
# --> now in ~/.config/shell/aliasrc and ~/.config/shell/shortcutsrc
## get top process eating memory
#alias psmem='ps auxf | sort -nr -k 4'
#alias psmem10='ps auxf | sort -nr -k 4 | head -10'
## get top process eating cpu ##
#alias pscpu='ps auxf | sort -nr -k 3'
#alias pscpu10='ps auxf | sort -nr -k 3 | head -10'
unsetopt nomatch
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
#[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
# paths - #TODO: maybe put them into separate file:
export PATH=~/.local/bin:$PATH
export PATH=/home/tobias/.local/share/soar/bin:$PATH
export PATH=/home/tobias/.config/gem/ruby/2.7.0/bin:$PATH
export PATH=/home/tobias/.local/share/cargo/bin:$PATH
export PATH=/home/tobias/.local/share/npm/bin/:$PATH
export PATH=/usr/bin/perl:$PATH
# export LS_COLORS="$(vivid generate catppuccin-mocha)"
# color-ls:
# Enable tab completion for flags by entering following line to your shell configuration file (~/.bashrc or ~/.zshrc) :
#source $(dirname $(gem which colorls))/tab_complete.sh
#for tilix
# if [ $TILIX_ID ] || [ $VTE_VERSION ]; then
# source /etc/profile.d/vte.sh
# fi
#
[[ ! -f ~/.config/zsh/.p10k.zsh ]] || source ~/.config/zsh/.p10k.zsh
# autostart Hyprland
# if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
# exec sh "~/.config/hypr/initrc"
# fi
#
# if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
# # pidof mylock > /dev/null || exec startw
# # exec hl
# sh "~/.config/hypr/initrc"
# fi
#
# if [ "$(tty)" = "/dev/tty1" ] ; then
#if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
# cd ~
# # Log WLR errors and logs to the hyprland log. Recommended
# export HYPRLAND_LOG_WLR=1
# #NOW IN HYPRLAND ENV -- todo: delete me
# # Tell XWayland to use a cursor theme
# # export XCURSOR_THEME=Bibata-Modern-Ice
# # export XCURSOR_THEME=Breeze_Snow
# # NOW IN HYPRLAND ENV
# # Set a cursor size
# # export XCURSOR_SIZE=24
# # # nvidia stuff:
# # export LIBVA_DRIVER_NAME=nvidia
# # export XDG_SESSION_TYPE=wayland
# # export GBM_BACKEND=nvidia-drm
# # export __GLX_VENDOR_LIBRARY_NAME=nvidia
# # export WLR_NO_HARDWARE_CURSORS=1
# exec Hyprland &> /dev/null
#fi
# exec sh "~/.config/hypr/initrc"fifi
# if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
# # pidof mylock > /dev/null || exec startw
# # exec hl
# exec "~/.config/hypr/initrc"
# fi
autoload bashcompinit
bashcompinit
source "/home/tobias/.local/share/bash-completion/completions/appman"
autoload bashcompinit
bashcompinit
source "/home/tobias/.local/share/bash-completion/completions/archimage-cli"