128 lines
3.5 KiB
Bash
128 lines
3.5 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# these are all paths used across many of the dotfiles and should be assumed to
|
|
# be loaded and properly set by every script - this means you are responsible
|
|
# for making sure they're loaded!
|
|
export XDG_CONFIG_HOME="$HOME/.config"
|
|
export DOTFILES_PATH="$XDG_CONFIG_HOME/dotfiles"
|
|
export ENV_DOTFILES_PATH="$DOTFILES_PATH/.env"
|
|
export EDFP="$ENV_DOTFILES_PATH" # shorter alias
|
|
NICE_HOME="$HOME"
|
|
|
|
# TODO: better logic for auto-detecting alternative home directories?
|
|
# 1. check dirname(basename $HOME)) matches username
|
|
# 2. check /home/$username
|
|
[[ $(basename "${HOME}") = ".home" ]] && NICE_HOME="$(realpath "$HOME/..")"
|
|
[[ -e "${HOME}/.nice_home" ]] && NICE_HOME="$(cat "${HOME}/.nice_home")"
|
|
[[ -e "${EDFP}/.nice_home" ]] && NICE_HOME="$(cat "${EDFP}/.nice_home")"
|
|
|
|
export NICE_HOME
|
|
|
|
# set our PATH
|
|
source "$DOTFILES_PATH/apps/shell/bash/paths"
|
|
|
|
# stop parsing on a non-interactive shell
|
|
[ -z "$PS1" ] && return
|
|
|
|
# load our key binds
|
|
case $- in
|
|
*i*) bind -f "$DOTFILES_PATH/apps/shell/inputrc";;
|
|
*) ;;
|
|
esac
|
|
|
|
# import our aliases
|
|
source "$DOTFILES_PATH/apps/shell/bash/aliases"
|
|
|
|
# import our autocompletions
|
|
source "$DOTFILES_PATH/apps/shell/bash/autocompletions"
|
|
|
|
# load our vconsole colors
|
|
if [ "${TERM%%-*}" = 'linux' ] && [[ $- == *i* ]]; then
|
|
BASE16_SHELL="$DOTFILES_PATH/bin/lib/colors/vconsole"
|
|
[[ -s "$BASE16_SHELL" ]] && source "$BASE16_SHELL"
|
|
fi
|
|
|
|
# load our terminal colors
|
|
BASE16_SHELL="$DOTFILES_PATH/bin/lib/colors/shell"
|
|
[[ -s "$BASE16_SHELL" ]] && source "$BASE16_SHELL"
|
|
|
|
# disable ctrl-s terminal freeze
|
|
[[ $- == *i* ]] && stty -ixon
|
|
|
|
# allow ** recursive wildcard globbing
|
|
shopt -s globstar
|
|
|
|
# import our prompt
|
|
source "$DOTFILES_PATH/apps/shell/bash/prompt"
|
|
|
|
# prevents binds or commands pulling from history from insta-sending, and
|
|
# instead places them in the readline for editing
|
|
shopt -s histverify
|
|
|
|
# always _append_ to bash history
|
|
shopt -s histappend
|
|
|
|
# prevents some Java GUI apps from not working or rendering properly due to
|
|
# using wacky window managers
|
|
export _JAVA_AWT_WM_NONREPARENTING=1
|
|
|
|
LS_COLORS='ow=01;36;40'
|
|
export LS_COLORS
|
|
|
|
# less tab size of 2 spaces
|
|
LESS="-x2"
|
|
export LESS
|
|
|
|
# set our EDITOR to neovim if we've got it
|
|
export EDITOR="vim"
|
|
if command -v nvim >/dev/null 2>&1; then
|
|
alias vim="nvim"
|
|
alias ovim="\\vim"
|
|
export EDITOR="nvim"
|
|
fi
|
|
|
|
export TERMINAL="urxvtc"
|
|
|
|
export BROWSER="firefox-developer-edition"
|
|
|
|
# "unlimited" history
|
|
export HISTFILESIZE="10000000"
|
|
export HISTSIZE="10000000"
|
|
|
|
# ignore duplicates and commands starting with space (" ")
|
|
export HISTCONTROL=ignoreboth
|
|
|
|
# ignore certain commands
|
|
HISTIGNORE='ls:ll:la'
|
|
|
|
# ensure command history is comprised of single lines
|
|
shopt -s cmdhist
|
|
|
|
# load a per-device config last so anything can be overridden
|
|
if [ -a "$EDFP/bash" ]; then
|
|
source "$EDFP/bash"
|
|
fi
|
|
|
|
# we assume the user uses "$HOME" to just store their mess of dotfiles and other
|
|
# nonsense that clutters it up and that they have a preferred starting
|
|
# directory where they keep the stuff they actually care about
|
|
# we only do this if the user is opening a shell at $HOME
|
|
if [ "$PWD" = "$HOME" ]; then
|
|
cd "$NICE_HOME" || cd || return
|
|
fi
|
|
|
|
# TODO: check if fd command exists
|
|
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
|
|
|
|
export ERL_AFLAGS="-kernel shell_history enabled -kernel shell_history_file_bytes 1024000"
|
|
|
|
_make_paths
|
|
|
|
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
|
|
|
|
if [[ -d ~/.asdf/ ]] && [[ -f ~/.asdf/asdf.sh ]]; then
|
|
source "~/.asdf/asdf.sh"
|
|
elif [[ -d /opt/asdf-vm/ ]] && [[ -f /opt/asdf-vm/asdf.sh ]]; then
|
|
source "/opt/asdf-vm/asdf.sh"
|
|
fi
|