summaryrefslogtreecommitdiff
path: root/dotfiles/common/.bashrc
blob: b2177d9ebd99f1d1c80f329177441667eda7f395 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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)"