zsh now sets its own path in zshrc
zshenv.local is now loaded last
all bsdisms have been moved to blocks
netbsd support added for zsh
fixed wscons issues with xterm escapes
workaround for %f prompt escape on wscons
-if [ -f ~/.zshenv.local ]; then
- source ~/.zshenv.local
-fi
-
export EDITOR=vim
export XDG_CONFIG_HOME=~/etc
export XDG_CONFIG_DIRS=~/.config:/etc/xdg
export EDITOR=vim
export XDG_CONFIG_HOME=~/etc
export XDG_CONFIG_DIRS=~/.config:/etc/xdg
export GREP_OPTIONS=--color=auto
export PYTHONSTARTUP=~/.pythonrc
export GREP_OPTIONS=--color=auto
export PYTHONSTARTUP=~/.pythonrc
+
+if [[ -f ~/.zshenv.local ]]; then
+ source ~/.zshenv.local
+fi
setopt autocd extendedglob
unsetopt beep
setopt autocd extendedglob
unsetopt beep
+### path
+# typeset -U makes every array entry unique; /usr/{pkg,local} are bsdisms
+typeset -U path
+path=({~/,/,/usr/}sbin {~/,/,/usr/}bin /usr/pkg/{s,}bin /usr/X11R{7,6}/bin
+ /usr/local/{s,}bin $path)
+
+### history
setopt appendhistory
HISTFILE=~/.histfile
HISTSIZE=100
SAVEHIST=100
setopt appendhistory
HISTFILE=~/.histfile
HISTSIZE=100
SAVEHIST=100
bindkey "^[[7~" beginning-of-line #Home
bindkey -a "^[[7~" beginning-of-line
bindkey "^[[8~" end-of-line #End
bindkey -a "^[[8~" end-of-line
bindkey "^[[3~" delete-char #Del
bindkey -a "^[[3~" delete-char
bindkey "^[[7~" beginning-of-line #Home
bindkey -a "^[[7~" beginning-of-line
bindkey "^[[8~" end-of-line #End
bindkey -a "^[[8~" end-of-line
bindkey "^[[3~" delete-char #Del
bindkey -a "^[[3~" delete-char
-# bsd vt
-bindkey "^[[H" beginning-of-line #Home
-bindkey -a "^[[H" beginning-of-line
-bindkey "^[[F" end-of-line #End
-bindkey -a "^[[F" end-of-line
-
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
[[ -n "$key[Up]" ]] && bindkey -- "$key[Up]" up-line-or-beginning-search
[[ -n "$key[Down]" ]] && bindkey -- "$key[Down]" down-line-or-beginning-search
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
[[ -n "$key[Up]" ]] && bindkey -- "$key[Up]" up-line-or-beginning-search
[[ -n "$key[Down]" ]] && bindkey -- "$key[Down]" down-line-or-beginning-search
alias h="history -25"
alias j="jobs -l"
alias l="ls -AF"
alias ll="ls -lAFho"
alias h="history -25"
alias j="jobs -l"
alias l="ls -AF"
alias ll="ls -lAFho"
local p="ps -aSdxwwouser=USR -ogroup=GRP -opid,nice=N \
-o%cpu,%mem,tt,stat,start=START -oetime,command | ${PAGER:-more} -Se"
alias pa="$p"
alias spa="sudo $p"
unset p
local p="ps -aSdxwwouser=USR -ogroup=GRP -opid,nice=N \
-o%cpu,%mem,tt,stat,start=START -oetime,command | ${PAGER:-more} -Se"
alias pa="$p"
alias spa="sudo $p"
unset p
-# sound source
-function s { sysctl hw.snd.default_unit${1:+\=$1} }
-# py venv
alias va="source bin/activate"
alias vd="deactivate"
alias va="source bin/activate"
alias vd="deactivate"
alias cp='cp -ip'
alias mv='mv -i'
alias cp='cp -ip'
alias mv='mv -i'
-alias rm='rm -I'
-# ports
-function portpkg {
- case "$1" {
- build|run)
- sudo pkg install -AU $(make ${1}-depends-list |
- sed 's_/usr/ports/_ _' | tr -d '\n')
- ;;
- *) echo "Usage: \`portpkg <build|run>' in a port directory"
- return 1;;
- }
+if [[ "$OSTYPE" = "freebsd" ]] {
+ # don't confirm if only a few files are deleted
+ alias rm='rm -I'
+} else {
+ alias rm='rm -i'
-PROMPT='%F{$VICOL}%n%f@%F{$VICOL}%2m%f%(?../%F{red}$?%f)%# '
-RPROMPT='%F{yellow}${vcs_info_msg_0_:-%~}%f %T'
+local f
+if [[ "$TERM" = "wsvt25" ]] {
+ # fix for wscons
+ f="%F{white}"
+} else {
+ f="%f"
+}
+PROMPT='%F{$VICOL}%n'"$f"'@%F{$VICOL}%2m'"$f"'%(?../%F{red}$?'"$f"')%# '
+RPROMPT='%F{yellow}${vcs_info_msg_0_:-%~}'"$f"' %T'
+unset f
+## change color based on zle vi mode
function zle-line-init zle-keymap-select {
VICOL="${${KEYMAP:/vicmd/red}:/(main|viins)/green}"
zle reset-prompt
function zle-line-init zle-keymap-select {
VICOL="${${KEYMAP:/vicmd/red}:/(main|viins)/green}"
zle reset-prompt
zle -N zle-line-init
zle -N zle-keymap-select
zle -N zle-line-init
zle -N zle-keymap-select
autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git
autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git
-zstyle ':vcs_info:git*' formats "%c%u%%F{green}%r/%b%%f/%%F{yellow}%S%%f"
-zstyle ':vcs_info:git*' actionformats "%%F{red}(%a)%%f %c%u%%F{green}%r/%b%%f/\
-%%F{yellow}%S%%f"
+zstyle ':vcs_info:git*' formats "%c%u%%F{green}%r/%b%%F{white}/%%F{yellow}%S%%f"
+zstyle ':vcs_info:git*' actionformats "%%F{red}(%a)$p %c%u%%F{green}%r/%b$p/%%F{yellow}%S$p"
#zstyle ':vcs_info:git*' check-for-changes true #too slow
zstyle ':vcs_info:git*:.dotfiles' check-for-changes true
zstyle ':vcs_info:git*' check-for-staged-changes true
zstyle ':vcs_info:git*' stagedstr "%F{blue}+"
zstyle ':vcs_info:git*' unstagedstr "%F{red}*"
#zstyle ':vcs_info:git*' check-for-changes true #too slow
zstyle ':vcs_info:git*:.dotfiles' check-for-changes true
zstyle ':vcs_info:git*' check-for-staged-changes true
zstyle ':vcs_info:git*' stagedstr "%F{blue}+"
zstyle ':vcs_info:git*' unstagedstr "%F{red}*"
+### hooks
+local _exectime
function precmd {
# change terminal title
function precmd {
# change terminal title
- print -Pn "\e]0;%(1j,%j,)%#${SSH_CLIENT+$USER@$HOST:}%~\a"
+ print -Pn "\e]2;%(1j,%j,)%#${SSH_CLIENT+$USER@$HOST:}%~\e\\"
# update vcs
vcs_info
# bell if exec takes 5s
# update vcs
vcs_info
# bell if exec takes 5s
}
function preexec {
# change terminal title to show command
}
function preexec {
# change terminal title to show command
- print -Pnf "\e]0;%s\a" "%#${SSH_CLIENT+$USER@$HOST:}$1"
+ print -Pnf "\e]2;%s\e\\" "%#${SSH_CLIENT+$USER@$HOST:}$1"
# save last exec time for bell
_exectime=$SECONDS
}
# save last exec time for bell
_exectime=$SECONDS
}
+### freebsd-specific
+if [[ "$OSTYPE" = "freebsd" ]] {
+ ## vt binds
+ bindkey "^[[H" beginning-of-line #Home
+ bindkey -a "^[[H" beginning-of-line
+ bindkey "^[[F" end-of-line #End
+ bindkey -a "^[[F" end-of-line
+
+ ## oss sound source
+ function s { sysctl hw.snd.default_unit${1:+\=$1} }
+
+ ## install port dependencies from pkg (like pkgsrc `bmake bin-install')
+ function portpkg {
+ case "$1" {
+ build|run)
+ sudo pkg install -AU $(make ${1}-depends-list |
+ sed 's_/usr/ports/_ _' | tr -d '\n')
+ ;;
+ *) echo "Usage: \`portpkg <build|run>' in a port directory"
+ return 1;;
+ }
+ }
+}
+
# The following lines were added by compinstall
zstyle ':completion:*' auto-description 'specify: %d'
zstyle ':completion:*' expand suffix
# The following lines were added by compinstall
zstyle ':completion:*' auto-description 'specify: %d'
zstyle ':completion:*' expand suffix
# term lock
if [ -z "$DISPLAY" ]; then
# term lock
if [ -z "$DISPLAY" ]; then
+ if [ "$OSTYPE" = "freebsd" ]; then
+ lock -npv
+ else
+ lock -np
+ fi
img=~/tmp/lock.png
if [ -f "$img" ]; then
# rudimentary attempt to prevent multiple locks
img=~/tmp/lock.png
if [ -f "$img" ]; then
# rudimentary attempt to prevent multiple locks
- # XXX: could block lock and replace with malicious locker
+ # XXX: could block lock and replace with malicious locker to grab password
echo "Lock file exists at '$img', exiting"
exit 1
fi
res="$(xdpyinfo | grep dimensions | awk '{print $2}')"
scale=0.07
ffmpeg -y -loglevel 0 \
echo "Lock file exists at '$img', exiting"
exit 1
fi
res="$(xdpyinfo | grep dimensions | awk '{print $2}')"
scale=0.07
ffmpeg -y -loglevel 0 \
- -s "$res" -f x11grab -i $DISPLAY -i ~/share/l/overlay.png \
+ -s "$res" -f x11grab -i $DISPLAY -i ~/share/lck/overlay.png \
-filter_complex "
[0]
scale=iw * $scale:ih * $scale,
-filter_complex "
[0]
scale=iw * $scale:ih * $scale,
#!/bin/sh
if [ 0 -eq 1 ]; then
#!/bin/sh
if [ 0 -eq 1 ]; then
- alias mkdir="echo mkdir"
alias ln="echo ln"
alias rm="echo rm"
alias cap_mkdb="echo cap_mkdb"
alias unlink="echo unlink"
fi
alias ln="echo ln"
alias rm="echo rm"
alias cap_mkdb="echo cap_mkdb"
alias unlink="echo unlink"
fi
-#fix permissions from git (TODO: should probably move this to git hook)
-chmod go= base/.zshenv base/.Xresources
-
#create preferred folder structure
#create preferred folder structure
mkdir -p bin etc share .urxvt/ext > /dev/null 2>&1
mkdir -m 700 tmp tmp/vim > /dev/null 2>&1
cd -
#accomodate linuxisms
fex='-perm -ugo=x'
mkdir -p bin etc share .urxvt/ext > /dev/null 2>&1
mkdir -m 700 tmp tmp/vim > /dev/null 2>&1
cd -
#accomodate linuxisms
fex='-perm -ugo=x'
-# TODO: should probably do this better
-case "`uname`" in
- *BSD*) lnargs=-sFhvw
- d1='-depth 1'
- bsd=yes;;
- *) lnargs=-sfnv
- d1='-mindepth 1 -maxdepth 1'
- #android busybox find doesn't have -execute
- #and its sh doesn't set OSTYPE :DD
- if [ -z "$ANDROID_ROOT" ]; then
- fex=-executable
- fi;;
+case "$OSTYPE" in
+ # TODO: make links safer for systems without -Fw
+ freebsd) lnargs=-sFhvw;;
+ netbsd|openbsd) lnargs=-sfhv;;
+ *) lnargs=-sfnv
+ #android busybox find doesn't have -executable
+ #and its sh doesn't set OSTYPE :DD
+ if [ -z "$ANDROID_ROOT" ]; then
+ fex=-executable
+ fi;;
[ -L "$1" -o \! -e "$1" ] && ln $lnargs "${2:-$x}" "$1"
}
[ -L "$1" -o \! -e "$1" ] && ln $lnargs "${2:-$x}" "$1"
}
-find "$PWD/base" $d1 | while read -r x; do
+find "$PWD/base" -mindepth 1 -maxdepth 1 | while read -r x; do
l "$HOME/`basename "$x"`"
done
l "$HOME/`basename "$x"`"
done
-find bin share $d1 | while read -r x; do
+find bin share -mindepth 1 -maxdepth 1 | while read -r x; do
l "$HOME/$x" "$PWD/$x"
done
l "$HOME/$x" "$PWD/$x"
done
-find "$PWD/xdg" $d1 | while read -r x; do
+find "$PWD/xdg" -mindepth 1 -maxdepth 1 | while read -r x; do
l "${XDG_CONFIG_HOME:-$HOME/etc}/`basename "$x"`"
done
find "$PWD/urxvt-ext" -type f $fex -mindepth 1 -maxdepth 2 | while read -r x; do
l "${XDG_CONFIG_HOME:-$HOME/etc}/`basename "$x"`"
done
find "$PWD/urxvt-ext" -type f $fex -mindepth 1 -maxdepth 2 | while read -r x; do
+if [ "$OSTYPE" = "freebsd" ]; then
touch .hushlogin
#FreeBSD tries `_secure_path' on `.login_conf' before reading the database,
touch .hushlogin
#FreeBSD tries `_secure_path' on `.login_conf' before reading the database,