_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)
