#!/bin/zsh ##################################################################### alias ls='ls --color=auto --group-directories-first' ##################################################################### PS1__GET_DIRECTORY() { local _DIRECTORY="%B%F{yellow}%6~" local GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) [ $GIT_ROOT ] && { local PROJECT_NAME=$(basename $GIT_ROOT) [[ $PROJECT_NAME =~ ^code$ ]] && PROJECT_NAME=$(basename $(dirname $GIT_ROOT)) local RELATIVE_DIRECTORY=${${PWD#$GIT_ROOT}:1} [[ ${#${RELATIVE_DIRECTORY//[^\/]}} -gt 3 ]] && RELATIVE_DIRECTORY='*/%4~' _DIRECTORY="%B%F{green}$PROJECT_NAME%B%F{yellow}:$RELATIVE_DIRECTORY" } echo $_DIRECTORY } PS1__GET_GIT_BRANCH() { local _GIT_BRANCH=$(\ git branch --no-color 2>/dev/null \ | sed "/^[^*]/d; s/* \(.*\)/ %B%F{cyan}$PS1_BRANCH_SYMBOL \1/" \ ) echo $_GIT_BRANCH } GENERATE_PS1() { local _INDICATOR="%B%(?.%F{green}.%F{red}) $PS1_INDICATOR_SYMBOL" local _USER="%B%F{magenta}$PS1_USER" local _SEPARATOR="%b%F{red}$PS1_SEPARATOR" local _DIRECTORY='$(PS1__GET_DIRECTORY)' local _GIT_BRANCH='$(PS1__GET_GIT_BRANCH)' local _PROMPT=$'\n'' %B%F{blue}%# %b%f' echo "$_INDICATOR $_USER $_SEPARATOR $_DIRECTORY $_GIT_BRANCH $_PROMPT" } setopt PROMPT_SUBST export PS1="$(GENERATE_PS1)" source "$DOTWRYN/config/colorschemes/linux-console" ##################################################################### FZF_THEME_PICK() { echo "$(\ sed 's/\.conf//g; s/^./\U&/; s/-\(.\)/\U\1/g; s/^Default/& (use kitty theme)/' \ | fzf -i --height=50% --reverse --prompt 'select a theme : ' \ | sed 's/^./\L&/; s/[A-Z]/-\L&/g' ).conf" } GET_KITTY_THEMES() { ls "$DOTWRYN/config/colorschemes/kitty"; } alias kitty-change-theme='KITTY_CHANGE_THEME default' alias kitty-change-theme-alternate='KITTY_CHANGE_THEME alternate' KITTY_CHANGE_THEME () { local USAGE="usage : $0 target [theme]" local TARGET="$1" local TARGET_LINK case $TARGET in default ) TARGET_LINK="$DOTWRYN/config/kitty/theme.conf" ;; alternate ) TARGET_LINK="$DOTWRYN/config/kitty/alternate.conf" ;; * ) echo "error : target must be 'default' or 'alternate'\n$USAGE" >&2 return 1 ;; esac local THEME="$2" [ ! $THEME ] && { THEME=$(GET_KITTY_THEMES | FZF_THEME_PICK) [ ! $THEME ] && return 2 } local COLORSCHEME="$DOTWRYN/config/colorschemes/kitty/$THEME" [ ! -f $COLORSCHEME ] && { echo "no such theme ($THEME)"; return 2; } rm -- $TARGET_LINK ln -s $COLORSCHEME $TARGET_LINK && { echo 'kitty-term theme changed successfully! (effective on new session)' source "$DOTWRYN/config/colorschemes/linux-console" } } _KITTY_CHANGE_THEME () { compadd $(GET_KITTY_THEMES); } compdef _KITTY_CHANGE_THEME KITTY_CHANGE_THEME ##################################################################### GET_TTY_THEMES() { echo default ls "$DOTWRYN/config/colorschemes/kitty" } alias tty-change-theme='TTY_CHANGE_THEME' TTY_CHANGE_THEME() { local LOCAL_THEME_LINK="$HOME/.config/wryn/tty-colorscheme" local THEME_DIR="$DOTWRYN/config/colorschemes/kitty" local THEME="$1" [ ! $THEME ] && { THEME=$(GET_TTY_THEMES | FZF_THEME_PICK) [ ! $THEME ] && return 1 } [[ "$THEME" =~ ^default ]] && { rm $LOCAL_THEME_LINK >/dev/null 2>&1 true } || { local COLORSCHEME="$THEME_DIR/$THEME" [ ! -f $COLORSCHEME ] && { echo "no such theme ($THEME)"; return 2; } rm -- $LOCAL_THEME_LINK >/dev/null 2>&1 ln -s $SOURCE_THEME $TARGET_THEME_LINK } echo 'TTY theme updated; re-source zshrc in TTY for changes to take effect' source "$DOTWRYN/config/colorschemes/linux-console" >/dev/null 2>&1 } _TTY_CHANGE_THEME() { compadd $(GET_TTY_THEMES); } compdef _TTY_CHANGE_THEME TTY_CHANGE_THEME