dotfiles/.zshrc

576 lines
21 KiB
Bash
Raw Normal View History

2021-08-07 21:24:26 -07:00
#!/bin/zsh
# Blake's ZSH config file
### Basic shell configuration >>>
### Environment variables >>>
{
# Intelligently set $EDITOR
if command -v nvim > /dev/null;then
export EDITOR=nvim
elif command -v vim > /dev/null;then
export EDITOR=vim
elif command -v vi > /dev/null;then
export EDITOR=vi
fi
export SHELL_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/shell"
export PATH="$PATH:${XDG_DATA_HOME:-$HOME/.local}/bin:$SHELL_CONFIG_DIR/bin"
2021-08-07 21:24:26 -07:00
export SYSTEMD_EDITOR="$EDITOR"
export LSCOLORS="Gxfxcxdxbxegedabagacad"
export ZSH_CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/zsh"
export ZINIT_HOME_DIR="${XDG_DATA_HOME:-$HOME/.local}/share/zinit"
# Set documents directory (auto set to the repo the file ~/todo points to is in)
[ -h ~/todo ] && export DOCS_DIR="$(git -C "$(dirname "$(realpath ~/todo)" 2>&1)" rev-parse --show-toplevel | head -1)"
# Don't add extra space to the right side of the prompt
ZLE_RPROMPT_INDENT=0
WORKING_DIR_SAVE_FILE="${XDG_CACHE_HOME:-$HOME/.cache}/zsh/last-working-dir"
# make the dir for the file if needed
! test -d "$(dirname "$WORKING_DIR_SAVE_FILE")" && mkdir -p "$(dirname "$WORKING_DIR_SAVE_FILE")"
# (I know this shouldn't go here, but I needed it to happen early)
# change cursor to beam by default
echo -ne '\e[5 q'
2021-08-07 21:24:26 -07:00
# Plugin setting >>>
{
# ZSH Vi Mode
ZVM_VI_HIGHLIGHT_FOREGROUND=#BBC2CF
ZVM_VI_HIGHLIGHT_BACKGROUND=#515860
# ZVM_VI_HIGHLIGHT_EXTRASTYLE=bold,underline # bold and underline
# OMZ Completion
COMPLETION_WAITING_DOTS=true
}
# <<<
# optionally source an external environment variable file
[ -f "$SHELL_CONFIG_DIR/shell/envrc" ] && source "$SHELL_CONFIG_DIR/shell/envrc"
2021-08-07 21:24:26 -07:00
}
# <<<
### Aliases >>>
{
## Short hand programs (ex: sc = shellcheck) >>>
# use nvim rather than vim if the command exists
alias \
vim='nvim' \
vimdiff='nvim -d'
2021-08-07 21:24:26 -07:00
alias \
vv="$EDITOR" \
e="$EDITOR" \
sedit='sudoedit' \
2021-09-11 02:33:02 -07:00
2021-08-07 21:24:26 -07:00
# I do this too much by accident smh my head
2021-09-03 01:39:50 -07:00
alias :q='exit' \
2021-08-07 21:24:26 -07:00
q='exit' \
2021-09-03 01:39:50 -07:00
2021-08-07 21:24:26 -07:00
# rmdir is long
alias \
rmd='rmdir' \
rd='rmdir' \
2021-09-03 01:39:50 -07:00
2021-10-27 17:30:08 -07:00
alias \
mkd="mkdir -p" \
2021-10-27 17:30:08 -07:00
g=git \
sctl='sudo systemctl' \
2021-09-20 10:05:22 -07:00
2021-08-07 21:24:26 -07:00
# <<<
## Program improvements (ex: ls = ls -h) >>>
alias sudo='sudo ' # allow using aliases in sudo commands
alias df='df -h' # Human-readable sizes
alias free='free -m' # Show sizes in MB
alias bc='bc -ql' # Make bc usable for fast math
[ -z "$VIMRUNTIME" ] &&
alias glow='glow -p' # force Glow to preview with `less` if not in vim
2021-08-07 21:24:26 -07:00
# I hate it when I get ghost script instead of git status. this will be removed
alias gs="echo 'you don'\''t really want ghost script, do you?'"
2021-11-15 20:01:20 -08:00
# tell make to use all cpu cores
alias make='make -j$(nproc)'
2021-08-07 21:24:26 -07:00
# Colors
alias \
ls='ls -hN --color=auto --group-directories-first' \
grep='grep --color=auto' \
diff='diff --color=auto' \
pacman='pacman --color=auto' \
parue='/usr/bin/paru --color=auto --sudoloop --newsonupgrade --pgpfetch --upgrademenu --bottomup --fm nvim' \
paru='parue --skipreview' \
2021-10-07 20:32:02 -07:00
command -v lsd > /dev/null && alias \
ls=lsd \
lsd='lsd --group-dirs=first' \
2021-08-07 21:24:26 -07:00
# <<<
2021-11-28 13:05:00 -08:00
## Mini short-hand scripts (ex: glone = git clone) >>>
2021-08-07 21:24:26 -07:00
# dotfile management
alias dot='git --git-dir="$HOME/git/dotfiles" --work-tree="$HOME"'
alias d='git --git-dir="$HOME/git/dotfiles" --work-tree="$HOME"' # duplicate for auto-complete
2021-08-07 21:24:26 -07:00
2021-10-24 12:21:06 -07:00
# quicker shutdown
alias sdn='shutdown now'
# open a new session called 0, but if there is already a session called 0, connect to it
alias tm='tmux new -As0'
2021-10-24 11:41:07 -07:00
# List available X displays. Useful for finding what display to export when connected over ssh.
alias lsx='ls /tmp/.X11-unix | tr "X" ":"'
2021-11-02 01:20:39 -07:00
# Make ydotool actually usable for short things
alias ydotool='(sudo ydotoold &) && sleep 0.05 && sudo ydotool'
2021-11-28 13:05:00 -08:00
# Update zinit and plugins
alias zup='zinit self-update && zinit update --parallel'
2021-08-07 21:24:26 -07:00
# Edit config files
alias \
nvc='(cd ~/.config/nvim/lua/blake && nvim ../../init.lua)' \
zc='$EDITOR ~/.zshrc' \
fstab='sudoedit /etc/fstab' \
2021-11-13 20:47:45 -08:00
hst='$EDITOR $HISTFILE' \
2021-08-07 21:24:26 -07:00
# Git cLONE
alias glone="git clone"
# Docker
alias \
logs='docker-compose logs --tail=200 -f' \
dupd='docker-compose up -d' \
ddwn='docker-compose down' \
dc='docker-compose' \
occ='docker exec -it -u www-data nextcloud php occ' \
# file copying with a progress bar
alias cpv="rsync -ah --info=progress2"
# lists all open ports, along with some other info
alias ls-ports='netstat -tulpn'
# list all disks and their mount points
alias mnt="mount | awk -F' ' '{ printf \"%s\t%s\n\",\$1,\$3; }' | column -t | grep -E '^/dev/' | sort"
2021-08-07 21:24:26 -07:00
# backs up list of packages
alias packback='comm -23 <(paru -Qqett | sort) <(paru -Qqg base -g base-devel | sort | uniq) > ~/pkglist.txt'
2021-10-24 11:41:07 -07:00
# thoroughly reset the terminal
alias rce='reset && clear && exec zsh'
# find pretty much any file, quickly
alias fds='fd --hidden --exclude /run'
2021-08-07 21:24:26 -07:00
# smart plug things
SMART_PLUG_IP='192.168.1.250'
alias light='tplink_smartplug.py -t $SMART_PLUG_IP -c'
# Common ls aliases
2021-08-07 21:24:26 -07:00
alias \
l=ls \
2021-08-07 21:24:26 -07:00
la='ls -ah' \
ll='ls -lh' \
lla='ls -lah' \
2021-08-07 21:24:26 -07:00
# <<<
# optionally source an external alias file
[ -f "$SHELL_CONFIG_DIR/shell/aliasrc" ] && source "$SHELL_CONFIG_DIR/shell/aliasrc"
2021-11-15 02:03:36 -08:00
}
2021-11-15 02:03:36 -08:00
# # TODO: remove all aliases that refrence programs which do not exist >>>
# alias fdsa=not_an_alias # test alias
# alias what='which ' # this will return 0 if something we give it cannot be executed
# validate_alias() {
# what "$1"
# }
# # what fdsa
# # may need to use xargs
# for ALIAS in $(alias | cut -d = -f 1);do # assumes you don't have = signs in your alias's names
# echo "validating alias $ALIAS"
# what "$ALIAS" &&
# unalias "$ALIAS" &&
# echo "alias $ALIAS was removed"
# done
# alias q=exit
# # <<<
2021-11-13 20:47:45 -08:00
2021-08-07 21:24:26 -07:00
# <<<
### Functions >>>
{
# # put all shell functions in their own function that allows them to be updated
# for FN_PATH in "$SHELL_CONFIG_DIR"/functions/*;do
# FN="${FN_PATH##*/}"
# "$FN"() {
# $(source "$FN_PATH")
# }
#
# echo "Declared function $FN"
# echo "Contents of $FN:"
# which "$FN"
# echo
# done
# load all functions that are stored in files
fnupdate() {
for FN in "$SHELL_CONFIG_DIR"/functions/*;do
source "$FN"
done
}
fnupdate
2021-08-07 21:24:26 -07:00
# for sending error messages from functions and whatnot
2021-08-07 21:24:26 -07:00
error() {
ERROR_CODE="$?"
>&2 echo "(zshrc) An error occurred on line number ${1}"
return $ERROR_CODE
}
2021-08-07 21:24:26 -07:00
# shellcheck disable=SC2016
mkcd() {
mkdir -p "$1" || error $LINENO
cd "$1" || error $LINENO
}
# believe it or not, zsh makes for a fine calculator
2021-08-07 21:24:26 -07:00
calc() {
echo $(($*))
}
# optionally source an external function file
[ -f "$SHELL_CONFIG_DIR/fnrc" ] && source "$SHELL_CONFIG_DIR/fnrc"
2021-08-07 21:24:26 -07:00
}
# <<<
# <<<
### Plugins >>>
{
# plugin config >>>
# vim-mode cursor
# syntax: "[color] [blinking] [style]" see: https://github.com/softmoth/zsh-vim-mode#mode-in-prompt
MODE_CURSOR_VIINS="blinking bar"
MODE_CURSOR_REPLACE="steady bar"
MODE_CURSOR_VICMD="steady block"
MODE_CURSOR_SEARCH="blinking underline"
MODE_CURSOR_VISUAL="steady block"
MODE_CURSOR_VLINE="steady block"
2021-08-07 21:24:26 -07:00
# <<<
# Load zinit >>>
{
# Install zinit if not installed
if [[ ! -f "$ZINIT_HOME_DIR/bin/zinit.zsh" ]]; then
print -P "%F{33}▓▒░ %F{220}Installing %F{33}DHARMA%F{220} Initiative Plugin Manager (%F{33}zdharma-continuum/zinit%F{220})…%f"
command mkdir -p "$ZINIT_HOME_DIR" && command chmod g-rwX "$ZINIT_HOME_DIR"
command git clone https://github.com/zdharma-continuum/zinit "$ZINIT_HOME_DIR/bin" && \
2021-08-07 21:24:26 -07:00
print -P "%F{33}▓▒░ %F{34}Installation successful.%f%b" || \
print -P "%F{160}▓▒░ The clone has failed.%f%b"
fi
# Source zinit
source "$ZINIT_HOME_DIR/bin/zinit.zsh"
2021-08-07 21:24:26 -07:00
autoload -Uz _zinit
(( ${+_comps} )) && _comps[zinit]=_zinit
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
2021-08-07 21:24:26 -07:00
# Load a few important annexes, without Turbo
# (this is currently required for annexes)
zinit light-mode for \
zdharma-continuum/z-a-rust \
zdharma-continuum/z-a-as-monitor \
zdharma-continuum/z-a-patch-dl \
zdharma-continuum/z-a-bin-gem-node
2021-08-07 21:24:26 -07:00
}
# <<<
# Plugins to install >>>
{
2021-12-16 14:37:51 -08:00
# set turbo mode and git clone depth for all plugins
alias zinit='ice wait"!0" depth"1";zinit'
2021-08-07 21:24:26 -07:00
zinit snippet OMZ::lib/history.zsh
# Some better completion options
zinit snippet OMZ::lib/completion.zsh
# Quality of life
zinit load "zsh-users/zsh-autosuggestions"
zinit load "zdharma-continuum/fast-syntax-highlighting"
zinit load "jeffreytse/zsh-vi-mode"
2021-08-07 21:24:26 -07:00
zinit load "zsh-users/zsh-history-substring-search"
zinit load "zsh-users/zsh-completions"
2021-09-15 00:55:59 -07:00
## Themes
# terminal colors
2022-01-07 12:48:40 -08:00
if [[ -f "$SHELL_CONFIG_DIR/colors.sh" ]];then
2021-12-16 14:37:51 -08:00
# custom colors
2022-01-07 12:48:40 -08:00
source "$SHELL_CONFIG_DIR/colors.sh"
2021-09-15 00:54:03 -07:00
else
2021-12-16 14:37:51 -08:00
# onedark shell colors
zinit snippet 'https://github.com/chriskempson/base16-shell/blob/master/scripts/base16-onedark.sh'
2021-09-15 00:54:03 -07:00
fi
2021-12-16 14:37:51 -08:00
# prompt
2021-08-07 21:24:26 -07:00
zinit load "romkatv/powerlevel10k"
2021-09-06 17:55:39 -07:00
zinit ice atclone"dircolors -b ./src/dir_colors > colors.zsh" \
atpull'%atclone' pick"colors.zsh" nocompile'!' \
atload'zstyle ":completion:*" list-colors “${(s.:.)LS_COLORS}”'
zinit light arcticicestudio/nord-dircolors
[[ -f ~/.p10k.zsh ]] && source ~/.p10k.zsh
2021-12-16 14:37:51 -08:00
# clear plugin options set above
unalias zinit
2021-12-16 14:37:51 -08:00
# just gonna sneak this in here, too
alias zi > /dev/null && unalias zi zpl zini zplg which-command run-help fsh-alias
2021-08-07 21:24:26 -07:00
}
# <<<
}
# <<<
### General ZSH configuration >>>
# This section is (mostly) From manjaro's "manjaro-zsh-config" (/usr/share/zsh/manjaro-zsh-config)
2021-08-07 21:24:26 -07:00
[ -z "$HISTFILE" ] && HISTFILE="$HOME/.zsh_history"
## ZSH Options >>>
2021-08-07 21:24:26 -07:00
{
# setopt correct # Auto correct mistakes
setopt extendedglob # Extended globbing. Allows using regular expressions with *
[ -z "$TERMUX_VERSION" ] &&
setopt nocaseglob # Case insensitive globbing (and fix for termux)
2021-08-07 21:24:26 -07:00
setopt rcexpandparam # Array expension with parameters
setopt checkjobs # Warn about running processes when exiting
setopt numericglobsort # Sort filenames numerically when it makes sense
setopt nobeep # Most important option
setopt appendhistory # Immediately append history instead of overwriting
setopt inc_append_history # save commands are added to the history immediately, otherwise only when shell exits.
setopt histfindnodups # If a new command is a duplicate, remove the older one
setopt histignorealldups # If a new command is a duplicate, remove the older one
setopt autocd # if only directory path is entered, cd there.
setopt interactive_comments # allow typing comments in line
setopt no_rm_star_silent # Ensure the user wants to execute 'rm *'
setopt rm_star_wait # Wait before accepting 'rm *' or 'rm /path/*'
setopt short_loops # allow things like 'if [ 1=1 ] { echo "okay"}' < https://zsh.sourceforge.io/Doc/Release/Shell-Grammar.html#Alternate-Forms-For-Complex-Commands
setopt pipe_fail # When a pipe fails, show the non-0 exit code for the exit code
}
# <<<
## ZSH Completion Options >>>
{
# Mine
2021-11-06 19:48:31 -07:00
# zstyle ':completion:*' completer _expand _complete _ignored _prefix
# zstyle ':completion:*' expand prefix suffix
# zstyle ':completion:*' file-sort access
# zstyle ':completion:*' ignore-parents parent pwd directory
# zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
# zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s
# zstyle ':completion:*' matcher-list '' 'm:{[:lower:]}={[:upper:]}' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'r:|[._-]=** r:|=**'
# zstyle ':completion:*' menu select=long
# zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
# zstyle :compinstall filename '/home/blake/.zshrc'
2021-08-07 21:24:26 -07:00
# Manjaro's
2021-11-06 19:48:31 -07:00
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # Case insensitive tab completion
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" # Colored completion (different colors for dirs/files/etc)
zstyle ':completion:*' rehash true # automatically find new executables in path
# Speed up completions
2021-08-07 21:24:26 -07:00
zstyle ':completion:*' accept-exact '*(N)'
zstyle ':completion:*' use-cache on
zstyle ':completion:*' cache-path $ZSH_CACHE_DIR
WORDCHARS=${WORDCHARS//\/[&.;]} # Don't consider certain characters part of the word
}
# <<<
## Keybindings >>>
bindkey -v # Enable Vi mode
bindkey '^[[7~' beginning-of-line # Home key
bindkey '^[[H' beginning-of-line # Home key
if [[ "${terminfo[khome]}" != "" ]]; then
bindkey "${terminfo[khome]}" beginning-of-line # [Home] - Go to beginning of line
fi
bindkey '^[[8~' end-of-line # End key
bindkey '^[[F' end-of-line # End key
if [[ "${terminfo[kend]}" != "" ]]; then
bindkey "${terminfo[kend]}" end-of-line # [End] - Go to end of line
fi
bindkey '^[[2~' overwrite-mode # Insert key
bindkey '^[[3~' delete-char # Delete key
bindkey '^[[C' forward-char # Right key
bindkey '^[[D' backward-char # Left key
bindkey '^[[5~' history-beginning-search-backward # Page up key
bindkey '^[[6~' history-beginning-search-forward # Page down key
# Navigate words with ctrl+arrow keys
bindkey '^[Oc' forward-word #
bindkey '^[Od' backward-word #
bindkey '^[[1;5D' backward-word #
bindkey '^[[1;5C' forward-word #
2021-09-15 00:45:59 -07:00
# Delete words with ctrl+bksp/del
2021-08-07 21:24:26 -07:00
bindkey '^H' backward-kill-word # delete previous word with ctrl+backspace
bindkey '^[[3;5~' kill-word # delete next word with ctrl+delete
bindkey '^[[Z' undo # Shift+tab undo last action
# bind UP and DOWN arrow keys to history substring search
zmodload zsh/terminfo
2021-09-15 00:45:59 -07:00
# bindkey "$terminfo[kcuu1]" history-substring-search-up
# bindkey "$terminfo[kcud1]" history-substring-search-down
2021-08-07 21:24:26 -07:00
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
bindkey -M vicmd 'k' history-substring-search-up
bindkey -M vicmd 'j' history-substring-search-down
# <<<
# Colors and compinit >>>
2021-08-07 21:24:26 -07:00
export LESS_TERMCAP_mb=$'\E[01;32m'
export LESS_TERMCAP_md=$'\E[01;32m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;47;34m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;36m'
export LESS=-R
autoload -U compinit colors zcalc
compinit -d
colors
2021-08-07 21:24:26 -07:00
# <<<
### Various manjaro ZSH functions >>>
# Set terminal window and tab/icon title >>>
2021-08-07 21:24:26 -07:00
# usage: title short_tab_title [long_window_title]
# See: http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#ss3.1
# Fully supports screen and probably most modern xterm and rxvt
# (In screen, only short_tab_title is used)
function title {
emulate -L zsh
setopt prompt_subst
[[ "$EMACS" == *term* ]] && return
# if $2 is unset use $1 as default
# if it is set and empty, leave it as is
: ${2=$1}
case "$TERM" in
xterm*|putty*|rxvt*|konsole*|ansi|mlterm*|alacritty|st*)
print -Pn "\e]2;${2:q}\a" # set window name
print -Pn "\e]1;${1:q}\a" # set tab name
;;
screen*|tmux*)
print -Pn "\ek${1:q}\e\\" # set screen hardstatus
;;
*)
# Try to use terminfo to set the title
# If the feature is available set title
if [[ -n "$terminfo[fsl]" ]] && [[ -n "$terminfo[tsl]" ]]; then
echoti tsl
print -Pn "$1"
echoti fsl
fi
;;
esac
}
# <<<
ZSH_THEME_TERM_TAB_TITLE_IDLE="%15<..<%~%<<" # 15 char left truncated PWD
ZSH_THEME_TERM_TITLE_IDLE="%n@%m:%~"
# Runs before showing the prompt >>>
2021-08-07 21:24:26 -07:00
function mzc_termsupport_precmd {
[[ "${DISABLE_AUTO_TITLE:-}" == true ]] && return
title $ZSH_THEME_TERM_TAB_TITLE_IDLE $ZSH_THEME_TERM_TITLE_IDLE
}
# <<<
2021-08-07 21:24:26 -07:00
# Runs before executing the command >>>
2021-08-07 21:24:26 -07:00
function mzc_termsupport_preexec {
[[ "${DISABLE_AUTO_TITLE:-}" == true ]] && return
emulate -L zsh
2022-01-30 20:29:17 -08:00
# split command into array of arguments
local -a cmdargs
cmdargs=("${(z)2}") # " <- syntax highlighting fix
# if running fg, extract the command from the job description
if [[ "${cmdargs[1]}" = fg ]]; then
# get the job id from the first argument passed to the fg command
local job_id jobspec="${cmdargs[2]#%}"
# logic based on jobs arguments:
# http://zsh.sourceforge.net/Doc/Release/Jobs-_0026-Signals.html#Jobs
# https://www.zsh.org/mla/users/2007/msg00704.html
case "$jobspec" in
<->) # %number argument:
# use the same <number> passed as an argument
job_id=${jobspec} ;;
""|%|+) # empty, %% or %+ argument:
# use the current job, which appears with a + in $jobstates:
# suspended:+:5071=suspended (tty output)
job_id=${(k)jobstates[(r)*:+:*]} ;;
-) # %- argument:
# use the previous job, which appears with a - in $jobstates:
# suspended:-:6493=suspended (signal)
job_id=${(k)jobstates[(r)*:-:*]} ;;
[?]*) # %?string argument:
# use $jobtexts to match for a job whose command *contains* <string>
job_id=${(k)jobtexts[(r)*${(Q)jobspec}*]} ;;
*) # %string argument:
# use $jobtexts to match for a job whose command *starts with* <string>
job_id=${(k)jobtexts[(r)${(Q)jobspec}*]} ;;
esac
# override preexec function arguments with job command
if [[ -n "${jobtexts[$job_id]}" ]]; then
1="${jobtexts[$job_id]}"
2="${jobtexts[$job_id]}"
fi
fi
# cmd name only, or if this is sudo or ssh, the next cmd
local CMD=${1[(wr)^(*=*|sudo|ssh|mosh|rake|-*)]:gs/%/%%}
local LINE="${2:gs/%/%%}"
title '$CMD' '%100>...>$LINE%<<'
2021-08-07 21:24:26 -07:00
}
# <<<
autoload -U add-zsh-hook
add-zsh-hook precmd mzc_termsupport_precmd
add-zsh-hook preexec mzc_termsupport_preexec
# <<<
# auto save and load working dir (allow `cd -` on start) >>>
# Load the last working directory
load_working_dir() {
# load the directory (and do validation to make sure it's actually a directory)
if test -f "$WORKING_DIR_SAVE_FILE"; then
local PREVIOUS_WORKING_DIR="$(cat "$WORKING_DIR_SAVE_FILE")"
if test -d "$(cat "$WORKING_DIR_SAVE_FILE")"; then
cd "$PREVIOUS_WORKING_DIR" || error $LINENO
else
echo "Invalid saved working directory ($PREVIOUS_WORKING_DIR)" > /dev/null
return 1
fi
else
echo "Invalid working directory save file ($WORKING_DIR_SAVE_FILE)" > /dev/null
return 1
fi
}
save_working_dir() {
if [ "$(pwd)" != "$HOME" ];then
pwd > "$WORKING_DIR_SAVE_FILE"
fi
}
autoload -U add-zsh-hook
add-zsh-hook chpwd save_working_dir
load_working_dir && cd - > /dev/null
# Case insensitive globbing (fix for termux)
[ -n "$TERMUX_VERSION" ] && setopt nocaseglob
# <<<
2021-08-07 21:24:26 -07:00
# <<<
# Optionally source the user's customized .zshrc
[ -f "$SHELL_CONFIG_DIR/zshrc.local" ] && source "$SHELL_CONFIG_DIR/zshrc.local" || true
2021-08-07 21:24:26 -07:00
2021-09-19 16:35:29 -07:00
# vim:fdm=marker:fmr=>>>,<<<:et:ft=sh:sw=3
2021-09-16 02:24:30 -07:00