From 7c2b4b2fa633bdedc55d3a1c4625499a6ac623e3 Mon Sep 17 00:00:00 2001 From: ignuki Date: Thu, 13 Feb 2025 21:42:00 +0100 Subject: [PATCH] add zsh completion setup --- zsh/.zsh_aliases | 8 ++++- zsh/.zshenv | 23 +++++++++++-- zsh/.zshrc | 23 ++----------- zsh/completion.zsh | 82 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 113 insertions(+), 23 deletions(-) create mode 100644 zsh/completion.zsh diff --git a/zsh/.zsh_aliases b/zsh/.zsh_aliases index fea09d7..6614f9d 100644 --- a/zsh/.zsh_aliases +++ b/zsh/.zsh_aliases @@ -2,12 +2,18 @@ alias tree='tree -CF --du -h' +# enable color support of ls and also add handy aliases +alias ls='ls --color=auto' +alias grep='grep --color=auto' +alias fgrep='fgrep --color=auto' +alias egrep='egrep --color=auto' + # alias tf="aws-vault exec feedzai-main -d 8h -- terraform" # alias tfi="aws-vault exec feedzai-main -d 8h -- terraform init" # alias tfp="aws-vault exec feedzai-main -d 8h -- terraform plan -lock=false" # alias tfa="aws-vault exec feedzai-main -d 8h -- terraform apply" # alias tfu="aws-vault exec feedzai-main -d 8h -- terraform get -update" -# +# # alias tg="aws-vault exec feedzai-main -d 8h -- terragrunt" # alias tgi="aws-vault exec feedzai-main -d 8h -- terragrunt init" # alias tgp="aws-vault exec feedzai-main -d 8h -- terragrunt plan -lock=false" diff --git a/zsh/.zshenv b/zsh/.zshenv index a60a257..2a30e00 100644 --- a/zsh/.zshenv +++ b/zsh/.zshenv @@ -1,3 +1,22 @@ -. "$HOME/.cargo/env" +export EDITOR="nvim" +export VISUAL="nvim" -if [ -f ~/.zshrc ]; then . ~/.zshrc; fi +export HISTFILE=~/.zsh_history +export HISTSIZE=5000000 +export SAVEHIST=$HISTSIZE + +export CLICOLOR=1 + +export DOTFILES="$HOME/dotfiles" + +# colored GCC warnings and errors +export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' + +# Man pages +export MANPAGER='nvim +Man!' + +export SSH_ENV="$HOME/.ssh/agent-environment" + +export PATH=~/.local/bin:$PATH + +. "$HOME/.cargo/env" diff --git a/zsh/.zshrc b/zsh/.zshrc index 56ecb1d..3b4e412 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -1,7 +1,3 @@ -export HISTFILE=~/.zsh_history -export HISTSIZE=5000000 -export SAVEHIST=$HISTSIZE - setopt INC_APPEND_HISTORY setopt EXTENDED_HISTORY # Write the history file in the ':start:elapsed;command' format. setopt HIST_EXPIRE_DUPS_FIRST # Expire a duplicate event first when trimming history. @@ -9,28 +5,17 @@ setopt HIST_FIND_NO_DUPS # Do not display a previously found event. setopt HIST_IGNORE_ALL_DUPS # Delete an old recorded event if a new event is a duplicate. setopt HIST_IGNORE_DUPS # Do not record an event that was just recorded again. setopt HIST_IGNORE_SPACE # Do not record an event starting with a space. -setopt HIST_SAVE_NO_DUPS # Do not write a duplicate event to the history file. +unsetopt HIST_SAVE_NO_DUPS # Do not write a duplicate event to the history file. setopt SHARE_HISTORY # Share history between all sessions. bindkey "^[[1;5C" forward-word bindkey "^[[1;5D" backward-word +source $DOTFILES/zsh/completion.zsh + # make less more friendly for non-text input files, see lesspipe(1) [ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" -# enable color support of ls and also add handy aliases -export CLICOLOR=1 -zstyle ':completion:*:default' list-colors '' -alias ls='ls --color=auto' -alias grep='grep --color=auto' -alias fgrep='fgrep --color=auto' -alias egrep='egrep --color=auto' - -# colored GCC warnings and errors -export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' - -SSH_ENV="$HOME/.ssh/agent-environment" - function start_ssh_agent { echo "Initialising new SSH agent..." /usr/bin/ssh-agent | sed 's/^echo/#echo/' >"${SSH_ENV}" @@ -56,8 +41,6 @@ if [ -f ~/.zsh_aliases ]; then . ~/.zsh_aliases fi -export PATH=~/.local/bin:$PATH - function set_win_title(){ echo -ne "\033]0; $(basename "$PWD") \007" } diff --git a/zsh/completion.zsh b/zsh/completion.zsh new file mode 100644 index 0000000..7003119 --- /dev/null +++ b/zsh/completion.zsh @@ -0,0 +1,82 @@ +# ____ ___ __ __ ____ _ _____ _____ ___ ___ _ _ +# / ___/ _ \| \/ | _ \| | | ____|_ _|_ _/ _ \| \ | | +# | | | | | | |\/| | |_) | | | _| | | | | | | | \| | +# | |__| |_| | | | | __/| |___| |___ | | | | |_| | |\ | +# \____\___/|_| |_|_| |_____|_____| |_| |___\___/|_| \_| + # + +# +---------+ +# | General | +# +---------+ + +# source ./gambit.zsh + +# Load more completions +fpath=($DOTFILES/zsh/plugins/zsh-completions/src $fpath) + +# Should be called before compinit +zmodload zsh/complist + +autoload -U compinit; compinit +_comp_options+=(globdots) # With hidden files + +# Only work with the Zsh function vman +# See $DOTFILES/zsh/scripts.zsh +compdef vman="man" + +# +---------+ +# | Options | +# +---------+ + +# setopt GLOB_COMPLETE # Show autocompletion menu with globs +setopt MENU_COMPLETE # Automatically highlight first element of completion menu +setopt AUTO_LIST # Automatically list choices on ambiguous completion. +setopt COMPLETE_IN_WORD # Complete from both ends of a word. + +# +---------+ +# | zstyles | +# +---------+ + +# Ztyle pattern +# :completion::::: + +# Define completers +zstyle ':completion:*' completer _extensions _complete _approximate + +# Use cache for commands using cache +zstyle ':completion:*' use-cache on +zstyle ':completion:*' cache-path "~/.cache/zsh/.zcompcache" +# Complete the alias when _expand_alias is used as a function +zstyle ':completion:*' complete true + +# Allow you to select in a menu +zstyle ':completion:*' menu select + +# Autocomplete options for cd instead of directory stack +zstyle ':completion:*' complete-options true +zstyle ':completion:*' file-sort modification + + +zstyle ':completion:*:*:*:*:corrections' format '%F{yellow}!- %d (errors: %e) -!%f' +zstyle ':completion:*:*:*:*:descriptions' format '%F{blue}-- %D %d --%f' +zstyle ':completion:*:*:*:*:messages' format ' %F{purple} -- %d --%f' +zstyle ':completion:*:*:*:*:warnings' format ' %F{red}-- no matches found --%f' +# zstyle ':completion:*:default' list-prompt '%S%M matches%s' +# Colors for files and directory +zstyle ':completion:*:*:*:*:default' list-colors ${(s.:.)LS_COLORS} + +# Only display some tags for the command cd +zstyle ':completion:*:*:cd:*' tag-order local-directories directory-stack path-directories +# zstyle ':completion:*:complete:git:argument-1:' tag-order !aliases + +# Required for completion to be in good groups (named after the tags) +zstyle ':completion:*' group-name '' + +zstyle ':completion:*:*:-command-:*:*' group-order aliases builtins functions commands + +# See ZSHCOMPWID "completion matching control" +zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' + +zstyle ':completion:*' keep-prefix true + +zstyle -e ':completion:*:(ssh|scp|sftp|rsh|rsync):hosts' hosts 'reply=(${=${${(f)"$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) /dev/null)"}%%[# ]*}//,/ })'