Files
dotfiles/.zshrc
2026-06-22 16:24:44 +02:00

286 lines
8.6 KiB
Bash

_profile_interactive=0
[[ -o interactive ]] && _profile_interactive=1
_profile_emacs="${INSIDE_EMACS:-}"
_profile_terminal=0
if [[ "$_profile_interactive" == 1 && "${TERM:-}" != dumb && "$_profile_emacs" != *eshell* && -t 1 ]]; then
_profile_terminal=1
fi
# Powerlevel10k and terminal escapes are useful in real terminals, including
# Emacs vterm, but are noisy in eshell, TERM=dumb, and Codex-style shells.
if [[ "$_profile_terminal" == 1 && -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
if [[ "$_profile_terminal" == 1 && "${TERM_PROGRAM:-}" == Alacritty ]]; then
printf '\e[?1042l'
fi
[[ -r "$HOME/.pathrc" ]] && . "$HOME/.pathrc"
set -o vi
export ZSH="$HOME/.oh-my-zsh"
ZSH_CUSTOM="${ZSH_CUSTOM:-$ZSH/custom}"
if [[ "$_profile_terminal" == 1 ]]; then
ZSH_THEME="powerlevel10k/powerlevel10k"
else
ZSH_THEME=""
PROMPT='%n@%m:%~%# '
fi
DISABLE_AUTO_TITLE="true"
COMPLETION_WAITING_DOTS="true"
ZSH_AUTOSUGGEST_ACCEPT_WIDGETS='vi-forward-char'
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=10"
HIST_STAMPS="dd.mm.yyyy"
ZSH_TMUX_FIXTERM=true
ZSH_TMUX_AUTOQUIT=false
_profile_cache_root="${TMPDIR:-/tmp}/profile-zsh-${USER:-${LOGNAME:-user}}"
ZSH_CACHE_DIR="$_profile_cache_root/oh-my-zsh"
ZSH_COMPDUMP="$_profile_cache_root/.zcompdump-${HOST%%.*}-${ZSH_VERSION}"
mkdir -p "$ZSH_CACHE_DIR/completions"
plugins=(
colorize
colored-man-pages
vi-mode
common-aliases
iterm2
zsh-navigation-tools
urltools
history
aliases
dircycle
)
_profile_add_plugin() {
local plugin="$1"
(( ${plugins[(Ie)$plugin]} )) || plugins+=("$plugin")
}
_profile_add_plugin_if_command_exists() {
local plugin="$1"
local cmd="${2:-$plugin}"
[[ -n ${commands[$cmd]} ]] && _profile_add_plugin "$plugin"
}
if [[ "$_profile_terminal" == 1 ]]; then
for _profile_plugin in zsh-completions zsh-syntax-highlighting zsh-autosuggestions; do
[[ -d "$ZSH_CUSTOM/plugins/$_profile_plugin" ]] && _profile_add_plugin "$_profile_plugin"
done
_profile_add_plugin_if_command_exists git
_profile_add_plugin_if_command_exists rsync
_profile_add_plugin_if_command_exists tmux
_profile_add_plugin_if_command_exists docker
_profile_add_plugin_if_command_exists docker-compose
_profile_add_plugin_if_command_exists kubectl
_profile_add_plugin_if_command_exists helm
_profile_add_plugin_if_command_exists terraform
_profile_add_plugin_if_command_exists asdf
_profile_add_plugin_if_command_exists brew
_profile_add_plugin_if_command_exists emacs
_profile_add_plugin_if_command_exists fzf
_profile_add_plugin_if_command_exists macos sw_vers
[[ -n ${commands[hg]} ]] && _profile_add_plugin mercurial
fi
if [[ "$_profile_terminal" == 1 && -r "$ZSH/oh-my-zsh.sh" ]]; then
source "$ZSH/oh-my-zsh.sh"
fi
alias rm >/dev/null 2>&1 && unalias rm
alias oe='open /Applications/Emacs.app'
alias mc='SHELL=/bin/bash mc'
alias -g N='2>&1 '
alias pig='ping'
alias ops='OCI_CLI_PROFILE=solarisx86-us-phoenix-1-apikey ops'
alias nextcloud-shell='k exec -n nextcloud deployments/nextcloud -c nextcloud -it -- runuser --user www-data bash'
alias nextcloud-shell-root='k exec -n nextcloud deployments/nextcloud -c nextcloud -it -- bash'
alias occ='k exec -n nextcloud deployments/nextcloud -c nextcloud -it -- runuser --user www-data /var/www/html/occ'
alias speech_to_text="$HOME/Downloads/whisper.cpp/convert_video_to_txt.sh"
alias scm-ssh='/Users/jetpac/.ssh/scm-script.sh'
if [[ "$(hostname)" == "speccy" ]]; then
export TERM=xterm-24bit
alias ssh='TERM=xterm-256color ssh'
alias vi=te
alias vim=te
fi
print_osc() {
if [[ -n $TMUX ]]; then
printf '\033Ptmux;\033\033]'
else
printf '\033]'
fi
}
print_st() {
if [[ -n $TMUX ]]; then
printf '\a\033\\'
else
printf '\a'
fi
}
set_iterm_profile() {
local profile=${1:?"The profile must be specified."}
print_osc
printf '1337;SetProfile=%s' "$profile"
print_st
}
set_tmux_profile() {
if [[ -n $TMUX ]]; then
local profile=${1:?"The profile must be specified."}
tmux source-file "$HOME/.tmux/plugins/tmux-colors-solarized/tmuxcolors-${profile}.conf"
fi
}
set_dark() {
set_iterm_profile 'Solarized Dark'
set_tmux_profile dark
}
set_light() {
set_iterm_profile 'Solarized Light'
set_tmux_profile light
}
if [[ -f "/Users/jetpac/.local/bin/k9s" ]]; then
alias k9s='/Users/jetpac/.local/bin/k9s --logoless'
fi
if [[ -n ${commands[kubectl]} ]]; then
lh_nodes() {
local ns="${1:-longhorn-system}"
kubectl -n "$ns" get nodes.longhorn.io -o yaml | \
yq eval '
.items[] |
{
"node": .metadata.name,
"allowScheduling": .spec.allowScheduling,
"disks": (
[ (.spec.disks // {}) | to_entries | .[] |
{
"diskName": .key,
"path": .value.path,
"allowScheduling": .value.allowScheduling,
"evictionRequested": .value.evictionRequested,
"storageReservedGiB": ((.value.storageReserved // 0) / 1073741824)
}
]
),
"diskStatus": (
[ (.status.diskStatus // {}) | to_entries | .[] |
{
"diskName": .key,
"storageAvailableGiB": ((.value.storageAvailable // 0) / 1073741824),
"storageMaximumGiB": ((.value.storageMaximum // 0) / 1073741824),
"storageScheduledGiB":((.value.storageScheduled // 0) / 1073741824)
}
]
)
}'
}
fi
if [[ "$OSTYPE" == darwin* ]]; then
# add tokens to keychain:
# security add-generic-password \
# -a "$USER" \
# -s "BITBUCKET_TOKEN" \
# -w "<TOKEN>"
# -U
keychain_token() {
security find-generic-password -s "$1" -w
}
export BITBUCKET_TOKEN=$(keychain_token BITBUCKET_TOKEN)
export HF_TOKEN=$(keychain_token HF_TOKEN)
export LSCOLORS=gxfxbEaEBxxEhEhBaDaCaD
export MANPAGER='col -bx | view -c ":set ft=man nonu nolist nomod nolist" -'
fi
if [[ "$OSTYPE" == solaris* ]]; then
unalias ggrep 2>/dev/null
if [[ ! -f "/usr/share/lib/terminfo/r/rxvt-256color" ]]; then
if [[ -f "/usr/gnu/share/terminfo/r/rxvt-256color" ]]; then
export TERMINFO="/usr/gnu/share/terminfo/r/rxvt-256color"
elif [[ -d "$HOME/.terminfo" ]]; then
export TERMINFO="$HOME/.terminfo"
fi
fi
fi
# zsh history is too short
# - https://unix.stackexchange.com/questions/273861/unlimited-history-in-zsh
#
# inspiration taken from yt video:
# https://youtu.be/ud7YxC33Z3w
HISTSIZE=999999999
HISTFILE=~/.zsh_history
SAVEHIST=$HISTSIZE
HISTDUP=erase
setopt appendhistory
setopt sharehistory
setopt hist_ignore_space
setopt hist_ignore_all_dups
setopt hist_save_no_dups
setopt hist_ignore_dups
setopt hist_find_no_dups
setopt hist_reduce_blanks
bindkey '^p' history-search-backward
bindkey '^n' history-search-forward
if [[ -r "/opt/homebrew/Caskroom/miniconda/base/etc/profile.d/conda.sh" ]]; then
. "/opt/homebrew/Caskroom/miniconda/base/etc/profile.d/conda.sh"
elif [[ -d "/opt/homebrew/Caskroom/miniconda/base/bin" ]]; then
path=("/opt/homebrew/Caskroom/miniconda/base/bin" ${path:#/opt/homebrew/Caskroom/miniconda/base/bin})
fi
if command -v launchctl >/dev/null 2>&1; then
_profile_launchctl_ssh_auth_sock="$(launchctl getenv SSH_AUTH_SOCK 2>/dev/null || true)"
if [[ -n "$_profile_launchctl_ssh_auth_sock" ]]; then
export SSH_AUTH_SOCK="$_profile_launchctl_ssh_auth_sock"
fi
fi
if [[ -t 0 ]]; then
export GPG_TTY="$(tty)"
fi
if [[ "$_profile_terminal" == 1 ]]; then
_zellij_comp_src="$HOME/.config/zellij/comp.zsh"
_zellij_comp_safe="$_profile_cache_root/zellij/comp.safe.zsh"
if [[ -f "$_zellij_comp_src" ]]; then
mkdir -p "${_zellij_comp_safe:h}"
if [[ ! -f "$_zellij_comp_safe" || "$_zellij_comp_src" -nt "$_zellij_comp_safe" ]]; then
sed '/^_zellij "\$@"$/d' "$_zellij_comp_src" > "$_zellij_comp_safe"
fi
source "$_zellij_comp_safe"
(( $+functions[compdef] )) && compdef _zellij zellij
fi
unset _zellij_comp_src _zellij_comp_safe
fi
[[ "$_profile_terminal" == 1 && -r "$HOME/.p10k.zsh" ]] && source "$HOME/.p10k.zsh"
[[ -r "$HOME/.pathrc" ]] && . "$HOME/.pathrc"
unset _profile_interactive _profile_emacs _profile_terminal _profile_plugin _profile_cache_root _profile_launchctl_ssh_auth_sock
unset -f _profile_add_plugin _profile_add_plugin_if_command_exists 2>/dev/null || true
### MANAGED BY RANCHER DESKTOP START (DO NOT EDIT)
export PATH="/Users/jetpac/.rd/bin:$PATH"
### MANAGED BY RANCHER DESKTOP END (DO NOT EDIT)