summaryrefslogtreecommitdiffstats
path: root/.bashrc
blob: 471b1a4d8fde5b9016e8e53db42594ec2b4690f9 (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
123
124
125
126
127
128
129
130
# 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
# disallow overwriting existing file using redirection
set -o noclobber
# 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:ll:s:g:[bf]g:history:da:li'
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"
alias s="startx"

alias da='change-theme dark'
alias li='change-theme light'

alias dquilt="quilt --quiltrc=${HOME}/.quiltrc-dpkg"
complete -F _quilt_completion -o filenames dquilt

aur() {
   cd ~/s
   [ -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}/.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