# Enable colors and change prompt: autoload -U colors && colors # Load colors clp(){ yes | paru -Scc } autoload -Uz vcs_info # enable only git zstyle ':vcs_info:*' enable git # setup a hook that runs before every ptompt. precmd_vcs_info() { vcs_info } precmd_functions+=( precmd_vcs_info ) # add a function to check for untracked files in the directory. # from https://github.com/zsh-users/zsh/blob/master/Misc/vcs_info-examples zstyle ':vcs_info:git*+set-message:*' hooks git-untracked # +vi-git-untracked(){ if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' ]] && \ git status --porcelain | grep '??' &> /dev/null ; then # This will show the marker if there are any untracked files in repo. # If instead you want to show the marker only if there are untracked # files in $PWD, use: #[[ -n $(git ls-files --others --exclude-standard) ]] ; then hook_com[staged]+='!' # signify new files with a bang fi } zstyle ':vcs_info:*' check-for-changes true # zstyle ':vcs_info:git:*' formats " %r/%S %b %m%u%c " zstyle ':vcs_info:git:*' formats " %{$fg[red]%}%m%u%c%{$fg[white]%}*%{$fg[white]%}%b" # format our main prompt for hostname current folder, and permissions. PROMPT="%{$fg[blue]%}%~" # PROMPT="%B%{$fg[blue]%}[%{$fg[white]%}%n%{$fg[red]%}@%{$fg[white]%}%m%{$fg[blue]%}] %(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )%{$fg[cyan]%}%c%{$reset_color%}" # PROMPT="%{$fg[green]%}%n@%m %~ %{$reset_color%}%#> " PROMPT+="\$vcs_info_msg_0_" PROMPT+=" %(?:%{$fg_bold[magenta]%}>:%{$fg_bold[red]%}>)%{$reset_color%} " setopt autocd # Automatically cd into typed directory. stty stop undef # Disable ctrl-s to freeze terminal. setopt interactive_comments setopt prompt_subst # History in cache directory: HISTSIZE=10000000 SAVEHIST=10000000 HISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}/zsh/history" setopt inc_append_history # 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/shortcutenvrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutenvrc" [ -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. # vi mode bindkey -v export KEYTIMEOUT=1 # Use vim keys in tab complete menu: bindkey -M menuselect 'h' vi-backward-char bindkey -M menuselect 'k' vi-up-line-or-history bindkey -M menuselect 'l' vi-forward-char bindkey -M menuselect 'j' vi-down-line-or-history bindkey -v '^?' backward-delete-char # Change cursor shape for different vi modes. function zle-keymap-select () { case $KEYMAP in vicmd) echo -ne '\e[6 q';; viins|main) echo -ne '\033[0 q';; esac } zle -N zle-keymap-select zle-line-init() { zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere) echo -ne '\033[0 q' } zle -N zle-line-init function preexec { print -Pn "\e]0;${(q)1}\e\\" } # Use yazi to switch directories and bind it to ctrl-o function y() { local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd yazi "$@" --cwd-file="$tmp" if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then builtin cd -- "$cwd" fi rm -f -- "$tmp" > /dev/null } bindkey -s '^o' '^uy\n' bindkey -s '^a' '^ubc -lq\n' bindkey -s '^f' '^ucd "$(dirname "$(fzf)")"\n' bindkey '^[[P' delete-char # Edit line in vim with ctrl-e: autoload edit-command-line; zle -N edit-command-line bindkey '^e' edit-command-line bindkey -M vicmd '^[[P' vi-delete-char bindkey -M vicmd '^e' edit-command-line bindkey -M visual '^[[P' vi-delete source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh # Load syntax highlighting; should be last. source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh 2>/dev/null