summaryrefslogtreecommitdiffstats
path: root/bash/bashrc
blob: 0bdac5a1ab19cae4e8dd0f8766a8c9436d4b3d44 (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
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# ~/.bashrc: executed by bash(1) for non-login shells.  (That's why ~/.profile
# is needed.  To source it from login shells? What does login shell mean
# anyway).

# Tinkerer's guide to a prettier and colorful CLI:
# https://wiki.archlinux.org/title/Color_output_in_console

# Basic
# ======================================================================

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# 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

# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# colored GCC warnings and errors
export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# Alias definitions.
if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc). Requires `bash-completion package
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

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

# Custom prompt:
# - Blue timestamp and italic green pwd
#PS1='\[\033[34m\]|\D{%H:%M:%S}| \[\033[3;32m\][\w]\[\033[00m\]\n\$ '
# If error `-bash: __git_ps1: command not found`, uncomment the following line
# Ref.: https://stackoverflow.com/a/15398153/7498073
source ~/.git-prompt.sh
# user@host pwd (git prompt)
PS1='\[\033[32m\]\u@\h \[\033[35m\]$MSYSTEM \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\]\n$ '


# Extra
# ======================================================================

# Default editor.  Affects a lot of programs.
export EDITOR=vim

# redundant but useful 
# XDG = Cross-Desktop Group
# For more info see https://wiki.archlinux.org/index.php/XDG_Base_Directory
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_DATA_HOME="$HOME/.local/share"
#export XDG_DATA_DIRS="/usr/local/share:/usr/share"
#export XDG_CONFIG_DIRS="/etc/xdg"

# less
LESS="-i "                      # ignore case
LESS+="-S "                     # don't chop long lines
LESS+="--RAW-CONTROL-CHARS"
export LESS

# tldr
export TLDR_CONFIG_DIR="$XDG_CONFIG_HOME"

# gpg
export GPG_TTY=$(tty)

# tmux
export TERM="xterm-256color"

# EGA/VGA font (used with ArchLinux in pre-Xorg session)
if [ -z $DESKTOP_SESSION ]; then
    setfont LatGrkCyr-8x16
fi



# Optional
# ======================================================================

# Bash completition for pandoc
if [ -f /usr/bin/pandoc ]; then
    eval "$(pandoc --bash-completion)"
fi

# Greeting or salute
if [ -f /usr/games/cowsay ]; then
    # TODO: randomly select one of the following greeting commands
    #cowsay -f flaming-sheep "oh no" # original
    #cowsay $(fortune -e 30% debian-hints 20% linux 20% science \
    #cowsay $(fortune 30% debian-hints 20% linux 20% science \
    #                 20% off/linux 10% off/black-humor)
    cowsay $(fortune)
    #fortune ascii-art
else
    echo "Welcome back $LOGNAME"
fi

# Homebrew (linuxbrew)
if [ -f /usr/bin/brew ]; then
    # for elf executables
    export PATH="/home/linuxbrew/.linuxbrew/bin:${PATH}"
    # for manpages
    export MANPATH="/home/linuxbrew/.linuxbrew/share/man:${MANPATH}"
    # for info pages
    export INFOPATH="/home/linuxbrew/.linuxbrew/share/info:${INFOPATH}"
fi

# Node.js
export NODE_PATH=~/code/nodejs/node-v16.15.1-linux-x64/lib/node_modules

# Rust
#. "$HOME/.cargo/env"