summaryrefslogtreecommitdiff
path: root/dotfiles/common/.bashrc
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/common/.bashrc')
-rw-r--r--dotfiles/common/.bashrc76
1 files changed, 76 insertions, 0 deletions
diff --git a/dotfiles/common/.bashrc b/dotfiles/common/.bashrc
new file mode 100644
index 0000000..b2177d9
--- /dev/null
+++ b/dotfiles/common/.bashrc
@@ -0,0 +1,76 @@
+#!/bin/bash
+# .bashrc
+# Craig Jennings <c@cjennings.net>
+#
+# Bash-specific interactive shell settings.
+# Aliases, functions, prompt, completions, shell options.
+
+# If not running interactively, don't do anything
+case $- in
+ *i*) ;;
+ *) return;;
+esac
+
+# =============================================================================
+# Environment Variables (from .profile)
+# =============================================================================
+# Source .profile for env vars (needed for non-login interactive shells)
+[ -f "$HOME/.profile" ] && . "$HOME/.profile"
+
+# =============================================================================
+# Shell Options
+# =============================================================================
+shopt -s histappend # append to history file, don't overwrite
+shopt -s checkwinsize # update LINES and COLUMNS after each command
+shopt -s autocd # cd to directory by typing its name
+shopt -s cdspell # correct minor spelling errors in cd
+shopt -s dirspell # correct spelling errors during tab-completion
+
+# =============================================================================
+# History
+# =============================================================================
+HISTCONTROL=ignoreboth # ignore duplicates and lines starting with space
+HISTSIZE=100000
+HISTFILESIZE=10000000
+HISTIGNORE="ls:ll:cd:pwd:bg:fg:history:exit"
+PROMPT_COMMAND="history -a; history -n" # append and reload after each command
+
+# =============================================================================
+# Prompt
+# =============================================================================
+PS1='[\d, \t] \u@\H:\w \n$ '
+
+# =============================================================================
+# Completions
+# =============================================================================
+if ! shopt -oq posix; then
+ if [ -f /usr/share/bash-completion/bash_completion ]; then
+ . /usr/share/bash-completion/bash_completion
+ elif [ -f /etc/bash_completion ]; then
+ . /etc/bash_completion
+ fi
+fi
+
+# =============================================================================
+# Source modular bash configs from .bashrc.d/
+# =============================================================================
+if [ -d "$HOME/.bashrc.d" ]; then
+ for file in "$HOME/.bashrc.d"/*.sh; do
+ [ -r "$file" ] && . "$file"
+ done
+ unset file
+fi
+
+# =============================================================================
+# Tool-specific initialization
+# =============================================================================
+# FZF
+[ -f "$HOME/.fzf.bash" ] && . "$HOME/.fzf.bash"
+
+# Deno
+[ -f "$HOME/.deno/env" ] && . "$HOME/.deno/env"
+[ -f "$HOME/.local/share/bash-completion/completions/deno.bash" ] && \
+ . "$HOME/.local/share/bash-completion/completions/deno.bash"
+
+# Zoxide (smart cd)
+command -v zoxide >/dev/null 2>&1 && eval "$(zoxide init bash)"