#!/bin/sh
# Sourced by zshrc as well as bash.
# Should only use POSIX shell constructs.
# shellcheck shell=sh

umask 027

# Paths and preferences
export PYTHONPATH="$HOME/.python:$PYTHONPATH"
export GOPATH="$HOME/go:$HOME/Projects/Go:/usr/share/gocode"
export PATH="$HOME/bin:$HOME/bin/tools:/sbin:/usr/sbin:$PATH:$HOME/go/bin:$HOME/.npm-packages/bin"
export VISUAL=vim
export EDITOR=vim
export DEBEMAIL="david@systemoverlord.com"
export DEBFULLNAME="David Tomaschik"
export LESS="-MR"
export QUOTING_STYLE="literal"  # Coreutils quotes

# Fix gnome-terminal
if [ "$TERM" = "xterm" ] && [ "$COLORTERM" = "gnome-terminal" ] ; then
  # Requires `ncurses-base` package for terminfo.
  export TERM="xterm-256color"
fi

# For virtualenvwrapper
export WORKON_HOME="$HOME/.virtualenvs"

# GPG full key id
export GPG_ID=7FD58D9A196DCEEEAD671F94F4D7A7915DEA789B

# things we need in all interactive shells
case "$-" in
  *i*)
    # Terminal preferences for i3
    if [ -z "${TERMINAL}" ] ; then
      for t in urxvt gnome-terminal; do
        if TERMINAL=$(command -v ${t}) ; then
          export TERMINAL
        fi
      done
    fi

    # Browser preferences
    if [ -z "${BROWSER}" ] ; then
      for t in google-chrome-beta google-chrome firefox ; do
        if BROWSER=$(command -v ${t}); then
          export BROWSER
          break
        fi
      done
    fi

    # Setup locale
    if test -x /usr/bin/locale ; then
      for l in en_US.utf8 en_US.UTF-8 C.UTF-8 C.utf8 C ; do
        if /usr/bin/locale -a | grep -q "${l}" ; then
          export LC_CTYPE=${l}
          export LC_NUMERIC=${l}
          export LC_TIME=${l}
          export LC_MONETARY=${l}
          export LC_MESSAGES=${l}
          export LC_PAPER=${l}
          export LC_NAME=${l}
          export LC_ADDRESS=${l}
          export LC_TELEPHONE=${l}
          export LC_MEASUREMENT=${l}
          export LC_IDENTIFICATION=${l}
          break
        fi
      done
    else
      export LC_CTYPE=C
      export LC_NUMERIC=C
      export LC_TIME=C
      export LC_MONETARY=C
      export LC_MESSAGES=C
      export LC_PAPER=C
      export LC_NAME=C
      export LC_ADDRESS=C
      export LC_TELEPHONE=C
      export LC_MEASUREMENT=C
      export LC_IDENTIFICATION=C
    fi
    export LC_COLLATE=C
    ;;
esac


# Opt out of .net telemetry
export DOTNET_CLI_TELEMETRY_OPTOUT=1

# Suppress lvm warnings
export LVM_SUPPRESS_FD_WARNINGS=1

# Default disable SSH forwarding in EARTHLY
export EARTHLY_SSH_AUTH_SOCK=""

# Handle SSH_AUTH_SOCK for tmux consistency
_SSH_AUTH_LINK="${HOME}/.ssh/ssh_auth_sock"
if [ -z "${SSH_AUTH_SOCK:-}" ] || [ ! -S "${SSH_AUTH_SOCK}" ] ; then
  # Try to find a working GPG agent SSH socket if no agent is set or current is broken
  if command -v gpgconf >/dev/null 2>&1; then
    _GPG_SSH_SOCK=$(gpgconf --list-dirs agent-ssh-socket 2>/dev/null)
  fi
  # Fallback to common paths if gpgconf fails or isn't present
  if [ -z "${_GPG_SSH_SOCK}" ] || [ ! -S "${_GPG_SSH_SOCK}" ]; then
    _GPG_SSH_SOCK="${GNUPGHOME:-$HOME/.gnupg}/S.gpg-agent.ssh"
    [ -S "$_GPG_SSH_SOCK" ] || _GPG_SSH_SOCK="/run/user/$(id -u)/gnupg/S.gpg-agent.ssh"
  fi

  if [ -S "${_GPG_SSH_SOCK}" ] ; then
    export SSH_AUTH_SOCK="$_GPG_SSH_SOCK"
  fi
  unset _GPG_SSH_SOCK
fi

# If we have a valid socket but it's not our stable link, sync the link and use it.
# This ensures tmux (using the static path) always finds the most recent agent.
if [ -S "${SSH_AUTH_SOCK:-}" ] && [ "${SSH_AUTH_SOCK}" != "${_SSH_AUTH_LINK}" ] ; then
  [ -d "$(dirname "${_SSH_AUTH_LINK}")" ] || mkdir -p "$(dirname "${_SSH_AUTH_LINK}")"
  ln -sf "${SSH_AUTH_SOCK}" "${_SSH_AUTH_LINK}"
  export SSH_AUTH_SOCK="${_SSH_AUTH_LINK}"
fi
unset _SSH_AUTH_LINK

# Setup XDG-like dirs on MacOS
# Based on https://leebyron.com/til/mac-xdg/
if [ "$(uname)" = "Darwin" ] ; then
  export XDG_BIN_HOME="${XDG_BIN_HOME:-$HOME/.local/bin}"
  export XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/Library/Caches}"
  export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
  export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
  # Using id -u for better POSIX compatibility than $UID
  export XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-$TMPDIR/runtime-$(id -u)}"
  export XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
fi

if test -e "$HOME/.localenv"; then
  # shellcheck source=/dev/null
  . "$HOME/.localenv"
else
  true
fi
