about summary refs log tree commit diff
path: root/configs/shared/tmux/.tmux.conf
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2018-09-10T18·51-0400
committerWilliam Carroll <wpcarro@gmail.com>2018-09-10T18·53-0400
commit17ee0e400bef47c371afcae76037f9ea6a44ad13 (patch)
tree0e5efee6f00e402890e91f3eceb4b29408a498b6 /configs/shared/tmux/.tmux.conf
parent8b2fadf4776b7ddb4a67b4bc8ff6463770e56028 (diff)
Support Vim, Tmux, Emacs with Stow
After moving off of Meta, Dotfiles has a greater responsibility to
manage configs. Vim, Tmux, and Emacs are now within Stow's purview.
Diffstat (limited to 'configs/shared/tmux/.tmux.conf')
-rw-r--r--configs/shared/tmux/.tmux.conf201
1 files changed, 201 insertions, 0 deletions
diff --git a/configs/shared/tmux/.tmux.conf b/configs/shared/tmux/.tmux.conf
new file mode 100644
index 000000000000..f2eff9bc7cf4
--- /dev/null
+++ b/configs/shared/tmux/.tmux.conf
@@ -0,0 +1,201 @@
+################################################################################
+# Dev Loop
+################################################################################
+
+# Re-source tmux. Useful while working in this file
+bind-key R source-file ~/.tmux.conf \; \
+                   display-message "source-file done"
+
+
+################################################################################
+# Tmux Plugins
+################################################################################
+
+set -g @plugin 'dalejung/tmux-select-pane-no-wrap'
+
+set -g @plugin 'tmux-plugins/tmux-copycat'
+set -g @copycat_next 'p'
+set -g @copycat_prev 'n'
+set -g @plugin 'arcticicestudio/nord-tmux'
+
+# set -g @plugin 'tmux-plugins/tmux-yank'
+
+################################################################################
+# Context Helpers
+################################################################################
+
+# Convenience defn for creating vim-specific kbd behavior
+is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
+    | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
+
+is_vim_or_emacs="ps -o state= -o comm= -t '#{pane_tty}' \
+    | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?|emacs)(diff)?$'"
+
+
+
+################################################################################
+# Tmux Leader
+################################################################################
+
+# change tmux leader
+unbind C-b
+set -g prefix C-q
+bind C-q send-prefix
+
+
+################################################################################
+# Colors
+################################################################################
+
+# COLORS!
+set -g default-terminal "screen-256color"
+set-option -sa terminal-overrides ",xterm*:Tc"
+
+
+################################################################################
+# Copy Paste
+################################################################################
+
+# Copy-paste integration
+set-option -g default-command "reattach-to-user-namespace -l zsh"
+
+# copy text like it's Vim
+bind -n Escape if-shell "${is_vim_or_emacs}" "send-keys Escape" copy-mode
+
+# Use vim keybindings in copy mode
+setw -g mode-keys vi
+
+# Setup 'v' to begin selection as in Vim
+bind -Tcopy-mode-vi v send -X begin-selection
+bind -Tcopy-mode-vi y send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
+bind -Tcopy-mode-vi Escape send -X cancel
+bind -Tcopy-mode-vi V send -X rectangle-toggle
+
+# Update default binding of `Enter` to also use copy-pipe
+unbind -Tcopy-mode Enter
+bind -Tcopy-mode Enter send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
+
+# Bind ']' to use pbpaste
+bind ] run "reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer"
+
+
+################################################################################
+# Windows
+################################################################################
+
+# Transpose window layouts
+bind-key -n M-r rotate-window -D
+
+# start window indicies at 1
+set -g base-index 1
+
+# window naming nonsense
+set-window-option -g automatic-rename on
+set-window-option -g allow-rename off
+
+# Easier window swaps
+bind -n C-left swap-window -t -1
+bind -n C-right swap-window -t +1
+
+# Easier window moves
+bind -n m-left previous-window
+bind -n m-right next-window
+
+# Option/Meta + number to jump to window
+bind -n m-0 select-window -t 0
+bind -n m-1 select-window -t 1
+bind -n m-2 select-window -t 2
+bind -n m-3 select-window -t 3
+bind -n m-4 select-window -t 4
+bind -n m-5 select-window -t 5
+bind -n m-6 select-window -t 6
+bind -n m-7 select-window -t 7
+bind -n m-8 select-window -t 8
+bind -n m-9 select-window -t 9
+
+# split window shortcuts, maintaing the working directory
+bind-key -n M-\ split-window -h -c '#{pane_current_path}'
+bind-key -n M-- split-window -v -c '#{pane_current_path}'
+
+# new window
+bind-key -n M-c new-window -c "#{pane_current_path}"
+
+# rename window
+bind-key -n M-, command-prompt -p "Rename window: " "rename-window '%%'"
+
+# maintain working directory for default tmux splits/new window
+bind '"' split-window -c "#{pane_current_path}"
+bind % split-window -h -c "#{pane_current_path}"
+bind c new-window -c "#{pane_current_path}"
+
+
+################################################################################
+# Panes
+################################################################################
+
+# Maximize current pane
+bind-key -n M-z resize-pane -Z
+
+# Pane resizing
+bind -n M-H resize-pane -L 5
+bind -n M-J resize-pane -D 5
+bind -n M-K resize-pane -U 5
+bind -n M-L resize-pane -R 5
+
+# Delete pane (without confirmation)
+bind-key -n M-q if-shell "${is_vim_or_emacs}" "send-keys M-q" kill-pane
+
+# Pane movement: Bindings from "christoomey/vim-tmux-navigator"
+bind-key -n M-h if-shell "${is_vim_or_emacs}" "send-keys M-h" "select-pane -L"
+bind-key -n M-j if-shell "${is_vim_or_emacs}" "send-keys M-j" "select-pane -D"
+bind-key -n M-k if-shell "${is_vim_or_emacs}" "send-keys M-k" "select-pane -U"
+bind-key -n M-l if-shell "${is_vim_or_emacs}" "send-keys M-l" "select-pane -R"
+
+
+################################################################################
+# Sessions
+################################################################################
+
+# Toggle last session
+bind -n m-L switch-client -l
+
+# Traverse sessions by index
+bind -n m-p switch-client -p
+bind -n m-n switch-client -n
+
+# Select from current sessions
+bind -n m-s choose-session
+
+
+################################################################################
+# Misc
+################################################################################
+
+# fix for slow ESC issues
+set -s escape-time 0
+
+# Make tmux work like vi
+set-window-option -g mode-keys vi
+
+# Click to select and resize panse.
+# NOTE: you must now hold option to select text with the mouse!
+set -g mouse on
+
+
+################################################################################
+# Tmux Plugin Manager (TPM)
+################################################################################
+
+# ensures tpm is present and plugins are installed
+# recommended here: https://github.com/tmux-plugins/tpm/blob/c5c997bdde5d6a46d4b852e0a8164a30ca1dd0a4/docs/automatic_tpm_installation.md
+if "test ! -d ~/.tmux/plugins/tpm" \
+   "run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && ~/.tmux/plugins/tpm/bin/install_plugins'"
+
+# bootstrap plugins
+run '~/.tmux/plugins/tpm/tpm'
+
+# run install script
+# TPM tells you to do this by hand via prefix + I, which is nonsense.
+# This way starting up tmux installs missing plugins.
+# For some reason this still fails to start all of them, prefix + I within tmux fixes it for now.
+run '~/.tmux/plugins/tpm/scripts/install_plugins.sh'