Files
dotfiles/private_dot_config/zsh/dot_zshrc

151 lines
5.8 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 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 (0255) 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
wal --cols16 dual -n -e -s -t -p "current_theme" -i .config/wallpaper/current
[ -f $HOME/.reset_color ] && rm $HOME/.reset_color
fi
# if pywal has been runned, get colors
if [ -f $XDG_CACHE_HOME/wal/colors ]; then
BG1=$(sed '1q;d' $XDG_CACHE_HOME/wal/colors)
BG2=$(sed '2q;d' $XDG_CACHE_HOME/wal/colors)
BG3=$(sed '3q;d' $XDG_CACHE_HOME/wal/colors)
BG4=$(sed '4q;d' $XDG_CACHE_HOME/wal/colors)
else
BG1=#2e3440
BG2=#3c4453
BG3=#454d5f
BG4=#4d576a
fi
FG1=$(contrastcol "$BG1")
FG2=$(contrastcol "$BG2")
FG3=$(contrastcol "$BG3")
FG4=$(contrastcol "$BG4")
# source global shell alias & variables files
[ -f "$XDG_CONFIG_HOME/shell/alias" ] && source "$XDG_CONFIG_HOME/shell/alias"
[ -f "$XDG_CONFIG_HOME/shell/vars" ] && source "$XDG_CONFIG_HOME/shell/vars"
# Use emacs keybindings even if our EDITOR is set to vi
bindkey -e
# Use modern completion system
autoload -Uz compinit
autoload -Uz colors
compinit
colors
zstyle ':completion:*' auto-description 'specify: %d'
zstyle ':completion:*' completer _expand _complete _correct _approximate
zstyle ':completion:*' format 'Completing %d'
zstyle ':completion:*' group-name ''
zstyle ':completion:*' menu select=2
eval "$(dircolors -b)"
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' list-colors ''
zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s
zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*'
zstyle ':completion:*' menu select=long
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
zstyle ':completion:*' use-compctl false
zstyle ':completion:*' verbose true
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'
zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd'
# colored GCC warnings and errors
export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# main opts
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; delete older command when duplicate
setopt auto_menu menu_complete # autocmp first menu match
setopt autocd # type a dir to cd
setopt auto_param_slash # when a dir is completed, add a / instead of a trailing space
setopt no_case_glob no_case_match # make cmp case insensitive
setopt globdots # include dotfiles
setopt extended_glob # match ~ # ^
setopt interactive_comments # allow comments in shell
unsetopt prompt_sp # don't autoclean blanklines
stty stop undef # disable accidental ctrl s
# more history opts
HISTFILE="$XDG_CACHE_HOME/zsh_history" # move histfile to cache
HISTCONTROL=ignoreboth # consecutive duplicates & commands starting with space are not saved
HISTSIZE=10000
SAVEHIST=10000
# fzf setup
source <(fzf --zsh) # allow for fzf history widget
# set up prompt
NEWLINE=$'\n'
POWERLINE_START="\ue0d4"
POWERLINE_START_INV="\ue0d2"
POWERLINE_SEPARATOR="\ue0c7"
POWERLINE_STOP="\ue0b4"
POWERLINE_STOP_INV="\ue0b6"
PROMPT_ENTER="" #"\ueb70"
PROMPT_PAD="."
PROMPT_EXTRA_WIDTH=73
precmd() {
local prompt_ln="${#${${PWD}/${HOME}/~}}" # len of path where $HOME is susbtiued by ~ (and is counted as 1)
if (($COLUMNS > PROMPT_EXTRA_WIDTH + prompt_ln)); then
local exec_ts=$(($(date +%s%N) - STARTCMD_TS))
local seconds=$(echo "scale=9; $exec_ts / 1000000000" | bc)
local hours=$((seconds / 3600))
local minutes=$(((seconds % 3600) / 60))
seconds=$((seconds % 60))
local exec_str=$(printf "%02d:%02d:%06.3f" hours minutes seconds)
local padding=$(printf %$(($COLUMNS - PROMPT_EXTRA_WIDTH - prompt_ln))s | tr ' ' $PROMPT_PAD)
extra_prompt="%k%f${padding}${POWERLINE_STOP_INV}%K{${FG3}}%F{${BG3}}${POWERLINE_SEPARATOR}%K{${BG3}}%F{${FG3}} took ${exec_str} \uf252%K{${BG3}}%F{${BG2}}${POWERLINE_SEPARATOR}%K{${BG2}}%F{${FG2}}at $(date +%H:%M:%S) \uf017 %k%F{${BG2}}${POWERLINE_START_INV}"
else
extra_prompt=""
fi
print "" # empty line to increase readability
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}${extra_prompt}"
STARTCMD_TS=$(date +%s%N)
}
preexec() {
STARTCMD_TS=$(date +%s%N)
}
PROMPT="${PROMPT_ENTER} " # nord theme
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
# syntax highlighting
# requires zsh-syntax-highlighting package
#source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh