export PYTHONSTARTUP=${XDG_CONFIG_HOME:-~/.config}/pythonrc
## vim
export VIMINIT='let$MYVIMRC=($XDG_CONFIG_HOME??($HOME."/.config"))."/vim/.vimrc"|execute"source"$MYVIMRC'
-## wayland/gui env
-export XDG_SESSION_TYPE=${XDG_SESSION_TYPE:-wayland}
-export QT_QPA_PLATFORM=${QT_QPA_PLATFORM:-wayland-egl}
-export QT_WAYLAND_DISABLE_WINDOWDECORATION=${QT_WAYLAND_DISABLE_WINDOWDECORATION:--1}
-export SDL_VIDEODRIVER=${SDL_VIDEODRIVER:-wayland}
-export TERMINAL=${TERMINAL:-$(whence -p konsole footclient urxvt xterm)[(f)1]}
### imports
autoload -Uz zmv
unset cache
### keys
-bindkey -v
-KEYTIMEOUT=10
-## populate key array
-if (( $#terminfo == 0 )) {
- # terminfo is not set or empty
+## set up zkbd-style key array
+if [[ ! -v _sev_force_zkbd && ( -v terminfo || -v termcap ) ]] {
+ # use application (keypad transmit) mode if the terminal supports it
+ # NOTE: we have to do this because termcap/terminfo keys are usually
+ # defined in application mode. terminals that do not define these
+ # capabilities are assumed to always be in application mode.
+ if [[ ( -v terminfo[smkx] && -v terminfo[rmkx] ) ||
+ ( -v termcap[ks] && -v terminfo[ke] ) ]] {
+ autoload -Uz add-zle-hook-widget
+ function _enter-application-mode {
+ [[ -v terminfo[smkx] ]] && echoti smkx || echotc ks
+ }
+ add-zle-hook-widget line-init _enter-application-mode
+ function _exit-application-mode {
+ [[ -v terminfo[rmkx] ]] && echoti rmkx || echotc ke
+ }
+ add-zle-hook-widget line-finish _exit-application-mode
+ trap _exit-application-mode EXIT
+ }
+ # pull keys from terminfo/termcap
+ # TODO: Menu and more Shift- modifiers
+ typeset -gA key
+ typeset -lA newkey
+ if [[ -v terminfo ]] {
+ src=terminfo
+ newkey=(F1 kf1 F2 kf2 F3 kf3 F4 kf4 F5 kf5 F6 kf6 F7 kf7 F8 kf8 F9 kf9
+ F10 kf10 F11 kf11 F12 kf12
+ Backspace kbs
+ Shift-Tab kcbt
+ Insert kich1
+ Home khome
+ PageUp kpp
+ Delete kdch1
+ End kend
+ PageDown knp
+ Up kcuu1
+ Down kcud1
+ Left kcub1
+ Right kcuf1
+ )
+ } elif [[ -v termcap ]] {
+ src=termcap
+ newkey=(F1 k1 F2 k2 F3 k3 F4 k4 F5 k5 F6 k6 F7 k7 F8 k8 F9 k9
+ F10 k\; F11 F1 F12 F2
+ Backspace kb
+ Shift-Tab kB
+ Insert kI
+ Home kh
+ PageUp kP
+ Delete kD
+ End @7
+ PageDown kN
+ Up ku
+ Down kd
+ Left kl
+ Right kr
+ )
+ }
+ for k v (${(kv)newkey}) {
+ key[$k]=${${(P)src}[$v]}
+ }
+ unset k v src newkey
+} else {
+ # use zkbd if termcap/terminfo unavailable
function find_keymap {
for f in ${ZDOTDIR:-~}/.zkbd/$TERM{-${DISPLAY:-$VENDOR-$OSTYPE},}
[[ -f $f ]] && keymap=$f && break
if [[ -n $keymap ]] {
source $keymap
} else {
- echo "Failed to source keymap file $keymap" >&2
+ echo -E "Failed to source keymap file $keymap" >&2
}
unfunction find_keymap; unset keymap
-} else {
- # activate application mode for zle so terminfo keys work
- # NOTE: don't do this for zkbd since application mode shouldn't have been
- # enabled by zkbd when the keymap file was generated
- if [[ -v terminfo[smkx] && -v terminfo[rmkx] ]] {
- autoload -Uz add-zle-hook-widget
- function _enter-application-mode { echoti smkx }
- add-zle-hook-widget line-init _enter-application-mode
- function _exit-application-mode { echoti rmkx }
- add-zle-hook-widget line-finish _exit-application-mode
- trap _exit-application-mode EXIT
- }
- # match zkbd hash as best we can to terminfo
- typeset -gA key
- key=(F1 kf1 F2 kf2 F3 kf3 F4 kf4 F5 kf5 F6 kf6 F7 kf7 F8 kf8 F9 kf9
- F10 kf10 F11 kf11 F12 kf12
- Backspace kbs
- Backtab kcbt
- Shift-Tab kcbt
- Insert kich1
- Home khome
- PageUp kpp
- Delete kdch1
- End kend
- PageDown knp
- Up kcuu1
- Down kcud1
- Left kcub1
- Right kcuf1
- )
- for k v in ${(kv)key}; do
- key[$k]=$terminfo[$v]
- done; unset k v
}
## load history search
zle -N down-line-or-beginning-search
## bind keys in both viins and vicmd modes
+# NOTE: cursor keys are bound to normal/raw/nontransmit mode strings by
+# default, and keys like Home and End are not bound at all, so we rebind
+# everything to cover all scenarios
typeset -A a
a=(
#key viins vicmd
Left 'backward-char'
Right 'forward-char'
)
-for k v in ${(kv)a}; do
+for k v (${(kv)a}) {
k=$key[$k]
- if [[ -z "$k" ]] { continue }
+ if [[ -z $k ]] { continue }
v=($=v)
bindkey -- $k $v[1]
- if [[ $v[2] == '-' ]] {
+ if [[ $v[2] == - ]] {
# copy viins to vicmd verbatim
bindkey -a -- $k $v[1]
} elif (( $#v != 1 )) {
# copy viins to vicmd and prepend vi- to it
bindkey -a -- $k vi-$v[1]
}
-done
+}
unset a k v
### aliases
# be paranoid
alias cp='cp -ip'
alias mv='mv -i'
+alias zm='noglob zmv -WiM'
+alias zc='noglob zmv -WiC'
+alias zl='noglob zmv -WiL'
+alias sm='noglob zmv -Wip"sudo mv"'
+alias sc='noglob zmv -Wip"sudo cp"'
+alias sl='noglob zmv -Wip"sudo ln"'
if [[ "$OSTYPE" =~ '^freebsd' ]] {
# don't confirm if only a few files are deleted
alias rm='rm -I'
alias gd='git diff'
alias gdh='git diff HEAD'
alias ga='git add'
+alias ga.='git add .'
alias gc='git commit'
alias gca='git commit --amend'
alias gp='git push'
eval "${$(zoxide init zsh):s#_files -/#_cd#}"
alias cd=z
}
+alias cd..=up
## dotfiles
-alias dfu='d=${$(echo ~/.zshenv):P:h:h};GIT_DIR=$d/.git GIT_WORK_TREE=$d git pull'
+alias dfu='d=${$(echo -E - ~/.zshenv):P:h:h};GIT_DIR=$d/.git GIT_WORK_TREE=$d git pull'
### hooks
autoload -Uz add-zsh-hook
function vol {
if [[ -z "$1" ]] {
for x in $(mixerctl -a | grep 'outputs\.master'); do
- echo $x
+ echo -E - $x
done
return
}