# main zsh settings. env in ~/.zprofile # read second export ZSH_HOME="$HOME/.zsh" # source global shell alias & variables files [[ ! -f ~/.zshenv ]] || source ~/.zshenv # load modules zmodload zsh/complist autoload -U compinit && compinit autoload -U colors && colors # autoload -U tetris # main attraction of zsh, obviously # cmp opts zstyle ':completion:*' menu select # tab opens cmp menu zstyle ':completion:*' special-dirs true # force . and .. to show in cmp menu zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} ma=0\;33 # colorize cmp menu # zstyle ':completion:*' file-list true # more detailed list zstyle ':completion:*' squeeze-slashes false # explicit disable to allow /*/ expansion # main opts setopt append_history inc_append_history share_history # better history # on exit, history appends rather than overwrites; history is appended as soon as cmds executed; history shared across sessions setopt auto_menu menu_complete # autocmp first menu match setopt autocd # type a dir to cd setopt auto_param_slash # when a dir is completed, add a / instead of a trailing space setopt no_case_glob no_case_match # make cmp case insensitive setopt globdots # include dotfiles setopt extended_glob # match ~ # ^ setopt interactive_comments # allow comments in shell unsetopt prompt_sp # don't autoclean blanklines stty stop undef # disable accidental ctrl s # history opts HISTSIZE=1000000 SAVEHIST=1000000 # HISTFILE="$XDG_CACHE_HOME/zsh_history" # move histfile to cache HISTCONTROL=ignoreboth # consecutive duplicates & commands starting with space are not saved fpath=(~/.zsh $fpath) autoload run-help # fzf setup source <(fzf --zsh) # allow for fzf history widget # binds bindkey "^a" beginning-of-line bindkey "^e" end-of-line bindkey "^k" kill-line bindkey "^j" backward-word bindkey "^k" forward-word bindkey "^H" backward-kill-word # ctrl J & K for going up and down in prev commands bindkey "^J" history-search-forward bindkey "^K" history-search-backward bindkey '^R' fzf-history-widget # set up prompt NEWLINE=$'\n' PROMPT='%F{blue}%B%~%b%f %F{green}❯%f ' # load plugins ZSH_PLUGINS_DIR="$ZSH_HOME/plugins" [ -e "$ZSH_PLUGINS_DIR/colored-man-pages.plugin.zsh" ] && source "$ZSH_PLUGINS_DIR/colored-man-pages.plugin.zsh" [ -e "$ZSH_PLUGINS_DIR/command-not-found-plugin.zsh" ] && source "$ZSH_PLUGINS_DIR/command-not-found-plugin.zsh" [ -e "$ZSH_PLUGINS_DIR/mise.plugin.zsh" ] && source "$ZSH_PLUGINS_DIR/mise.plugin.zsh" [ -e "$ZSH_PLUGINS_DIR/zoxide.plugin.zsh" ] && source "$ZSH_PLUGINS_DIR/zoxide.plugin.zsh" [ -e "$ZSH_PLUGINS_DIR/fzf-git.sh" ] && source "$ZSH_PLUGINS_DIR/fzf-git.sh" [ -e "$ZSH_PLUGINS_DIR/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" ] && source "$ZSH_PLUGINS_DIR/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" [ -e "$ZSH_PLUGINS_DIR/zsh-autosuggestions/zsh-autosuggestions.zsh" ] && source "$ZSH_PLUGINS_DIR/zsh-autosuggestions/zsh-autosuggestions.zsh" # define user aliases pbcopy() { if [ -f "$1" ]; then mime_type=$(file --mime-type -b "$1") wl-copy --type "$mime_type" < "$1" else printf "%s" "$*" | wl-copy fi } alias pbpaste='wl-paste --no-newline' alias ls='ls --color=auto --group-directories-first' # Replace Vim implementation alias vi='nvim' alias vim='nvim' # Replace grep command tool alias grep='grep --color=auto' alias egrep='grep -E' alias fgrep='grep -F' # Other aliases alias paths='echo -e ${PATH//:/\\n}' # path: Echo all executable Paths alias userlist="cut -d: -f1 /etc/passwd | sort" alias ip='ip -color' alias stow='stow -d $DOTFILES ' case ":$PATH:" in *":$HOME/.local/bin:"*) ;; *) export PATH="$HOME/.local/bin:$PATH" ;; esac if [ -e "$HOME/.cargo" ]; then source "$HOME/.cargo/env" fi if command -v tmux &> /dev/null && [ -z "$TMUX" ]; then tmux attach-session -t default || tmux new-session -s default fi