mirror of
https://github.com/jakejarvis/dotfiles.git
synced 2025-04-26 03:45:21 -04:00
136 lines
4.4 KiB
Bash
136 lines
4.4 KiB
Bash
#!/usr/bin/env zsh
|
|
|
|
# Homebrew's location is different depending on OS...
|
|
# https://github.com/Homebrew/install/blob/master/install.sh#L122
|
|
if [[ -d /opt/homebrew ]]; then
|
|
# macOS on Apple Silicon
|
|
BREW_BIN="/opt/homebrew/bin/brew"
|
|
elif [[ -d "$HOME/.linuxbrew" ]]; then
|
|
# Linux, user install
|
|
# NOTE: definitely discouraged, maybe deprecated? https://github.com/Homebrew/install/pull/702
|
|
BREW_BIN="$HOME/.linuxbrew/bin/brew"
|
|
elif [[ -d /home/linuxbrew/.linuxbrew ]]; then
|
|
# Linux, system install
|
|
BREW_BIN="/home/linuxbrew/.linuxbrew/bin/brew"
|
|
else
|
|
# macOS on Intel (hopefully, or else we're kinda doomed...)
|
|
BREW_BIN="/usr/local/bin/brew"
|
|
fi
|
|
|
|
# set PATHs for Homebrew (if we found it)
|
|
if [[ -x "$BREW_BIN" ]]; then
|
|
eval "$("$BREW_BIN" shellenv)"
|
|
|
|
# macOS-only remedies
|
|
if [[ "$OSTYPE" = darwin* ]]; then
|
|
# manually add VS Code 'code' command to path
|
|
# https://code.visualstudio.com/docs/setup/mac#_alternative-manual-instructions
|
|
if [[ -d "/Applications/Visual Studio Code.app/Contents/Resources/app/bin" ]]; then
|
|
path=("/Applications/Visual Studio Code.app/Contents/Resources/app/bin" $path)
|
|
fi
|
|
|
|
# remap macOS core utils to GNU equivalents without needing the 'g' prefix (e.g. ggrep -> grep):
|
|
# https://gist.github.com/skyzyx/3438280b18e4f7c490db8a2a2ca0b9da?permalink_comment_id=3049694#gistcomment-3049694
|
|
for gnubin in "$(brew --prefix)"/opt/*/libexec/gnubin; do
|
|
path=($gnubin $path)
|
|
done
|
|
|
|
# ensure man also points to the GNU manuals
|
|
for gnuman in "$(brew --prefix)"/opt/*/libexec/gnuman; do
|
|
manpath=($gnuman $manpath)
|
|
done
|
|
|
|
# declare the base xcode & homebrew paths first
|
|
LDFLAGS="${LDFLAGS:+"$LDFLAGS "}-L$(brew --prefix)/lib"
|
|
CFLAGS="${CPPFLAGS:+"$CPPFLAGS "}-I$(brew --prefix)/include -I$(brew --prefix openjdk)/include"
|
|
PKG_CONFIG_PATH="${PKG_CONFIG_PATH:+${PKG_CONFIG_PATH}:}$(brew --prefix)/lib/pkgconfig"
|
|
|
|
# tell compilers and pkg-config where to find the homebrew versions (rather than the vendored macOS versions) of the
|
|
# following packages:
|
|
declare -a compiler_libs=(
|
|
bzip2
|
|
curl
|
|
jemalloc
|
|
libffi
|
|
gettext
|
|
libxml2
|
|
ncurses
|
|
openssl@1.1
|
|
readline
|
|
sqlite
|
|
tcl-tk
|
|
icu4c
|
|
xz
|
|
zlib
|
|
)
|
|
|
|
# append the specific paths for each of the above libraries
|
|
for lib in $compiler_libs; do
|
|
# TODO: 'brew --prefix' got pretty slow in Homebrew v4, so these calls should be cleaned up/optimized
|
|
# https://github.com/Homebrew/brew/commit/ca32473a672ef08be60792a921a3a1e4dcc32e13
|
|
LDFLAGS+=" -L$(brew --prefix $lib)/lib"
|
|
CFLAGS+=" -I$(brew --prefix $lib)/include"
|
|
PKG_CONFIG_PATH+=":$(brew --prefix $lib)/lib/pkgconfig"
|
|
done
|
|
|
|
# it's easier to do ruby opts separately as it needs different libraries than above in a very different format
|
|
RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1) --with-readline-dir=$(brew --prefix readline) --with-jemalloc-dir=$(brew --prefix jemalloc) --with-libffi-dir=$(brew --prefix libffi) --with-libyaml-dir=$(brew --prefix libyaml) $RUBY_CONFIGURE_OPTS"
|
|
|
|
# add xcode flags last
|
|
if command -v xcrun &>/dev/null; then
|
|
LDFLAGS+=" -L$(xcrun --show-sdk-path)/usr/lib"
|
|
CFLAGS+=" -I$(xcrun --show-sdk-path)/usr/include"
|
|
PKG_CONFIG_PATH+=":$(brew --prefix $lib)/lib/pkgconfig"
|
|
fi
|
|
|
|
# finally all done with this mess
|
|
export LDFLAGS CPPFLAGS PKG_CONFIG_PATH RUBY_CONFIGURE_OPTS
|
|
unset gnubin gnuman compiler_libs lib
|
|
fi
|
|
fi
|
|
|
|
# go
|
|
if [[ -d "$HOME/golang" ]]; then
|
|
export GOPATH="$HOME/golang"
|
|
path=("$GOPATH/bin" $path)
|
|
fi
|
|
|
|
# rust/cargo
|
|
if [[ -d "$HOME/.cargo" ]]; then
|
|
path=("$HOME/.cargo/bin" $path)
|
|
fi
|
|
|
|
# fnm
|
|
if command -v fnm &>/dev/null; then
|
|
eval "$(fnm env --use-on-cd --shell zsh)"
|
|
fi
|
|
|
|
# rbenv
|
|
if command -v rbenv &>/dev/null; then
|
|
eval "$(rbenv init - --no-rehash zsh)"
|
|
fi
|
|
|
|
# pyenv
|
|
if command -v pyenv &>/dev/null; then
|
|
eval "$(pyenv init - --no-rehash zsh)"
|
|
|
|
# pyenv-virtualenv
|
|
if command -v pyenv-virtualenv-init &>/dev/null; then
|
|
eval "$(pyenv virtualenv-init - zsh)"
|
|
fi
|
|
fi
|
|
|
|
# pnpm
|
|
if [[ -d "$HOME/.local/share/pnpm" ]]; then
|
|
path=("$HOME/.local/share/pnpm" $path)
|
|
fi
|
|
|
|
# docker user mode, see: https://docs.docker.com/desktop/mac/permission-requirements/#installing-symlinks
|
|
if [[ -d "$HOME/.docker/bin" ]]; then
|
|
path=("$HOME/.docker/bin" $path)
|
|
fi
|
|
|
|
# let zsh sort out formatting and deduplication
|
|
typeset -aU path fpath manpath
|
|
export PATH FPATH MANPATH
|