Better zsh init and prompt
This commit is contained in:
@@ -1,29 +1,58 @@
|
|||||||
# color stuff
|
# color stuff
|
||||||
|
|
||||||
|
# return contrasted color
|
||||||
|
contrastcol() {
|
||||||
|
local bg=${1:-#000000}
|
||||||
|
local dark=${2:-#2e3440} # color if provided color is light
|
||||||
|
local light=${3:-#eceff4} # color if provided color is dark
|
||||||
|
local threshold=${4:-128}
|
||||||
|
|
||||||
|
local r=$((16#${bg[2,3]})) # use arithmetic expansion to convert hex to decimal
|
||||||
|
local g=$((16#${bg[4,5]}))
|
||||||
|
local b=$((16#${bg[6,7]}))
|
||||||
|
|
||||||
|
local brightness=$((0.2126*r + 0.7152*g + 0.0722*b)) # For rough calculations, the formula uses linear RGB values (0–255) with CIE-weighted coefficients | source: https://www.codestudy.net/blog/formula-to-determine-perceived-brightness-of-rgb-color
|
||||||
|
if ((brightness > threshold)); then
|
||||||
|
echo $dark
|
||||||
|
else
|
||||||
|
echo $light
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# set darktheme if between 18 and 6
|
||||||
|
DARK=false
|
||||||
|
if (($(date +%H) < 6 && $(date +%H) > 18)); then
|
||||||
|
DARK=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run pywal automatically; can be forced just by putting a blank ".reset_color" in home directory
|
||||||
if ([ -f $XDG_CONFIG_HOME/wallpaper/current ] && [ ! -d $XDG_CACHE_HOME/wal ]) || [ -f $HOME/.reset_color ]; then
|
if ([ -f $XDG_CONFIG_HOME/wallpaper/current ] && [ ! -d $XDG_CACHE_HOME/wal ]) || [ -f $HOME/.reset_color ]; then
|
||||||
wal --cols16 dual -n -e -s -t -p "current_theme" -i .config/wallpaper/current
|
wal --cols16 dual -n -e -s -t -p "current_theme" -i .config/wallpaper/current
|
||||||
[ -f $HOME/.reset_color ] && rm $HOME/.reset_color
|
[ -f $HOME/.reset_color ] && rm $HOME/.reset_color
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# if pywal has been runned, get colors
|
||||||
if [ -f $XDG_CACHE_HOME/wal/colors ]; then
|
if [ -f $XDG_CACHE_HOME/wal/colors ]; then
|
||||||
BACKGROUND_COL=$(sed '1q;d' $XDG_CACHE_HOME/wal/colors)
|
BG1=$(sed '1q;d' $XDG_CACHE_HOME/wal/colors)
|
||||||
COL1=$(sed '2q;d' $XDG_CACHE_HOME/wal/colors)
|
BG2=$(sed '2q;d' $XDG_CACHE_HOME/wal/colors)
|
||||||
COL2=$(sed '15q;d' $XDG_CACHE_HOME/wal/colors)
|
BG3=$(sed '3q;d' $XDG_CACHE_HOME/wal/colors)
|
||||||
COL3=$(sed '3q;d' $XDG_CACHE_HOME/wal/colors)
|
BG4=$(sed '4q;d' $XDG_CACHE_HOME/wal/colors)
|
||||||
COL4=$(sed '14q;d' $XDG_CACHE_HOME/wal/colors)
|
else
|
||||||
COL5=$(sed '4q;d' $XDG_CACHE_HOME/wal/colors)
|
BG1=#2e3440
|
||||||
CURSOR_COL=$(sed '16q;d' $XDG_CACHE_HOME/wal/colors)
|
BG2=#3c4453
|
||||||
|
BG3=#454d5f
|
||||||
|
BG4=#4d576a
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
FG1=$(contrastcol "$BG1")
|
||||||
|
FG2=$(contrastcol "$BG2")
|
||||||
|
FG3=$(contrastcol "$BG3")
|
||||||
|
FG4=$(contrastcol "$BG4")
|
||||||
|
|
||||||
# source global shell alias & variables files
|
# source global shell alias & variables files
|
||||||
[ -f "$XDG_CONFIG_HOME/shell/alias" ] && source "$XDG_CONFIG_HOME/shell/alias"
|
[ -f "$XDG_CONFIG_HOME/shell/alias" ] && source "$XDG_CONFIG_HOME/shell/alias"
|
||||||
[ -f "$XDG_CONFIG_HOME/shell/vars" ] && source "$XDG_CONFIG_HOME/shell/vars"
|
[ -f "$XDG_CONFIG_HOME/shell/vars" ] && source "$XDG_CONFIG_HOME/shell/vars"
|
||||||
|
|
||||||
# Set up the prompt
|
|
||||||
#autoload -Uz promptinit
|
|
||||||
#promptinit
|
|
||||||
#prompt adam1
|
|
||||||
|
|
||||||
setopt histignorealldups sharehistory
|
|
||||||
|
|
||||||
# Use emacs keybindings even if our EDITOR is set to vi
|
# Use emacs keybindings even if our EDITOR is set to vi
|
||||||
bindkey -e
|
bindkey -e
|
||||||
|
|
||||||
@@ -55,8 +84,8 @@ zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd'
|
|||||||
export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
|
export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
|
||||||
|
|
||||||
# main opts
|
# main opts
|
||||||
setopt append_history inc_append_history share_history
|
setopt append_history inc_append_history share_history hist_ignore_all_dups
|
||||||
# on exit, history appends rather than overwrites; history is appended as soon as cmds executed; history shared across sessions
|
# on exit, history appends rather than overwrites; history is appended as soon as cmds executed; history shared across sessions; delete older command when duplicate
|
||||||
setopt auto_menu menu_complete # autocmp first menu match
|
setopt auto_menu menu_complete # autocmp first menu match
|
||||||
setopt autocd # type a dir to cd
|
setopt autocd # type a dir to cd
|
||||||
setopt auto_param_slash # when a dir is completed, add a / instead of a trailing space
|
setopt auto_param_slash # when a dir is completed, add a / instead of a trailing space
|
||||||
@@ -67,11 +96,11 @@ setopt interactive_comments # allow comments in shell
|
|||||||
unsetopt prompt_sp # don't autoclean blanklines
|
unsetopt prompt_sp # don't autoclean blanklines
|
||||||
stty stop undef # disable accidental ctrl s
|
stty stop undef # disable accidental ctrl s
|
||||||
|
|
||||||
# history opts
|
# more history opts
|
||||||
HISTFILE="$XDG_CACHE_HOME/zsh_history" # move histfile to cache
|
HISTFILE="$XDG_CACHE_HOME/zsh_history" # move histfile to cache
|
||||||
HISTCONTROL=ignoreboth # consecutive duplicates & commands starting with space are not saved
|
HISTCONTROL=ignoreboth # consecutive duplicates & commands starting with space are not saved
|
||||||
HISTSIZE=1000
|
HISTSIZE=10000
|
||||||
SAVEHIST=1000
|
SAVEHIST=10000
|
||||||
|
|
||||||
# fzf setup
|
# fzf setup
|
||||||
source <(fzf --zsh) # allow for fzf history widget
|
source <(fzf --zsh) # allow for fzf history widget
|
||||||
@@ -79,23 +108,15 @@ source <(fzf --zsh) # allow for fzf history widget
|
|||||||
# set up prompt
|
# set up prompt
|
||||||
NEWLINE=$'\n'
|
NEWLINE=$'\n'
|
||||||
POWERLINE_START="\ue0d4"
|
POWERLINE_START="\ue0d4"
|
||||||
POWERLINE_SEPARATOR="\ue0c6"
|
POWERLINE_SEPARATOR="\ue0c7"
|
||||||
POWERLINE_STOP="\ue0b4"
|
POWERLINE_STOP="\ue0b4"
|
||||||
PROMPT_ENTER="" #"\ueb70"
|
PROMPT_ENTER="" #"\ueb70"
|
||||||
|
|
||||||
precmd() {
|
precmd() {
|
||||||
print ""
|
print "" # empty line to increase readability
|
||||||
if [ -z ${BACKGROUND_COL} ]; then
|
print -P "%F{${BG1}}${POWERLINE_START}%K{${BG1}}%F{${FG1}} %y on %M %K{${BG1}}%F{${BG2}}${POWERLINE_SEPARATOR}%K{${BG2}}%F{${FG2}} %n %K{${BG2}}%F{${BG3}}${POWERLINE_SEPARATOR}%K{${BG3}}%F{${FG3}} %~ %K{${BG3}}%F{${FG4}}${POWERLINE_SEPARATOR}%k%F{${FG4}}${POWERLINE_STOP}"
|
||||||
print -P "%F{#2e3440}${POWERLINE_START}%K{#2e3440}%F{#e5e9f0} %y on %M %K{#3b4252}%F{#2e3440}${POWERLINE_SEPARATOR}%K{#3b4252}%F{#eceff4} %n %K{#4c566a}%F{#3b4252}${POWERLINE_SEPARATOR}%F{#eceff4} %~ %K{#eceff4}%F{#4c566a}${POWERLINE_SEPARATOR} %k%F{#eceff4}${POWERLINE_STOP}" # nord theme
|
|
||||||
else
|
|
||||||
print -P "%K{${COL1}}%F{${COL2}} %N %K{${COL3}}%F{${COL4}} %n %K{${COL5}} %~ %f%k ❯" # custom dynamic theme
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
if [ -z ${BACKGROUND_COL} ]; then
|
PROMPT="${PROMPT_ENTER} " # nord theme
|
||||||
PROMPT="${PROMPT_ENTER} " # nord theme
|
|
||||||
else
|
|
||||||
PROMPT="${PROMPT_ENTER} " # custom dynamic theme
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${NEWLINE}\x1b[38;5;137m\x1b[48;5;0m it's $(print -P '%D{%_H:%M%P}\n') \x1b[38;5;180m\x1b[48;5;0m $(uptime -p | cut -c 4-) \x1b[38;5;223m\x1b[48;5;0m $(uname -r) \033[0m" # current
|
echo -e "${NEWLINE}\x1b[38;5;137m\x1b[48;5;0m it's $(print -P '%D{%_H:%M%P}\n') \x1b[38;5;180m\x1b[48;5;0m $(uptime -p | cut -c 4-) \x1b[38;5;223m\x1b[48;5;0m $(uname -r) \033[0m" # current
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user