#+TITLE: Tmux Configuration #+PROPERTY: header-args :tangle ~/.tmux.conf #+PROPERTY: header-args+ :comments both :mkdirp yes * Line ** Define colors #+BEGIN_SRC conf t_red="#ef5253" # red t_red_light="#eb9798" # light red t_red_dark="#c22627" # dark red t_blue="#579cde" # blue t_orange="#de9a57" t_green="#57de9a" t_grey_dark="#393939" # dark grey t_grey_light="#d9d9d9" # light grey t_grey="#ababab" # grey t_1l_bg="#ef5253" # red t_1l_fg="#393939" # dark grey t_2l_bg="#4e4e4e" # dark grey t_2l_fg="#e8e8e8" # grey t_3l_bg="#ababab" # grey t_3l_fg="#393939" # dark grey t_4l_bg="#579cde" # blue t_4l_fg="#393939" # dark grey t_1r_bg="#909090" t_1r_fg="#393939" t_2r_bg="#4e4e4e" t_2r_fg="#a0a0a0" t_3r_bg="#ababab" # grey t_3r_fg="#393939" # dark grey t_line_bg="#18262f" # dark blue t_line_fg="#393939" # dark grey t_win_bg="#18262f" # dark blue t_win_fg="#d9d9d9" # light grey t_win_bg_active="#ef5253" # red t_win_fg_active="#393939" # dark grey t_text_fg="#d9d9d9" # light grey t_text_bg="#393939" # dark grey #+END_SRC ** General config #+BEGIN_SRC conf set -g status "on" # Activate the status bar set -g status-attr "none" set -g status-interval "2" # update status every x seconds set -g status-justify "centre" # center the list of windows set -g status-bg "$t_line_bg" set -g status-fg "$t_line_fg" #+END_SRC ** Contents of right and light status #+BEGIN_SRC conf t_1_l="#S" t_2_l="%H:%M" # t_3_l="#($HOME/.config/.tmux/bin/tmux_left_status)" t_4_l="C" t_1_r="%d/%m" # t_2_r="#($HOME/.config/.tmux/bin/tmux_right_status)" # t_3_r="" #+END_SRC ** Status left and right #+BEGIN_SRC conf set -g status-left "#[fg=$t_1l_fg,bg=$t_1l_bg] $t_1_l #[fg=$t_1l_bg,bg=$t_2l_bg]#[fg=$t_2l_fg,bg=$t_2l_bg] $t_2_l #{?client_prefix,#[fg=$t_2l_bg]#[bg=$t_4l_bg]#[fg=$t_4l_fg]#[bg=$t_4l_bg] $t_4_l #[fg=$t_4l_bg]#[bg=$t_line_bg],#[fg=$t_2l_bg]#[bg=$t_line_bg]}" # set -g status-left "#[fg=$t_1l_fg,bg=$t_1l_bg] $t_1_l #[fg=$t_1l_bg,bg=$t_2l_bg]#[fg=$t_2l_fg,bg=$t_2l_bg] $t_2_l #[fg=$t_2l_bg,bg=$t_3l_bg]#[fg=$t_2l_bg, bg=$t_3l_bg]$t_3_l#{?client_prefix,#[fg=$t_3l_bg]#[bg=$t_4l_bg]#[fg=$t_4l_fg]#[bg=$t_4l_bg] $t_4_l #[fg=$t_4l_bg]#[bg=$t_line_bg],#[fg=$t_3l_bg]#[bg=$t_line_bg]}" set -g status-left-length "90" set -g status-left-attr "none" set -g status-right "#[fg=$t_1r_bg]#[fg=$t_1r_fg,bg=$t_1r_bg] $t_1_r " # set -g status-right "#[fg=$t_3r_bg,bg=$t_line_bg]#[fg=$t_3r_fg, bg=$t_3r_bg] $t_3_r #[fg=$t_2r_bg,bg=$t_3r_bg]#[fg=$t_2r_fg,bg=$t_2r_bg] $t_2_r #[fg=$t_1r_bg,bg=$t_2r_bg]#[fg=$t_1r_fg,bg=$t_1r_bg] $t_1_r " set -g status-right-length "90" set -g status-right-attr "none" #+END_SRC ** Message and commands #+BEGIN_SRC conf set -g message-fg "$t_text_fg" set -g message-bg "$t_text_bg" set -g message-command-fg "$t_text_fg" set -g message-command-bg "$t_text_bg" #+END_SRC ** Panes #+BEGIN_SRC conf set -g pane-border-fg "$t_grey_dark" # Color of the separation between panes set -g pane-active-border-fg "$t_red_light" # Color of the active separation #+END_SRC ** Windows #+BEGIN_SRC conf setw -g window-status-fg "$t_red" setw -g window-status-bg "$t_grey_light" setw -g window-status-attr "none" setw -g window-status-activity-fg "$t_grey_dark" setw -g window-status-activity-bg "$t_red" setw -g window-status-activity-attr "bold" setw -g window-status-separator " " setw -g window-status-format "#[fg=$t_win_fg,bg=$t_win_bg] #I | #W " setw -g window-status-current-format "#[fg=$t_win_bg_active,bg=$t_line_bg]#[fg=$t_win_fg_active,bg=$t_win_bg_active] #I | #W #[fg=$t_win_bg_active,bg=$t_line_bg]" #+END_SRC * Bindings #+BEGIN_SRC conf # Set prefix to 'C-Space' unbind C-b set -g prefix C-Space # Reload the config using 'C-Space + r' bind r source-file ~/.tmux.conf \; display-message "Config reloaded..." # Simulate 'C-l' to clear the terminal bind C-l send-keys C-l \; clear-history # Open new panes with the path of the current pane. unbind c bind c new-window -c '#{pane_current_path}' # Vim-like key bindings for pane navigation (default uses cursor keys). unbind h bind h select-pane -L unbind j bind j select-pane -D unbind k bind k select-pane -U unbind l # normally used for last-window bind l select-pane -R # Move Panes unbind L bind L swap-pane -D unbind H bind H swap-pane -U # Resizing (mouse also works). unbind Left bind -r Left resize-pane -L 5 unbind Right bind -r Right resize-pane -R 5 unbind Down bind -r Down resize-pane -D 5 unbind Up bind -r Up resize-pane -U 5 # Fast toggle (normally prefix-l). bind ^space last-window # Intuitive window-splitting keys. bind / split-window -h -c '#{pane_current_path}' # normally prefix-% bind - split-window -v -c '#{pane_current_path}' # normally prefix-" # Swap windows bind-key -r "<" swap-window -t -1 bind-key -r ">" swap-window -t +1 # Smart pane switching with awareness of Vim splits # See: https://github.com/christoomey/vim-tmux-navigator is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'" bind-key -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L" bind-key -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D" bind-key -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U" bind-key -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R" bind-key -n C-\ if-shell "$is_vim" "send-keys C-\\" "select-pane -l" # Set 'C-Space + v' to enter copy-mode unbind [ bind-key v copy-mode # Set 'C-Space + C-v' to paste unbind ] bind-key C-v paste-buffer # Setup 'v' to begin selection as in Vim and 'y' to yank bind-key -T copy-mode-vi 'v' send -X begin-selection bind-key -T copy-mode-vi 'y' send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy" bind-key -T copy-mode-vi 'Escape' send -X cancel bind-key -T copy-mode-vi 'C-v' send-keys -X rectangle-toggle #+END_SRC * Settings #+BEGIN_SRC conf # Activity monitoring set -g visual-activity off # Automatically renumber window numbers on closing a pane (tmux >= 1.7). set -g renumber-windows on # Mouse can be used to select panes, select windows (by clicking on the status bar), resize panes set -g mouse on set -g default-terminal "screen-256color" set -ga terminal-overrides ',xterm-256color:Tc' set -g history-limit 262144 # Start window and pane numbering at 1, (0 is too hard to reach) set -g base-index 1 set -g pane-base-index 1 # Don't wait for an escape sequence after seeing C-a set -s escape-time 0 # Dynamically update iTerm tab and window titles set -g set-titles on # Needed as on tmux 1.9 and up (defaults to off) set -g focus-events on # But don't change tmux's own window titles set-option -g allow-rename off # Don't wrap searches; it's super confusing given tmux's reverse-ordering of position info in copy mode set -w -g wrap-search off # Restore pre-2.1 behavior of scrolling with the scrollwheel in Vim, less, copy mode etc, otherwise entering copy mode if not already in it. bind-key -T root WheelUpPane \ if-shell -Ft= '#{?pane_in_mode,1,#{mouse_any_flag}}' \ 'send -Mt=' \ 'if-shell -Ft= "#{alternate_on}" "send -t= Up" "copy-mode -et="' bind-key -T root WheelDownPane \ if-shell -Ft = '#{?pane_in_mode,1,#{mouse_any_flag}}' \ 'send -Mt=' \ 'if-shell -Ft= "#{alternate_on}" "send -t= Down" "send -Mt="' # Stay in copy mode on drag end, but otherwise exit for mouse up. # Requires patch from https://github.com/tmux/tmux/issues/326 # unbind-key -t vi-copy MouseDragEnd1Pane # bind-key -t vi-copy MouseUp1Pane cancel bind-key -n MouseDrag1Status swap-window -t= # bind-key -n MouseDown3Status new-window -a -t= bind-key -n MouseDrag1Status swap-window -t= # bind-key -n MouseDown3Status new-window -a -t= # #T = standard window title (last command, see ~/.bash_profile) # #h = short hostname # #S = session name # #W = tmux window name set -g set-titles-string "#T : #h > #S > #W" # Show bells in window titles set -g window-status-bell-style fg=yellow,bold,underscore #+END_SRC * Plugins ** Install plugins #+BEGIN_SRC conf set -g @plugin 'tmux-plugins/tpm' # set -g @plugin 'tmux-plugins/tmux-sessionist' # set -g @plugin 'tmux-plugins/tmux-resurrect' # set -g @plugin 'tmux-plugins/tmux-continuum' # set -g @plugin 'tmux-plugins/tmux-battery' set -g @plugin 'nhdaly/tmux-better-mouse-mode' set -g @plugin 'seebi/tmux-colors-solarized' #+END_SRC ** Configuration #+BEGIN_SRC conf # ============================================================= # tmux-resurrect # ============================================================= # for vim set -g @resurrect-strategy-vim 'session' # for neovim set -g @resurrect-strategy-nvim 'session' # Restoring pane contents set -g @resurrect-capture-pane-contents 'on' run-shell ~/.tmux/plugins/tmux-resurrect/resurrect.tmux # ============================================================= # ============================================================= # tmux-continuum # ============================================================= set -g @continuum-boot 'on' set -g @continuum-boot-options 'iterm,fullscreen' set -g @continuum-save-interval '15' run-shell ~/.tmux/plugins/tmux-continuum/continuum.tmux # ============================================================= # ============================================================= # tmux-battery # ============================================================= set -g @batt_charged_icon "=" set -g @batt_charging_icon "+" set -g @batt_discharging_icon "-" set -g @batt_attached_icon "o" # ============================================================= #+END_SRC * Colors #+BEGIN_SRC conf set -g @colors-solarized 'light' #+END_SRC * Initialize TMUX plugin manager #+BEGIN_SRC conf run '~/.tmux/plugins/tpm/tpm' #+END_SRC