# ~/.zshrc — managed by chezmoi

# History
HISTFILE="$HOME/.zsh_history"
HISTSIZE=10000
SAVEHIST=10000
# HIST_IGNORE_SPACE: a leading space keeps a line out of history, as in fish
# (the ctrl-z binding's hidden ` __jobs_bind_fg` relies on it).
setopt SHARE_HISTORY HIST_IGNORE_DUPS HIST_IGNORE_SPACE

# Completion
autoload -Uz compinit && compinit

# PATH extras / tool envs (machine-optional, guarded)
case ":$PATH:" in *":$HOME/.local/bin:"*) ;; *) PATH="$HOME/.local/bin:$PATH" ;; esac
[ -f "$HOME/.cargo/env" ] && . "$HOME/.cargo/env"
[ -d "$HOME/.maestro/bin" ] && PATH="$PATH:$HOME/.maestro/bin"

# Go — GOPATH/GOBIN under ~/.local/share to keep $HOME clean.
# GOROOT is provided by mise (toolchain lives under ~/.local/share/mise).
export GOPATH="$HOME/.local/share/go"
export GOBIN="$GOPATH/bin"
case ":$PATH:" in *":$GOBIN:"*) ;; *) PATH="$GOBIN:$PATH" ;; esac

# mise: tool shims and env (GOROOT above comes from it), as fish's
# conf.d/40-tools.fish does for every fish.
command -v mise >/dev/null 2>&1 && eval "$(mise activate zsh)"

# Repo roots (ghq) — same as fish's conf.d/10-env.fish; the ghq-repos tv
# cable (ctrl-o) lists this root.
export GHQ_ROOT="$HOME/Code"
export CODE_ROOT="$HOME/Code"

# Android SDK — relocated under ~/.local/share/android.
export ANDROID_HOME="$HOME/.local/share/android"
export ANDROID_SDK_ROOT="$ANDROID_HOME"
for _adir in "$ANDROID_HOME/platform-tools" "$ANDROID_HOME/cmdline-tools/latest/bin" "$ANDROID_HOME/emulator"; do
    case ":$PATH:" in *":$_adir:"*) ;; *) [ -d "$_adir" ] && PATH="$PATH:$_adir" ;; esac
done
unset _adir

# GITHUB_TOKEN from gh's keyring login — never stored on disk. An inherited
# value wins, so nested shells skip the gh call.
if [ -z "${GITHUB_TOKEN:-}" ] && command -v gh >/dev/null 2>&1; then
    _gh_token="$(gh auth token 2>/dev/null)"
    [ -n "$_gh_token" ] && export GITHUB_TOKEN="$_gh_token"
    unset _gh_token
fi

# Shared aliases (same set as fish/bash; source of truth: .chezmoidata/aliases.yaml)
[ -f "$HOME/.config/shell/aliases.sh" ] && . "$HOME/.config/shell/aliases.sh"

# Shell functions — one file per function, zsh ports of the fish ones
# (cwd/history-touching helpers; standalone tools live in ~/.local/bin)
if [ -d "$HOME/.config/zsh/functions" ]; then
    for _f in "$HOME/.config/zsh/functions"/*.zsh; do
        [ -r "$_f" ] && . "$_f"
    done
    unset _f
fi

# ZLE keybinds — zsh ports of fish_user_key_bindings.fish
[ -f "$HOME/.config/zsh/keybinds.zsh" ] && . "$HOME/.config/zsh/keybinds.zsh"

# suvadu shell history
command -v suv >/dev/null 2>&1 && eval "$(suv init zsh)"

# Generated for envman. Do not edit.
[ -s "$HOME/.config/envman/load.sh" ] && . "$HOME/.config/envman/load.sh"

# Prompt — starship, consistent with fish
command -v starship >/dev/null 2>&1 && eval "$(starship init zsh)"

# Material You terminal colors generated from the wallpaper (quickshell),
# replayed like fish's conf.d/40-tools.fish.
_qs_seq="$HOME/.local/state/quickshell/user/generated/terminal/sequences.txt"
[ -f "$_qs_seq" ] && cat "$_qs_seq"
unset _qs_seq

# zoxide: `z` / `zi`, plus the cd wrapper's fallback (functions/cd.zsh).
command -v zoxide >/dev/null 2>&1 && eval "$(zoxide init zsh)"

# television: ctrl-t smart autocomplete (its ctrl-r is shadowed by iris's
# mode toggle, as in fish)
command -v tv >/dev/null 2>&1 && eval "$(tv init zsh)"

# iris (~/.config/iris/config.toml): inline completion menu, same as fish.
# The init's first half `exec`s iris from an interactive zsh on a tty; iris
# starts a second zsh in its pty, which runs this file again, and there the
# second half installs the line/cwd/command hooks. `IRIS_RESCUE=1 zsh` skips
# it. Placed before syntax highlighting, which must stay last.
if command -v iris >/dev/null 2>&1; then
    eval "$(iris init zsh)"
    # Inside iris: PROMPT_SP pads the line with spaces + CR before each prompt
    # (the inverse `%` partial-line marker). iris reads that echo as a typed
    # space, so every prompt opened with a stale query and a stray first
    # suggestion (`4channels`) got inserted on the next key.
    [[ -n $IRIS_PID ]] && unsetopt PROMPT_SP
fi

# Fish-style syntax highlighting (zsh-users/zsh-syntax-highlighting).
# MUST stay last in .zshrc: it wraps every zle widget defined above
# (keybinds, compinit, suv/starship hooks).
for _zsh_hl in \
    /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh \
    /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh \
    /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh; do
    [ -r "$_zsh_hl" ] && . "$_zsh_hl" && break
done
unset _zsh_hl

# >>> termium >>>
case ":$PATH:" in *:'/home/prad/.local/bin':*) ;; *) export PATH='/home/prad/.local/bin':"$PATH" ;; esac
# <<< termium <<<
