# Strip out a lot of machine and X11 dependent crap from the initial
# environment
set-environment -gru COLORFGBG
set-environment -gru COLORTERM
set-environment -gru DISPLAY
set-environment -gru SSH_CLIENT
set-environment -gru SSH_CONNECTION
set-environment -gru SSH_TTY
set-environment -gru WINDOWID
# Reset SHLVL
set-environment -gru SHLVL
# Otherwise, use the environment we had when we started; don't touch it during
# a session unless I specifically ask
set-option -g update-environment ''
# Setting this makes each new pane a non-login shell, which suits me better
set-option -g default-command "$SHELL"
# Set the default shell to /bin/sh to parse commands to be just a little bit
# quicker, and to avoid incrementing SHLVL twice
set-option -g default-shell "/bin/sh"
# Expect a 256-color terminal
set-option -g default-terminal 'screen-256color'
# Change the prefix to ^A rather than the default of ^B, because I'm a godless
# GNU Screen refugee, and also I like using ^B in my shell and in Vim more
unbind-key C-b
set-option -g prefix C-a
bind-key a send-prefix
# Repeating the prefix switches to the last window and back, a GNU Screen
# feature that's hardwired into my brain now
bind-key C-a last-window
# Quick ways to kill single windows and the whole server
bind-key '/' confirm-before 'kill-window'
bind-key '\' confirm-before 'kill-server'
# Slightly more intuitive way to split windows
bind-key '_' split-window -v
bind-key '|' split-window -h
# Switch to the last active pane
bind-key Tab last-pane
# Use the vi mode for tmux interaction behaviour in copy and choice modes
set-window-option -g mode-keys vi
# Detach with Alt-M, no prefix required
bind-key -n M-m detach
# Vim-like pane resizing
bind-key -r '+' resize-pane -U 5
bind-key -r '-' resize-pane -D 5
bind-key -r '<' resize-pane -L 5
bind-key -r '>' resize-pane -R 5
# Vim-like pane switching
bind-key h select-pane -L
bind-key j select-pane -D
bind-key k select-pane -U
bind-key l select-pane -R
# Vim-like keys for visual mode and yanking therefrom
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection
bind-key -t vi-copy Escape cancel
# Join and break panes
bind-key J choose-window "join-pane -h -s '%%'"
bind-key B break-pane -d
# Select only sessions in the choose-tree menu, not the whole tree of sessions
# and windows, I prefer to drill down
bind-key s choose-session
# Session title on the left side of the status bar
set-option -g status-left '[#S] '
# Username, hostname, and the current date on the right side of the status bar
set-option -g status-right ' [#(whoami)@#H] #(date +"%F %T")'
# Update the status bar every second
set-option -g status-interval 1
# The first window in a session has index 1, rather than 0
set-option -g base-index 1
# Don't worry about timeouts for key combinations, as I don't use Escape as
# meta and prefer things to be snappier
set-option -g escape-time 0
# Keep plenty of history
set-option -g history-limit 100000
# Don't interfere with my system clipboard
set-option -g set-clipboard off
# Only force individual windows to the smallest attached terminal size, not
# whole sessions
set-window-option -g aggressive-resize on
# If I don't set a title on a window, use the program name for the window title
set-window-option -g automatic-rename on
# However, don't let terminal escape sequences rename my windows
set-window-option -g allow-rename off
# Window titles are the window index, a colon, the window or command name, and
# any activity or alert indicators
set-window-option -g window-status-format "#I:#W#F"
# Message dialogs are white on blue
set-option -g message-style "bg=colour18,fg=colour231"
# Window choosers are white on blue
set-window-option -g mode-style "bg=colour18,fg=colour231"
# Pane borders are always in dark gray
set-option -g pane-border-style "fg=TMUX_COLOR"
set-option -g pane-active-border-style "fg=TMUX_COLOR"
# Inactive windows have a slightly grayed-out background and default text
set-option -g window-style "bg=colour232,fg=colour248"
set-option -g window-active-style "bg=colour0,fg=colour15"
# The status bar defaults to light gray on dark gray, which applies to the left
# and right status bar sections described in status-left and status-right above
set-option -g status-style "bg=TMUX_COLOR,fg=colour248"
# Titles of windows default to black text with no embellishment
set-window-option -g window-status-style "fg=colour16"
# The title of the active window is in white rather than black
set-window-option -g window-status-current-style "fg=colour231"
# A window with a bell has a title with a red background until cleared
set-window-option -g window-status-bell-style "bg=colour9"