#!/bin/bash # Default programs: export BROWSER=firefox export EDITOR=vim export FILE=ranger export IMAGES=feh export PAGER=less export TERMINAL=kitty export VISUAL=code # Misc vars export CHROME_EXECUTABLE=chromium # For Flutter # Set XDG directories: export XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}" export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}" # Clean home: export ANDROID_HOME="$XDG_DATA_HOME/Android/Sdk" export CARGO_HOME="$XDG_DATA_HOME/cargo" export KREW_ROOT="$XDG_DATA_HOME/krew" export FLUTTER_HOME="$XDG_DATA_HOME/flutter" export GOPATH="$XDG_DATA_HOME/go" export HISTFILE="$XDG_DATA_HOME/history" export XINITRC="$XDG_CONFIG_HOME/x11/xinitrc" export ZDOTDIR="$XDG_CONFIG_HOME/zsh" export NVM_DIR="$XDG_CONFIG_HOME/nvm" export NUGET_PACKAGES="$XDG_DATA_HOME/nuget" # Color man pages: export LESS=-r export LESS_TERMCAP_mb=$'\E[01;32m' export LESS_TERMCAP_md=$'\E[01;32m' export LESS_TERMCAP_me=$'\E[0m' export LESS_TERMCAP_se=$'\E[0m' export LESS_TERMCAP_so=$'\E[01;47;34m' export LESS_TERMCAP_ue=$'\E[0m' export LESS_TERMCAP_us=$'\E[01;36m' # Other program settings: export DISPLAY_DPI=96 # Remove an entry from PATH rm_path_entry() { local shell="${SHELL##*/}" rm_entry="${1:?Entry not set}" new_path path_arr if [[ "$shell" == "zsh" ]]; then IFS=" " read -A path_arr <<<"${PATH//:/ }" else IFS=" " read -a path_arr <<<"${PATH//:/ }" fi for path_entry in "${path_arr[@]}"; do grep -Eq "^$rm_entry$" <<<"$path_entry" && continue new_path="$new_path:$path_entry" done PATH="${new_path#:}" } # Remove one or more entries from PATH rm_path_entries() { local rm_entry for rm_entry in "$@"; do rm_path_entry "$rm_entry" done } # Prepend one or more entries to PATH. # The order of the supplied args will be kept, e.g. PATH="$1:$2:$PATH" prepend_path_with_entries() { local addl_paths entry for entry in "$@"; do ! [ -d "$entry" ] && continue addl_paths="$addl_paths:$entry" done PATH="${addl_paths#:}:$PATH" } # Append one or more entries to PATH. # The order of the supplied args will be kept, e.g. PATH="$PATH:$1:$2" append_path_with_entries() { local addl_paths entry for entry in "$@"; do ! [ -d "$entry" ] && continue addl_paths="$addl_paths:$entry" done PATH="$PATH:${addl_paths#:}" } prepend_paths=( "$HOME/.local/bin" "$HOME/.cargo/bin" "$FLUTTER_HOME/bin" "$GOPATH/bin" "$KREW_ROOT/bin" ) append_paths=() HOMEBREW_PREFIX="$XDG_DATA_HOME/homebrew" if [ -x "$HOMEBREW_PREFIX/bin/brew" ]; then eval "$("$HOMEBREW_PREFIX/bin/brew" shellenv)" append_paths+=("$HOMEBREW_PREFIX/bin" "$HOMEBREW_PREFIX/sbin") fi rm_path_entries "${prepend_paths[@]}" "${append_paths[@]}" # Ensure we clean up first prepend_path_with_entries "${prepend_paths[@]}" append_path_with_entries "${append_paths[@]}" # Add the profile-extras file yourself if you wish to override anything: PROFILE_EXTRAS="$XDG_CONFIG_HOME/shell/profile-extras" [ -f "$PROFILE_EXTRAS" ] && . "$PROFILE_EXTRAS"