|
|
|
# vim: ft=zsh
|
|
|
|
#
|
|
|
|
# Executes commands in every top-level or login shell
|
|
|
|
#
|
|
|
|
# ATTENTION: This differs from usual zsh behaviour! In addition to traditional
|
|
|
|
# login shells, this is also sourced by any top-level ($SHLVL=1)
|
|
|
|
# non-login shells. (In the latter case, from zshenv)
|
|
|
|
#
|
|
|
|
# This is useful because it only gets executed once for any given tree
|
|
|
|
# of zsh-processes, saving resources on sub-shell invocation while still
|
|
|
|
# providing a consistent environment in login and non-login shells.
|
|
|
|
#
|
|
|
|
# Then why also source it in non-interactive shells?
|
|
|
|
# Because it prevents desync between scripts and interactive prompts.
|
|
|
|
# Ever tried to debug a script and ended up with "But it works in the prompt!"?
|
|
|
|
#
|
|
|
|
# For code intended for login shells only, use zlogin instead.
|
|
|
|
#
|
|
|
|
|
|
|
|
#
|
|
|
|
# Browser
|
|
|
|
#
|
|
|
|
if [[ "$OSTYPE" == darwin* ]]; then
|
|
|
|
export BROWSER=open
|
|
|
|
elif (( $+commands[termux-open] )); then
|
|
|
|
export BROWSER=termux-open
|
|
|
|
elif (( $+commands[xdg-open] )); then
|
|
|
|
export BROWSER=xdg-open
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Editors
|
|
|
|
#
|
|
|
|
if (( $+commands[nvim] )); then
|
|
|
|
export EDITOR=nvim
|
|
|
|
export VISUAL=nvim
|
|
|
|
else
|
|
|
|
export EDITOR=vim
|
|
|
|
export VISUAL=vim
|
|
|
|
fi
|
|
|
|
|
|
|
|
export PAGER='less'
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Language
|
|
|
|
#
|
|
|
|
if [[ -z "$LANG" ]]; then
|
|
|
|
export LANG='en_US.UTF-8'
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Termux
|
|
|
|
#
|
|
|
|
if (( $+commands[termux-info] )); then
|
|
|
|
export TMPDIR="$PREFIX/tmp"
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Terminfo
|
|
|
|
# Detect missing profiles and try to fall back
|
|
|
|
#
|
|
|
|
_zp_terminfo_paths=("$HOME/.terminfo" "/etc/terminfo" "/lib/terminfo" "/usr/share/terminfo")
|
|
|
|
_zp_terminfo_found=
|
|
|
|
_zp_terminfo_name="${TERM:0:1}/$TERM"
|
|
|
|
for _zp_terminfo_path in "${_zp_terminfo_paths[@]}"; do
|
|
|
|
if [[ -f "$_zp_terminfo_path/$_zp_terminfo_name" ]]; then
|
|
|
|
_zp_terminfo_found="$_zp_terminfo_path"
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
if [ -z "$_zp_terminfo_found" ]; then
|
|
|
|
if [[ "${TERM:0:7}" == "konsole" ]] || echo "$TERM" | grep -q 256color; then
|
|
|
|
_zp_terminfo_color=-256color
|
|
|
|
else
|
|
|
|
_zp_terminfo_color=
|
|
|
|
fi
|
|
|
|
if [[ "${TERM:0:4}" == "tmux" ]]; then
|
|
|
|
_zp_terminfo_base=screen
|
|
|
|
else
|
|
|
|
_zp_terminfo_base=xterm
|
|
|
|
fi
|
|
|
|
export TERM=$_zp_terminfo_base$_zp_terminfo_color
|
|
|
|
if [[ -o INTERACTIVE || -o SHIN_STDIN ]]; then
|
|
|
|
echo "NOTE: Falling back to TERM=$TERM (terminfo/$_zp_terminfo_name not found)" >&2
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
#
|
|
|
|
# KDE
|
|
|
|
#
|
|
|
|
export KDE_DEVEL_HOME=$HOME/Development/KDE
|
|
|
|
if [ -d "$KDE_DEVEL_HOME" ]; then
|
|
|
|
if [ -d "$KDE_DEVEL_HOME/kdesrc-build" ]; then
|
|
|
|
KDE_SRC_BUILD="$KDE_DEVEL_HOME/kdesrc-build"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
unset KDE_DEVEL_HOME
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Vitasdk
|
|
|
|
#
|
|
|
|
export VITASDK="/usr/local/vitasdk"
|
|
|
|
if [ -d "$VITASDK/bin" ]; then
|
|
|
|
VITASDK_BIN="$VITASDK/bin"
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Paths
|
|
|
|
#
|
|
|
|
|
|
|
|
# Set the the list of directories that cd searches.
|
|
|
|
# cdpath=(
|
|
|
|
# $cdpath
|
|
|
|
# )
|
|
|
|
|
|
|
|
# Set the list of directories that Zsh searches for programs.
|
|
|
|
path=(
|
|
|
|
$HOME/.local/bin
|
|
|
|
$DOTFILES/bin
|
|
|
|
$KDE_SRC_BUILD
|
|
|
|
$VITASDK_BIN
|
|
|
|
/usr/local/{bin,sbin}
|
|
|
|
/snap/bin
|
|
|
|
$path
|
|
|
|
)
|
|
|
|
|
|
|
|
# Set the list of directories that Python searches for modules.
|
|
|
|
pythonpath=(
|
|
|
|
$DOTFILES/lib/python
|
|
|
|
"${(@s|:|)PYTHONPATH}"
|
|
|
|
)
|
|
|
|
|
|
|
|
# Ensure path arrays do not contain duplicates.
|
|
|
|
typeset -gU cdpath fpath mailpath path pythonpath
|
|
|
|
|
|
|
|
# zsh only maps the array and text versions for PATH
|
|
|
|
export PYTHONPATH="${(j|:|)pythonpath}"
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Less
|
|
|
|
#
|
|
|
|
|
|
|
|
# Set the default Less options.
|
|
|
|
# Mouse-wheel scrolling has been disabled by -X (disable screen clearing).
|
|
|
|
# Remove -X and -F (exit if the content fits on one screen) to enable it.
|
|
|
|
export LESS='-F -g -i -M -R -S -w -X -z-4'
|
|
|
|
|
|
|
|
# Set the Less input preprocessor.
|
|
|
|
if (( $+commands[lesspipe.sh] )); then
|
|
|
|
export LESSOPEN='| /usr/bin/env lesspipe.sh %s 2>&-'
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Temporary Files
|
|
|
|
#
|
|
|
|
if [[ ! -d "$TMPDIR" ]]; then
|
|
|
|
export TMPDIR="/tmp/$UID"
|
|
|
|
mkdir -p -m 700 "$TMPDIR"
|
|
|
|
fi
|
|
|
|
|
|
|
|
TMPPREFIX="${TMPDIR%/}/zsh"
|
|
|
|
if [[ ! -d "$TMPPREFIX" ]]; then
|
|
|
|
mkdir -p "$TMPPREFIX"
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# SSH
|
|
|
|
#
|
|
|
|
if (( $+commands[systemctl] )); then
|
|
|
|
eval "$(systemctl --user show-environment | grep '^SSH_AUTH_SOCK=')"
|
|
|
|
fi
|
|
|
|
if [ -n $SSH_AUTH_SOCK -a -f "$XDG_RUNTIME_DIR/ssh-agent.sock" ]; then
|
|
|
|
SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.sock"
|
|
|
|
fi
|
|
|
|
export SSH_AUTH_SOCK
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Arch Build system
|
|
|
|
#
|
|
|
|
if [ -f /etc/arch-release ]; then
|
|
|
|
export ASPROOT=$HOME/aur/ABS/.asp
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# LaTeX
|
|
|
|
#
|
|
|
|
export TEXMFHOME=$DOTFILES/texmf
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Local overrides
|
|
|
|
#
|
|
|
|
[[ -e "$DOTFILES/zsh/zprofile.local" ]] && source "$DOTFILES/zsh/zprofile.local"
|
|
|
|
|