summaryrefslogtreecommitdiffstats
path: root/.bashrc
blob: dff2018f3d2126232b892516d763b7bb1e065693 (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
77
78
79
80
81
82
83
84
85
86
87
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

# Shell control
export HISTCONTROL=ignorespace:erasedups
export HISTSIZE=100000
export HISTFILESIZE=100000
shopt -s histappend
shopt -s checkwinsize

# User specific aliases and functions
alias rm='rm -i'
alias l='less -N'
alias dotgit='/usr/bin/git --git-dir=$HOME/code/dotfiles.git --work-tree=$HOME'

# Add to path cleanly
local_pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}
local_pathmunge ~/usr/local/bin

# An emacs 'alias' with the ability to read from stdin; example:
#    echo "hello world" | ef -
ef()
{
    # If the argument is - then write stdin to a tempfile and open the
    # tempfile.
    if [[ "$1" == "-" ]]; then
        tempfile=$(mktemp emacs-stdin-$USER.XXXXXXX --tmpdir)
        cat - > $tempfile
        emacsclient -n -c -e "(progn (find-file \"$tempfile\")
                               (set-visited-file-name nil)
                               (rename-buffer \"*stdin*\" t))
                 " 2>&1 > /dev/null
    else
        emacsclient -n -c "$@"
    fi
}

# Source first available file in list
source_first()
{
    for x in $*; do
        [ -f $x ] && source $x && break
    done
}

# fasd: Jump to directory or use FZF
j() {
    [ $# -gt 0 ] && fasd_cd -d "$*" && return
    local dir
    dir=$(fasd -Rdl "$1" | fzf -1 -0 --no-sort +m) && cd "${dir}" || return 1
}

# Set up command-line key bindings
case "$-" in
    *i*)
        # Interactive shells
        # Set up fzf and fasd
        source_first /usr/share/fzf/shell/key-bindings.bash ~/.fzf.bash
        eval "$(~/usr/local/bin/fasd --init auto)"
        complete -d j
        eval "$(direnv hook bash)"
        source ~/usr/local/bin/commacd.sh

        # Emacs tramp wants a simple prompt that it can recognize
        if [[ "$TERM" = "dumb" ]]; then
            PS1="> "
        fi
        ;;
    *)
        # Non-interactive shells
        ;;
esac