ZSH config overhaul

- .zshrc: Use zinit package manager
- .zshrc: Reorg - remove comments, ZSH, zinit, configs batched together
- .zshrc: Better completions
- .zshrc: More plugins: colored-man-pages, command-not-found, kitty,
  podman, rust, timer, fd, systemd
- .profile: Autoload brew applications on MacOs
- p10k: Transient prompt + dotted lines
This commit is contained in:
Pratik Tripathy
2024-06-28 18:34:43 +05:30
parent d2c56360d9
commit b7fc209c93
3 changed files with 77 additions and 85 deletions

View File

@@ -2,6 +2,31 @@
# I'm not using a separate .zprofile; reuse the .profile instead
[[ ! -f "$HOME/.profile" ]] || source "$HOME/.profile"
# ZSH Options
bindkey -v # enable vi-mode
setopt +o nomatch
ZSH_THEME="powerlevel10k/powerlevel10k"
CASE_SENSITIVE="true"
DISABLE_UPDATE_PROMPT="true"
COMPLETION_WAITING_DOTS="true"
HIST_STAMPS="dd.mm.yyyy" # see 'man strftime' for details.
VI_MODE_SET_CURSOR=true
VI_MODE_CURSOR_INSERT=3
# ZSH History
export HISTSIZE=10000000
export SAVEHIST=$HISTSIZE
export HISTFILE="$XDG_STATE_HOME/shell/zsh_history"
setopt appendhistory # Append rather than overwriting
setopt sharehistory # Share history between all sessions.
setopt extended_history # Write the history file in the ":start:elapsed;command" format.
setopt inc_append_history # Write to the history file immediately, not when the shell exits.
setopt hist_reduce_blanks # Remove superfluous blanks before recording entry.
setopt hist_verify # Don't execute immediately upon history expansion.
setopt hist_ignore_space # Don't add commands that start with whitespace to history
setopt hist_find_no_dups # Don't show duplicate commands when searching history
# 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.
@@ -9,97 +34,59 @@ if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# Path to your oh-my-zsh installation.
export ZSH="$XDG_DATA_HOME/shell/oh-my-zsh"
export ZSH_CUSTOM="$ZSH/custom"
source "${ZSH_CUSTOM}/themes/powerlevel10k/powerlevel10k.zsh-theme"
# Zinit ZSH Plugin Manager
ZINIT_HOME="${XDG_DATA_HOME}/shell/zinit/zinit.git"
if [[ ! -d "$ZINIT_HOME" ]]; then
mkdir -p "$(dirname $ZINIT_HOME)"
git clone https://github.com/zdharma-continuum/zinit.git "$ZINIT_HOME"
fi
source "${ZINIT_HOME}/zinit.zsh"
ZSH_THEME="powerlevel10k/powerlevel10k"
# Zinit Plugins
zinit ice depth=1; zinit light romkatv/powerlevel10k
zinit light zdharma-continuum/fast-syntax-highlighting
zinit light zsh-users/zsh-completions
zinit light zsh-users/zsh-autosuggestions
# Uncomment the following line to use case-sensitive completion.
CASE_SENSITIVE="true"
# Oh-my-zsh plugins
zi snippet OMZP::colored-man-pages
zi snippet OMZP::command-not-found
zi snippet OMZP::gitignore
zi snippet OMZP::kitty
zi snippet OMZP::podman
zi snippet OMZP::rust
zi snippet OMZP::sudo
zi snippet OMZP::systemd
zi snippet OMZP::timer
zi snippet OMZP::vi-mode
zi snippet https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/per-directory-history/per-directory-history.zsh
# Uncomment the following line to use hyphen-insensitive completion.
# Case-sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"
zi ice as"completion"
zi snippet OMZP::fd/_fd
# Uncomment the following line to automatically update without prompting.
DISABLE_UPDATE_PROMPT="true"
# Uncomment the following line if pasting URLs and other text is messed up.
# DISABLE_MAGIC_FUNCTIONS="true"
# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"
# Uncomment the following line to display red dots whilst waiting for completion.
COMPLETION_WAITING_DOTS="true"
# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true"
# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# see 'man strftime' for details.
HIST_STAMPS="dd.mm.yyyy"
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
plugins=(
git
gitignore
docker
docker-compose
per-directory-history
sudo
vi-mode
dotnet
exercism
)
VI_MODE_SET_CURSOR=true
VI_MODE_CURSOR_INSERT=3
HISTORY_BASE="$XDG_STATE_HOME/shell/per-directory-history"
TIMER_PRECISION=3; TIMER_FORMAT='[%d]'
# NOTE: Should be exported before sourcing oh-my-zsh, to avoid the dumpfiles on $HOME
export ZSH_COMPDUMP="$XDG_CACHE_HOME/zsh/zcompdump-$HOST"
# ZSH Auto-completion settings
autoload -Uz compinit
compinit -d "$XDG_CACHE_HOME/zsh/zcompdump-$ZSH_VERSION"
_comp_options+=(globdots) # Include hidden files
zmodload zsh/complist
zinit cdreplay -q
source "$ZSH/oh-my-zsh.sh"
source "$(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh"
source "$(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
# Completion styling
zstyle ':completion::complete:*' gain-privileges 1 menu select cache-path "$XDG_CACHE_HOME/zsh/zcompcache"
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}' # Case INsensitive completion match
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" # Add color to completion suggestions
# To customize prompt, run `p10k configure`
[[ ! -f "$XDG_CONFIG_HOME/shell/p10k.zsh" ]] || source "$XDG_CONFIG_HOME/shell/p10k.zsh"
# User configuration
setopt +o nomatch
# Higher History
export HISTSIZE=10000000
export SAVEHIST=10000000
export HISTFILE="$XDG_STATE_HOME/shell/zsh_history"
setopt EXTENDED_HISTORY # Write the history file in the ":start:elapsed;command" format.
setopt INC_APPEND_HISTORY # Write to the history file immediately, not when the shell exits.
setopt SHARE_HISTORY # Share history between all sessions.
setopt HIST_REDUCE_BLANKS # Remove superfluous blanks before recording entry.
setopt HIST_VERIFY # Don't execute immediately upon history expansion.
setopt HIST_IGNORE_SPACE # Don't add commands that start with whitespace to history
# enable vi-mode
bindkey -v
# Add brew provided autocompletions to path
[[ ! -d "/home/linuxbrew/.linuxbrew/share/zsh/site-functions" ]] || FPATH="/home/linuxbrew/.linuxbrew/share/zsh/site-functions:$FPATH"
# Auto/tab completions
autoload -Uz compinit
zstyle ':completion::complete:*' gain-privileges 1 menu select cache-path "$XDG_CACHE_HOME/zsh/zcompcache"
zmodload zsh/complist
compinit -d "$XDG_CACHE_HOME/zsh/zcompdump-$ZSH_VERSION"
_comp_options+=(globdots) # Include hidden files
# [ctrl+r]: Search command history
# [ctrl+t]: fzf & over the files & directories under the current one & paste it to prompt
# [alt+c] : fzf & cd into a directory under the current one
@@ -110,6 +97,10 @@ command -v zoxide >/dev/null && eval "$(zoxide init --cmd cd zsh)"
# Source aliases and shell functions
for alias_file in "$XDG_CONFIG_HOME"/shell/*.sh; do source "$alias_file"; done
# Keybindings
bindkey '^f' autosuggest-accept #
bindkey '^p' history-search-backward # Ctrl+p gets the last history match
bindkey '^n' history-search-forward # Ctrl+n gets the next history match
# TIP: Following should be executed AFTER the aliases are sourced
command -v op >/dev/null && bindkey -s '^o' ' op\n' # Fuzzyfind projects and open in nvim
command -v pnew >/dev/null && bindkey -s '^[o' ' pnew\n' # Create a new project quickly