summaryrefslogtreecommitdiffstats
path: root/.bashrc
blob: a48c605f57edd37491fb146a380a7fdf890a7b90 (plain) (blame)
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# Bash initialization for interactive non-login shells and
# for remote shells (info "(bash) Bash Startup Files").

# Export 'SHELL' to child processes.  Programs such as 'screen'
# honor it and otherwise use /bin/sh.
export SHELL

if [[ $- != *i* ]]
then
    # We are being invoked from a non-interactive shell.  If this
    # is an SSH session (as in "ssh host command"), source
    # /etc/profile so we get PATH and other essential variables.
    [[ -n "$SSH_CLIENT" ]] && source /etc/profile

    # Don't do anything else.
    return
fi

if [ -n "$IS_GUIX_SYSTEM" ]; then
    # Source the system-wide file.
    source /etc/bashrc
fi

# from https://unix.stackexchange.com/a/55935
b_prompt() {
    cwd=$(sed -e "s:$HOME:~:" -e "s:\(\.\?[^/]\)[^/]*/:\1/:g" <<<$PWD)
    printf $cwd
}

if [ $(id -u) == "0" ]; then
    PS1='`printf "\[\e[1;31m\]\$\[\e[00m\]"` '
else
    PS1='\$ '
fi
PS1="\u@\h:\w/`[ -n "$GUIX_ENVIRONMENT" ] && printf \" [env]\"`\n$PS1"

# set terminal title
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: $(b_prompt)\007"'

# i-beam cursor
# echo -e "\033[5 q"              # blinking
echo -e "\033[6 q"              # non-blinking

# various bash tweaks
# append to the history file, don't overwrite it
shopt -s histappend
shopt -s cmdhist
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=
HISTFILESIZE=
# don't put duplicate lines or lines starting with space in the
# history.
HISTCONTROL=ignoreboth
# ignore a few very common commands and don't add them to history
HISTIGNORE='ls:l:s:g:[bf]g:history'
HISTTIMEFORMAT='%F %T '
stty stop ""

# aliases
alias ls='ls -p --color=auto'
alias l='ls -lh'                # long format and human-readable sizes
alias ll='l -A'                 # long format, all files
alias dir='dir --color=auto'
alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias mpv="mpv --ytdl-format mp4"
alias mv="mv -iv"
alias cp="cp -iv"
alias mbsync='mbsync -c "$XDG_CONFIG_HOME"/isync/mbsyncrc'
alias getmail='getmail --getmaildir "$XDG_CONFIG_HOME"/getmail --rcfile getmailrc'
alias m="mbsync csclub; mbsync uwaterloo; mbsync shemshak; mbsync gnub"
alias best="youtube-dl -f best"
alias e="$EDITOR"
alias se="SUDO_EDITOR=\"emacsclient\" sudo -e"

aur() {
   cd ~/usr/builds
   [ -d ${1} ] || git clone https://aur.archlinux.org/${1}.git
   cd ${1}
}

function t {
  cd $(mktemp -d /tmp/$1.XXXX)
}

# separate alias definitions file, if exists
if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (not needed if already
# enabled in /etc/bash.bashrc and if /etc/profile sources
# /etc/bash.bashrc).
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 Guix shell config dirs, for vte.sh and bash completions
GUIX_PROFILES=("${HOME}/.desktop-profile"
               "${HOME}/.guix-profile"
               "${HOME}/.config/guix/current")
for profile in "${GUIX_PROFILES[@]}"; do
    for dir in "${profile}/etc/bash_completion.d" "${profile}/etc/profile.d"; do
        if [ -d "${dir}" ]; then
            for f in "${dir}"/*; do
                . $f
            done
        fi
    done
done