dotfiles/dot_zshrc.tmpl
Joshua Hirsig 44d06ec382 Add bat, ripgrep, fzf configs and dotfiles update to Fedora sysup
- Add bat config: ansi theme, line numbers, header, italic text
- Add ripgrep config: smart-case, hidden files, exclude .git
- Add fzf env vars: fd backend, reverse layout, border
- Add RIPGREP_CONFIG_PATH export
- Fedora sysup: add chezmoi update as parallel task
2026-03-12 10:57:30 +01:00

163 lines
5.5 KiB
Cheetah

# Path (consolidated - no need for .deno/env and .local/bin/env)
export PATH="$HOME/.local/bin:$HOME/.deno/bin:$HOME/.juliaup/bin:$PATH"
export FPATH="$HOME/completions:$FPATH"
# Oh My Zsh
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="robbyrussell"
HYPHEN_INSENSITIVE="true"
zstyle ':omz:update' mode auto
zstyle ':omz:update' frequency 13
ENABLE_CORRECTION="true"
COMPLETION_WAITING_DOTS="true"
HIST_STAMPS="dd.mm.yyyy"
plugins=(git)
# Cache compinit - only regenerate once per day
zstyle ':omz:alpha:lib:completion' caching yes
source $ZSH/oh-my-zsh.sh
{{- if eq .distro "fedora" }}
sysup() {
command sudo -v || return 1
setopt LOCAL_OPTIONS NO_NOTIFY NO_MONITOR
local -a names=(dnf flatpak rustup deno npm dotfiles)
local -a logs pids
for n in $names; do logs+=($(mktemp)); done
local start=$SECONDS
command sudo dnf up -y &>"${logs[1]}" &
pids+=($!)
setsid flatpak upgrade -y &>"${logs[2]}" &
pids+=($!)
rustup update &>"${logs[3]}" &
pids+=($!)
deno upgrade &>"${logs[4]}" &
pids+=($!)
command sudo npm update -g --fund=false --loglevel=error &>"${logs[5]}" &
pids+=($!)
chezmoi update --no-tty &>"${logs[6]}" &
pids+=($!)
local lines=$(( ${#names} + 2 ))
local spin='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏' i=0 drawn=0
tput civis 2>/dev/null
trap 'tput cnorm 2>/dev/null' INT TERM
while true; do
local all_done=1
for j in {1..${#pids}}; do
kill -0 ${pids[$j]} 2>/dev/null && all_done=0 && break
done
(( all_done )) && break
(( drawn )) && printf "\033[${lines}A"
local elapsed=$((SECONDS - start))
local maxw=$(( COLUMNS - 16 ))
local s=${spin:$((i%${#spin})):1}
printf "\033[K\n"
printf "\033[K \033[1;33m%s\033[0m \033[1msysup\033[0m \033[2m%dm%02ds\033[0m\n" \
"$s" $((elapsed/60)) $((elapsed%60))
for j in {1..${#pids}}; do
local last=$(tail -1 "${logs[$j]}" 2>/dev/null | sed 's/\x1b\[[0-9;]*m//g' | tr -d '\r')
if kill -0 ${pids[$j]} 2>/dev/null; then
printf "\033[K \033[33m●\033[0m %-8s \033[2m%s\033[0m\n" "${names[$j]}" "${${last:-(starting...)}:0:$maxw}"
else
printf "\033[K \033[32m✓\033[0m %-8s \033[2mdone\033[0m\n" "${names[$j]}"
fi
done
printf "\033[K"
drawn=1; ((i++)); sleep 0.5
done
tput cnorm 2>/dev/null
trap - INT TERM
if (( drawn )); then
printf "\033[${lines}A"
for _ in {1..$lines}; do printf "\033[K\n"; done
printf "\033[${lines}A"
fi
wait
for j in {1..${#names}}; do
printf "\n\033[1;36m--- %s ---\033[0m\n" "${names[$j]}"; cat "${logs[$j]}"
done
rm -f "${logs[@]}"
printf "\n\033[1;32m✓ Done in %ds\033[0m\n" "$((SECONDS - start))"
}
{{- end }}
{{- if eq .distro "gentoo" }}
sysup() {
command sudo -v || return 1
setopt LOCAL_OPTIONS NO_NOTIFY NO_MONITOR
local -a names=(emerge flatpak dotfiles)
local -a logs pids
for n in $names; do logs+=($(mktemp)); done
local start=$SECONDS
{ command sudo emerge --sync && command sudo emerge -uDN --with-bdeps=y --changed-deps=y @world && command sudo emerge --depclean; } &>"${logs[1]}" &
pids+=($!)
setsid flatpak upgrade -y &>"${logs[2]}" &
pids+=($!)
chezmoi update --no-tty &>"${logs[3]}" &
pids+=($!)
local lines=$(( ${#names} + 2 ))
local spin='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏' i=0 drawn=0
tput civis 2>/dev/null
trap 'tput cnorm 2>/dev/null' INT TERM
while true; do
local all_done=1
for j in {1..${#pids}}; do
kill -0 ${pids[$j]} 2>/dev/null && all_done=0 && break
done
(( all_done )) && break
(( drawn )) && printf "\033[${lines}A"
local elapsed=$((SECONDS - start))
local maxw=$(( COLUMNS - 16 ))
local s=${spin:$((i%${#spin})):1}
printf "\033[K\n"
printf "\033[K \033[1;33m%s\033[0m \033[1msysup\033[0m \033[2m%dm%02ds\033[0m\n" \
"$s" $((elapsed/60)) $((elapsed%60))
for j in {1..${#pids}}; do
local last=$(tail -1 "${logs[$j]}" 2>/dev/null | sed 's/\x1b\[[0-9;]*m//g' | tr -d '\r')
if kill -0 ${pids[$j]} 2>/dev/null; then
printf "\033[K \033[33m●\033[0m %-9s \033[2m%s\033[0m\n" "${names[$j]}" "${${last:-(starting...)}:0:$maxw}"
else
printf "\033[K \033[32m✓\033[0m %-9s \033[2mdone\033[0m\n" "${names[$j]}"
fi
done
printf "\033[K"
drawn=1; ((i++)); sleep 0.5
done
tput cnorm 2>/dev/null
trap - INT TERM
if (( drawn )); then
printf "\033[${lines}A"
for _ in {1..$lines}; do printf "\033[K\n"; done
printf "\033[${lines}A"
fi
wait
for j in {1..${#names}}; do
printf "\n\033[1;36m--- %s ---\033[0m\n" "${names[$j]}"; cat "${logs[$j]}"
done
rm -f "${logs[@]}"
printf "\n\033[1;32m✓ Done in %ds\033[0m\n" "$((SECONDS - start))"
}
{{- end }}
# Tools (cached init for faster startup)
if [[ ! -f ~/.cache/zsh/zoxide.zsh ]] || (( $(date +%s) - $(stat -c %Y ~/.cache/zsh/zoxide.zsh 2>/dev/null || echo 0) > 86400 )); then
mkdir -p ~/.cache/zsh
zoxide init zsh > ~/.cache/zsh/zoxide.zsh
starship init zsh > ~/.cache/zsh/starship.zsh
fi
source ~/.cache/zsh/zoxide.zsh
source ~/.cache/zsh/starship.zsh
# Bitwarden CLI
alias bwu='export BW_SESSION=$(bw unlock --raw)'
# fzf: use fd as backend, follow symlinks, respect .gitignore
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
# ripgrep config
export RIPGREP_CONFIG_PATH="$HOME/.config/ripgrep/config"
# CHROME_BIN (resolved on demand, not every shell start)
export CHROME_BIN="${CHROME_BIN:-$(command -v chromium-browser 2>/dev/null || command -v chromium 2>/dev/null || command -v google-chrome 2>/dev/null)}"