From fab483dd02670f3c8ac23c7ab274a8ddc1d6a6be Mon Sep 17 00:00:00 2001 From: ds6 Date: Wed, 12 Sep 2018 21:27:47 -0500 Subject: [PATCH] move to promptinit, cleanup zshrc, add up alias update dependencies also added Noto Emoji to fontconfig, but it doesnt appear to work --- base/.vimrc | 4 ++ base/.zsh/prompt_ds6_setup | 89 ++++++++++++++++++++++++++++++++++++ base/.zshrc | 90 ++++++++++++++++++------------------- xdg/fontconfig/fonts.conf | 5 +++ xorg/icons/paper-icon-theme | 2 +- 5 files changed, 142 insertions(+), 48 deletions(-) create mode 100644 base/.zsh/prompt_ds6_setup diff --git a/base/.vimrc b/base/.vimrc index fb3c4d4..0affbd2 100644 --- a/base/.vimrc +++ b/base/.vimrc @@ -30,6 +30,10 @@ autocmd InsertEnter * setlocal norelativenumber autocmd InsertLeave * setlocal relativenumber autocmd FocusLost * setlocal norelativenumber autocmd FocusGained * setlocal relativenumber +highlight WhiteSpaceBol ctermfg=DarkBlue +highlight WhiteSpaceMol ctermfg=Black +match WhiteSpaceMol / / +2match WhiteSpaceBol /\(^ \+\)\|\( \+$\)/ let g:Modeliner_format='ft= fenc= et ts= sts= sw= tw=' diff --git a/base/.zsh/prompt_ds6_setup b/base/.zsh/prompt_ds6_setup new file mode 100644 index 0000000..77c1a6d --- /dev/null +++ b/base/.zsh/prompt_ds6_setup @@ -0,0 +1,89 @@ +prompt_ds6_help() { + cat << EOF +prompt ds6 + +The first parameter determines whether or not to use right-aligned status +text, or to put it above the command line. + +If 'prompt' or 'ssh' are 'random', their respective value will be +procedurally generated using the machine hostname as a seed; if the +machine is connected to SSH, the 'prompt' value will be replaced with +the 'ssh' value. + +All other parameters are Zsh PROMPT_SUBST color values wrapped in '%F{}'. + +Defaults are white, green, random, red, blue, yellow, and darkyellow +respectively. + +EOF +} + +local prompt_ds6_vimode= + +function prompt_ds6_setup() { + # TODO: check for color terminal. never will use B&W term but still a XXX + local n p _p s r c d u + #TODO remove n? + m="${1:-2line}" # Mode + n="${2:-white}" # Normal + p="${3:-green}" # Prompt + s="${4:-random}" # Ssh prompt + r="${5:-red}" # uRgent + c="${6:-blue}" # Comment + d="${7:-yellow}" # Dir + u="${8:-darkyellow}" # Unwritable + + # [AC]CURSED COMMAND + # concatenate the numerical values of each letter of the hostname, + # moduloing by the number of possible colors. + generated=$(uname -n | od -An -td1 | awk -F' ' \ + "{for (i=1; i<=NF; i++) {sum+=1; sum*=\$i; sum%=`echotc Co`} print sum}") + [[ "$p" = 'random' ]] && p=$generated + [[ "$s" = 'random' ]] && s=$generated + + # use ssh color if connected + p="${${SSH_CLIENT+$s}:-$p}" + + local clock="%F{$n}%T%f" dirvcs="%F{$d}"'${vcs_info_msg_0_:-%~}'"%f" + local battery=/sys/class/power_supply/BAT0/capacity + [[ -e "$battery" ]] && clock+=" `cat $battery`%%" + local vicol='%F{${${prompt_ds6_vimode:+'"$r"'}:-'"$c"'}}' + case "$m" { + 2line) + PROMPT="%f $clock $dirvcs"$'\n'"%F{$c}>>> " + unset RPROMPT + ;; + right) + RPROMPT="$dirvcs $clock" + PROMPT="" + ;; + *) + echo "Unknown prompt mode $m" + return + ;; + } + PROMPT="$PROMPT%(1j,%F{$c}%j,)$vicol%#%F{$p}%n%F{$n}@%F{$p}%2m%(?..%F{$n}/%F{$r}\$?)%F{$n}: " + POSTEDIT="`print -P "%F{$n}%f"`" + zstyle ':vcs_info:git*' formats "%c%u%%F{$p}%r/%b%%F{$n}/%%F{$d}%S%%f" + zstyle ':vcs_info:git*' actionformats "%%F{$r}(%a)%f %c%u%%F{$p}%r/%b%f/%%F{$d}%S%f" + zstyle ':vcs_info:git*' stagedstr "%F{$c}+" + zstyle ':vcs_info:git*' unstagedstr "%F{$r}*" + + add-zsh-hook precmd prompt_ds6_precmd + zle -N zle-line-init + zle -A zle-line-init zle-keymap-select +} + +# change color based on zle vi mode +function zle-line-init { + prompt_ds6_vimode="${KEYMAP:/(main|viins)/}" + zle reset-prompt +} + +function prompt_ds6_precmd() { + # TODO: check if vcs_info is autoloaded + vcs_info +} + +prompt_ds6_setup "$@" +# vim: set et fenc=utf-8 ft=zsh sts=4 sw=4 ts=8 tw=0 : diff --git a/base/.zshrc b/base/.zshrc index 393d229..6cbdfe0 100644 --- a/base/.zshrc +++ b/base/.zshrc @@ -1,5 +1,8 @@ +### user-local fpath +fpath=(~/.zsh ~/.zsh/functions/Prompts "${fpath[@]}") + ### options -setopt autocd extendedglob +setopt autocd extendedglob promptsubst unsetopt beep ### history @@ -19,24 +22,32 @@ bindkey -a "^[[8~" end-of-line bindkey "^[[3~" delete-char #Del bindkey -a "^[[3~" delete-char ## history 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 +autoload -Uz up-line-or-beginning-search down-line-or-beginning-search && { + if [[ -n "$key[Up]" ]] { + zle -N up-line-or-beginning-search + bindkey -- "$key[Up]" up-line-or-beginning-search + } + if [[ -n "$key[Down]" ]] { + bindkey -- "$key[Down]" down-line-or-beginning-search + zle -N down-line-or-beginning-search + } +} ### aliases alias h="history -25" alias j="jobs -l" alias l="ls -AF" +alias e="${EDITOR:-vi}" # TODO: make sure vi is there or use safe default if [[ "$OSTYPE" =~ '^(free|net)bsd' ]] { alias ll="ls -lAFho" } else { alias ll="ls -lAFh" } ## ps -local p="" -if { which pstree >/dev/null 2>&1 && [[ ! "$(readlink -f $(which pstree))" =~ "/busybox" ]] } { +local p= +if { which pstree >/dev/null 2>&1 && \ + [[ ! "$(readlink -f $(which pstree))" =~ "/busybox" ]] } { + # use pstree, but NOT busybox pstree because it kinda sucks p="pstree -wg3" } elif [[ "$OSTYPE" =~ '^freebsd' ]] { p="ps -aSdfxwwouser=USR -ogroup=GRP -opid,nice=NI \ @@ -66,54 +77,24 @@ if [[ "$OSTYPE" =~ '^freebsd' ]] { # don't confirm if only a few files are deleted alias rm='rm -I' } else { - # TODO: similar behavior for non-freebsd + # TODO: similar behavior for non-freebsd, or impliment in zsh alias rm='rm -i' } - -### prompt -setopt prompt_subst -# DEPR: color reset added to NetBSD in PR/53245, following is not needed for recent releases -#local f= -#XXX: can't think of a way to tell if ssh client is on wscons, just kludge 24/7 -#if [[ "$OSTYPE" = "netbsd" && ( "$TERM" =~ "^wsvt" || "$TERM" =~ '^vt' ) ]] { -# # 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' - -## change color based on zle vi mode -function zle-line-init zle-keymap-select { - VICOL="${${KEYMAP:/vicmd/red}:/(main|viins)/green}" - zle reset-prompt +## go up directories +function up() { + cd $(printf '../%.0s' {1..${1:-1}}) } -zle -N zle-line-init -zle -N zle-keymap-select - -## vcs -autoload -Uz vcs_info -zstyle ':vcs_info:*' enable git -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)%f %c%u%%F{green}%r/%b%f/%%F{yellow}%S%f' -#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}*" - -#unset f ### hooks local _exectime= function precmd { # change terminal title + # TODO: update and send BEL when job status changes print -Pn "\e]2;%(1j,%j,)%#${SSH_CLIENT+$USER@$HOST:}%~\e\\" - # update vcs - vcs_info # bell if exec takes 5s if ((SECONDS - _exectime >= 5)) print "\a" + # we could update vcs_info here, but let prompt take care of it + # if it doesn't use vcs, it can be ignored safely } function preexec { # change terminal title to show command @@ -177,10 +158,20 @@ case "$OSTYPE"; in *) ## sound # TODO: test alsa/oss/sndio/portaudio/pulse in order of importance + function s() {} esac +### modules & styles +## vcs +autoload -Uz vcs_info +zstyle ':vcs_info:*' enable git +#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 + +## compinit # The following lines were added by compinstall -zstyle ':completion:*' auto-description 'specify: %d' +zstyle ':completion:*' auto-description '[arg] %d' zstyle ':completion:*' expand suffix zstyle ':completion:*' format '# %d' zstyle ':completion:*' group-name '' @@ -200,4 +191,9 @@ autoload -Uz compinit compinit # End of lines added by compinstall -# vim: ts=8:sts=4:sw=4:et:tw=79 +## prompt +# do this last so prompt can potentially override +autoload -Uz promptinit && promptinit +prompt ds6 + +# vim: set et sts=4 sw=4 ts=8 tw=79 : diff --git a/xdg/fontconfig/fonts.conf b/xdg/fontconfig/fonts.conf index fd68bb1..8fd5375 100644 --- a/xdg/fontconfig/fonts.conf +++ b/xdg/fontconfig/fonts.conf @@ -12,6 +12,11 @@ + emoji + + Noto Emoji + + sans-serif Source Sans Pro diff --git a/xorg/icons/paper-icon-theme b/xorg/icons/paper-icon-theme index 4bf8666..8c7bf8d 160000 --- a/xorg/icons/paper-icon-theme +++ b/xorg/icons/paper-icon-theme @@ -1 +1 @@ -Subproject commit 4bf8666ef7f67a30e41a3aa8e20805daedc53a5f +Subproject commit 8c7bf8d295a72e45d81ca3d5c1ac5d69a65b0154 -- 2.47.0