#!/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 the stable link first if [ -S "${_SSH_AUTH_LINK}" ] ; then export SSH_AUTH_SOCK="${_SSH_AUTH_LINK}" fi fi # If STILL not valid, try to find an OpenSSH agent if [ -z "${SSH_AUTH_SOCK:-}" ] || [ ! -S "${SSH_AUTH_SOCK}" ] ; then if [ "$(uname)" = "Darwin" ] ; then _SSH_SOCK=$(launchctl getenv SSH_AUTH_SOCK 2>/dev/null) [ -S "${_SSH_SOCK}" ] && export SSH_AUTH_SOCK="${_SSH_SOCK}" else # Try systemd or common paths _SSH_SOCK=$(command -v systemctl >/dev/null && systemctl --user show-environment 2>/dev/null | grep "^SSH_AUTH_SOCK=" | cut -d= -f2-) if [ -z "${_SSH_SOCK}" ] || [ ! -S "${_SSH_SOCK}" ] ; then # Check specific known paths first (no globs) if [ -S "/run/user/$(id -u)/keyring/ssh" ] ; then _SSH_SOCK="/run/user/$(id -u)/keyring/ssh" elif [ -S "/run/user/$(id -u)/ssh-agent.socket" ] ; then _SSH_SOCK="/run/user/$(id -u)/ssh-agent.socket" else # Fallback to searching /tmp with find (safe for zsh) # Using a more targeted find to stay efficient _SSH_SOCK=$(find /tmp -maxdepth 2 -type s -name 'agent.*' 2>/dev/null | head -n 1) # Some systems might have an older find without maxdepth if [ -z "${_SSH_SOCK}" ] ; then _SSH_SOCK=$(find /tmp -type s -name 'agent.*' 2>/dev/null | head -n 1) fi fi fi [ -S "${_SSH_SOCK}" ] && export SSH_AUTH_SOCK="${_SSH_SOCK}" fi unset _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