#!/bin/zsh if [[ "/dev/tty1" = "$TTY" || "/dev/tty2" = "$TTY" ]] && [[ "$(id -u)" -ne 0 ]] then clear eval "$(keychain --dir "$XDG_CONFIG_HOME/keychain" --eval --quiet --agents gpg 3A626DD20A32EB2E5DD9CE71CFD9ABC97158CD5D 2> /dev/null)" eval "$(keychain --dir "$XDG_CONFIG_HOME/keychain" --noask --eval --quiet --agents ssh 2> /dev/null)" clear if [ "/dev/tty1" = "$TTY" ] then Hyprland > /dev/null 2>&1 else startx > /dev/null 2>&1 fi exit fi autoload -U select-word-style autoload -z edit-command-line zle -N edit-command-line zstyle ':compinstall' filename '/home/aluc/.zshrc' zstyle ':completion:*' menu select autoload -Uz compinit compinit -d $XDG_CACHE_HOME/zsh/zcompdump-$ZSH_VERSION autoload -Uz surround zle -N delete-surround surround zle -N add-surround surround zle -N change-surround surround compinit if grep -qi "debian\|ubuntu" /etc/os-release 2>/dev/null then sfiles=( /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ) else sfiles=( /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh) fi sfiles+=( ~/.config/zsh/functions.zsh ~/.config/zsh/aliases.zsh ) for f in "${sfiles[@]}"; do test -f "$f" && source "$f" done bindkey -v bindkey -a cs change-surround bindkey -a ds delete-surround bindkey -a ys add-surround bindkey -M visual S add-surround bindkey "^A" beginning-of-line bindkey "^E" end-of-line bindkey '^I' expand-or-complete-prefix # necessary for completeinword bindkey '^Y' autosuggest-accept bindkey "^K" kill-line bindkey "^P" up-line-or-history bindkey "^N" down-line-or-history bindkey "^V" quoted-insert bindkey "^Xa" _expand_alias bindkey "^Xe" edit-command-line bindkey "^[." insert-last-word bindkey "^['" quote-line isTextFile() { if [ ! -f "$1" ] then return 1 fi file_type=$(file -b --mime-type "$1") if [[ "$file_type" == text/* ]] then return fi return 1 } # rehash hook zshcache_time="$(date +%s%N)" autoload -Uz add-zsh-hook rehash_precmd() { if [[ -a /var/cache/zsh/pacman ]]; then local paccache_time="$(date -r /var/cache/zsh/pacman +%s%N)" if (( zshcache_time < paccache_time )); then rehash zshcache_time="$paccache_time" fi fi } # window title hooks add-zsh-hook -Uz precmd rehash_precmd set_wt_action () { print -Pn '\e]0;$1\a' } add-zsh-hook -Uz preexec set_wt_action set_wt () { print -Pn "\e]0;%n@%m on %~\a" } add-zsh-hook -Uz precmd set_wt function osc7 { local LC_ALL=C export LC_ALL setopt localoptions extendedglob input=( ${(s::)PWD} ) uri=${(j::)input/(#b)([^A-Za-z0-9_.\!~*\'\(\)-\/])/%${(l:2::0:)$(([##16]#match))}} print -n "\e]7;file://${HOSTNAME}${uri}\e\\" } add-zsh-hook -Uz chpwd osc7 command_not_found_handler () { isTextFile "$1" || echo "zsh: command not found: $1" >&2 } # open file with file name open_file() { if [ ${1:0:2} != "./" ] && isTextFile "$1" then "$EDITOR" "$1" fi } add-zsh-hook -Uz preexec open_file # prompt PS1=' %B%(#.%F{1}.%F{13})[%n%b%f@%B%F{6}%m]%b%f %3~ ' RPROMPT='%F{blue}$(parse_git_remote)%f%F{red}$(parse_git_status)%f%F{green}$(parse_git_branch)%f%(?.. %?)' setopt prompt_subst parse_git_remote() { b="$(git branch -v 2> /dev/null | grep "^*" | sed 's/.\+\[\([^ ]\+\).*$/\1/')" if [ "$b" = "behind" ] then echo -n "↓ " elif [ "$b" = "ahead" ] then echo -n "↑ " fi } parse_git_branch() { git symbolic-ref --short HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } parse_git_status() { git status --short 2> /dev/null | head -n1 | awk '{print $1 " "}' } export REPORTTIME=2 export TIMEFMT="-> %*E" # override built-in time command alias time='/usr/bin/time' export MENUCMD='fzf' # Options setopt correct setopt nonomatch setopt autocd setopt completeinword setopt extendedglob setopt histignorealldups setopt histreduceblanks setopt interactivecomments setopt notify setopt cdablevars