#!/bin/sh # Main setup file executed for all kinds of shells # # For `bash`, if the following files exist, # they have precedence over this file: # - ~/.bash_login # - ~/.bash_profile # # So, we make both source this file, # and thus preserve the load order either way! # Prevent loading ~/.profile twice in `bash` PROFILE_LOADED=1 # Basic utilities _command_exists() { command -v "$1" 1>/dev/null 2>&1 } _in_bash() { [ -n "$BASH_VERSION" ] } _in_zsh() { [ -n "$ZSH_VERSION" ] } _prepend_to_path () { if [ -d "$1" ] ; then case :$PATH: in *:$1:*) ;; *) PATH=$1:$PATH ;; esac fi } _prepend_to_path "$HOME/.local/bin" [ -f "$HOME/.config/shell/env" ] && . "$HOME/.config/shell/env" # Must be between sourcing ~/.config/shell/env and ~/.config/shell/aliases # because the first defines the `pyenv` related environment variables # while the second creates `pyenv` related aliases _prepend_to_path "$PYENV_ROOT/bin" [ -f "$HOME/.config/shell/aliases" ] && . "$HOME/.config/shell/aliases" # Source ~/.profile_local, which holds machine-specific ENV variables [ -f "$HOME/.profile_local" ] && . "$HOME/.profile_local" # Load `bash`-specific configurations for non-login `bash` shells if [ -n "$BASH_VERSION" ] && [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi # `zsh`-specific configurations are automatically sourced from ~/.zshrc, # which then also ensures that this file is sourced if [ -z "${PYENV_SHELL:-}" ] && _command_exists pyenv; then eval "$(pyenv init -)" || echo "WARN: pyenv init failed" >&2 case $- in *i*) if [ -d "$PYENV_ROOT/plugins/pyenv-virtualenv" ]; then eval "$(pyenv virtualenv-init -)" || true fi ;; esac fi # When everything is loaded, show a little welcome message case $- in *i*) [ -f "$HOME/.config/shell/welcome" ] && . "$HOME/.config/shell/welcome";; esac