umask 022

eval $(dircolors)

# completion options
setopt LIST_PACKED MENU_COMPLETE
# expansion and globbing options
setopt NO_NOMATCH
# history options
setopt SHARE_HISTORY EXTENDED_HISTORY HIST_FCNTL_LOCK HIST_IGNORE_ALL_DUPS HIST_REDUCE_BLANKS HIST_SAVE_NO_DUPS
# input/output options
setopt PRINT_EXIT_VALUE RM_STAR_SILENT
# job control options
setopt LONG_LIST_JOBS NO_HUP
# zle options
setopt NO_BEEP

zstyle ':completion:*' menu select=5

bindkey -v
export KEYTIMEOUT=1

autoload -U edit-command-line
zle -N edit-command-line
bindkey -M vicmd v edit-command-line

# always open tmux if interactive
[[ $- != *i* ]] && return
#[[ -z "$TMUX" ]] && (tmux -2 new-session -t default \; new-window || tmux -2 new-session -s default)
[[ -z "$TMUX" ]] && (tmux -2 attach -t default || tmux -2 new-session -s default)

# my Nix helpers
function nix-switch-generation {

	local gen=${1}

	if [[ -z "${gen}" ]]; then
		echo 'you must specify a generation ID!' >&2
		return 1
	fi

	nix-env --switch-generation ${gen} -p /nix/var/nix/profiles/system
	/nix/var/nix/profiles/system/bin/switch-to-configuration switch

}

function nix-depends {

	local pkg=${1}

	if [[ -z "${pkg}" ]]; then
		echo 'you must specify a packange name!' >&2
		return 1
	fi

	local host=$(hostname -s)

	cd /etc/nixos
	nix why-depends .\#nixosConfigurations.${host}.config.system.build.toplevel .\#nixosConfigurations.${host}.pkgs.${pkg} --derivation | cat
	cd ${OLDPWD}

}

function ntrace {

	if [[ -z ${argv} ]]; then
		echo 'you must specify a command to strace!' >&2
		return 1
	fi

	eval strace -f -e trace=network -s 10000 ${=argv[@]}

}

function wake {

	if [[ -z ${argv} ]]; then
		echo 'you must specify a host to wake!!' >&2
		return 1
	fi

	local host="${1}"

	case "${host}" in
		jupiter)
			host="8c:8c:aa:4e:e9:8c"
			;;
		neptune)
			host="38:f3:ab:59:08:10"
			;;
		saturn)
			host="38:f3:ab:59:06:e0"
			;;
		uranus)
			host="8c:8c:aa:4e:fc:aa"
			;;
		*)
			echo 'unknown host specified!' >&2
			return 1
			;;
	esac

	wol -vi 192.168.1.255 "${host}"

}

# prompt/theme shit
function precmd {

	local RC=${?}
	#local RC=${(%)RC-%?}
	
	print -nP '\n'
	
	# current user
	if [[ ${EUID} -eq 0 ]]; then
		print -nP '%{%S%F{red}%}%n%{%f%s%}'
	else
		print -nP '%{%F{magenta}%}%n%{%f%}'
	fi
	
	print -nP '@'
	
	# current host
	if [[ -n "$SSH_CLIENT" || -n "$SSH2_CLIENT" ]]; then
		print -nP '%{%F{yellow}%}%m%{%f%}'
	else
		print -nP '%{%F{green}%}%m%{%f%}'
	fi
	
	# connected terminal
	print -nP '/%{%U%}%l%{%u%} '
	
	# cwd
	print -nP '%{%F{cyan}%}%~%{%f%} '
	
	# job count
	JOBCOUNT='%j'
	if [[ ${(%)JOBCOUNT} -gt 0 ]]; then
		print -nP 'j=%{%F{yellow}%}%j%{%f%} '
	fi
	
	# previous return code
	if [[ ${RC} -ne 0 ]]; then
		print -nP 'rc=%{%F{red}%}'
		echo -n "${RC}"
		print -nP '%{%f%} '
	else
		print -nP 'rc=%{%F{green}%}'
		echo -n "${RC}"
		print -nP '%{%f%} '
	fi
	
	# time stamp
	print -P '%{%F{cyan}%}%D{%FT%T%z}%{%f%}'

}

PS1='%# '
