On Terminals

There's no point in denying this: I'm a heavy terminal user. To be specific, I prefer plain 'ol xterm.

I'm a bit more particular than that though - I prefer xterm, with GNU Screen inside of it, Solarized color palette, and with a GNU Bash shell - with my customized .screenrc, .Xresources, .bashrc, command prompt, and extended tab completion (amongst others).

And because I'm such a nice guy, I'm going to share my customizations for each of these with you. Most of these I've had kicking around for years, and many of which started from something I found online. Sadly, I can't cite their origins any longer...

~/.Xresources

This is the config file from which I load X Resources. It's customized to be Solarized. I load it with xrdb .Xdefaults from within ~/.xsession.

!! make double clicking on text to select the entire word
xterm*charClass: 33:48,35:48,37:48,43:48,45-47:48,64:48,95:48,126:48

!! drop in Solarized colorscheme for Xresources/Xdefaults

!!SOLARIZED HEX      16/8 TERMCOL  XTERM/HEX   L*A*B       RGB           HSB
!!--------- ------- ---- -------  ----------- ---------- ----------- -----------
!!base03     #002b36  8/4 brblack  234 #1c1c1c 15 -12 -12   0  43  54 193 100  21
!!base02     #073642  0/4 black     235 #262626 20 -12 -12   7  54  66 192  90  26
!!base01     #586e75 10/7 brgreen  240 #585858 45 -07 -07  88 110 117 194  25  46
!!base00     #657b83 11/7 bryellow 241 #626262 50 -07 -07 101 123 131 195  23  51
!!base0      #839496 12/6 brblue   244 #808080 60 -06 -03 131 148 150 186  13  59
!!base1      #93a1a1 14/4 brcyan   245 #8a8a8a 65 -05 -02 147 161 161 180   9  63
!!base2      #eee8d5  7/7 white     254 #e4e4e4 92 -00  10 238 232 213  44  11  93
!!base3      #fdf6e3 15/7 brwhite  230 #ffffd7 97  00  10 253 246 227  44  10  99
!!yellow     #b58900  3/3 yellow   136 #af8700 60  10  65 181 137   0  45 100  71
!!orange     #cb4b16  9/3 brred     166 #d75f00 50  50  55 203  75  22  18  89  80
!!red        #dc322f  1/1 red       160 #d70000 50  65  45 220  50  47   1  79  86
!!magenta   #d33682  5/5 magenta  125 #af005f 50  65 -05 211  54 130 331  74  83
!!violet     #6c71c4 13/5 brmagenta 61 #5f5faf 50  15 -45 108 113 196 237  45  77
!!blue       #268bd2  4/4 blue       33 #0087ff 55 -10 -45  38 139 210 205  82  82
!!cyan       #2aa198  6/6 cyan       37 #00afaf 60 -35 -05  42 161 152 175  74  63
!!green      #859900  2/2 green      64 #5f8700 60 -20  65 133 153   0  68 100  60

#define S_base03          #002b36
#define S_base02          #073642
#define S_base01          #586e75
#define S_base00          #657b83
#define S_base0           #839496
#define S_base1           #93a1a1
#define S_base2           #eee8d5
#define S_base3           #fdf6e3
#define S_yellow          #b58900
#define S_orange          #cb4b16
#define S_red             #dc322f
#define S_magenta        #d33682
#define S_violet          #6c71c4
#define S_blue            #268bd2
#define S_cyan            #2aa198
#define S_green           #859900

*background:               S_base03
*foreground:               S_base00
*fading:                    40
*fadeColor:                S_base03
*cursorColor:             S_base1
*pointerColorBackground:S_base01
*pointerColorForeground:S_base1

!! black dark/light
*color0:                    S_base02
*color8:                    S_base03

!! red dark/light
*color1:                    S_red
*color9:                    S_orange

!! green dark/light
*color2:                    S_green
*color10:                  S_base01

!! yellow dark/light
*color3:                    S_yellow
*color11:                  S_base00

!! blue dark/light
*color4:                    S_blue
*color12:                  S_base0

!! magenta dark/light
*color5:                    S_magenta
*color13:                  S_violet

!! cyan dark/light
*color6:                    S_cyan
*color14:                  S_base1

!! white dark/light
*color7:                    S_base2
*color15:                  S_base3

~/.screenrc

Yeah, I know, I should be running tmux instead, but whatever.

This configuration does a couple of nice things - but mainly it adds a nice statusbar to the bottom of each session showing handy stuff like the hostname, the open pseudo-terminals, and the date and time.

startup_message off
caption string "%?%F%{= Bk}%? %C%A %D %d-%m-%Y %{= kB} %t%= %?%F%{= Bk}%:%{= wk}%? %n "
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %d/%m %{W}%c %{g}]'

multiuser on
#acladd root,blood,brent
defscrollback 29999

termcapinfo xterm* ti@:te@

~/.bashrc

This is how I customize my shell on most systems. I sometimes have to do a bit of work for this to work like symlinking .bash_profile to it or pointing it at a custom location for the bash completion stuff - but this generally gets me where I want to be.

# .bashrc

# User specific aliases and functions

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

if [ -f /etc/bash_completion ]; then
          . /etc/bash_completion
fi

# solarized dircolors
if [ -f ~/.dircolors/dircolors.ansi-dark ]; then
     eval ``dircolors ~/.dircolors/dircolors.ansi-dark``
fi

export EDITOR=vim
export QUOTING_STYLE="literal"
export LIBVIRT_DEFAULT_URI="qemu:///system"
export HISTCONTROL="ignoreboth:erasedups"
export MANPAGER="sh -c 'col -bx | bat -l man -p'"

if which thefuck > /dev/null; then
    eval "$(thefuck --alias)"
fi

if [ "$PS1" ]
then
     RED="\[\033[0;31m\]"
     GREEN="\[\033[0;32m\]"
     BLUE="\[\033[0;36m\]"
     GRAY="\[\033[0;37m\]"
     PINK="\[\033[0;35m\]"

     NORMAL="\[\e[m\]"

     if [ "$UID" = "0" ];
     then # I am root
          PS1="$RED[$PINK\u$GREEN@$NORMAL\h \W$RED]$GREEN# $NORMAL"
     else
          PS1="$RED[$GREEN@$NORMAL\h \W$RED]$GREEN\$ $NORMAL"
     fi
fi

~/.vimrc

I'm not terribly fancy with how I configure vim. I don't bother with the solarized theme for vim because I found that having the X resources configured already gives me what I want.

syntax on
set smartindent
set softtabstop=4
set shiftwidth=4
set tabstop=4
"set textwidth=80
set expandtab
set modeline modelines=5
set number

~/.ssh/config

This isn't my entire ssh config file, but these are the common elements that I always want by default. This makes the .ssh/known_hosts readable so you can find old entries and remove them easier, and it sets the TCP keepalive interval for SSH sessions which makes it play nicer with firewalls and NAT.

 Host *
           ServerAliveInterval 60
           HashKnownHosts no

~/.kermrc

I tend to use Kermit for quick connections to serial devices, and this saves me a bit of time usually.

 set line /dev/ttyUSB0
 set speed 115200
 set carrier-watch off
 set flow-control none