diff --git a/.env b/.env index 32ec141..5bcd3fd 100644 --- a/.env +++ b/.env @@ -19,3 +19,4 @@ WITH_LAZYGIT_CONFIG=yes WITH_ROFI_CONFIG=yes WITH_ALACRITTY_CONFIG=yes +WITH_TMUX_CONFIG=yes diff --git a/configs/tmux/tmux.conf b/configs/tmux/tmux.conf new file mode 100644 index 0000000..19a5b30 --- /dev/null +++ b/configs/tmux/tmux.conf @@ -0,0 +1,181 @@ +# set prefix to control-f +set -g prefix C-f + +#unbind system defined prefix +unbind C-b + +# helps in faster key repetition +set -g escape-time 0 + +# start session number from 1 rather than 0 +set -g base-index 1 + +# start pane number from 1 similar to windows +set -g pane-base-index 1 + +# Make the current window the first window +bind T swap-window -t 1 + +# source .tmux.conf file +bind r source-file ~/.tmux.conf \; display "Configuration Reloaded!" + +# dont mess up with other ctrl-a options by pressing ctrl-a twice +bind C-a send-prefix + +# vertical split +bind | split-window -h -c "#{pane_current_path}" + +# horizontal split +bind - split-window -v -c "#{pane_current_path}" + +#new window +bind c new-window -c "#{pane_current_path}" +# pane movement similar to vim +bind h select-pane -L +bind j select-pane -D +bind k select-pane -U +bind l select-pane -R + +# resize panes +bind -r H resize-pane -L 5 +bind -r J resize-pane -D 5 +bind -r K resize-pane -U 5 +bind -r L resize-pane -R 5 + +# to cycle through windows +bind -r C-h select-window -t :- +bind -r C-l select-window -t :+ +bind b previous-window + +# enable mouse +set -g mouse on + +# allow mouse to select windows and panes +#set -g mouse-select-pane on +#set -g mouse-resize-pane on +#set -g mouse-select-window on + +# Toggle mouse on +bind m \ + set -g mode-mouse on \;\ + set -g mouse-resize-pane on \;\ + set -g mouse-select-pane on \;\ + set -g mouse-select-window on \;\ + display 'Mouse: ON' + +# Toggle mouse off +bind M \ + set -g mode-mouse off \;\ + set -g mouse-resize-pane off \;\ + set -g mouse-select-pane off \;\ + set -g mouse-select-window off \;\ + display 'Mouse: OFF' +#Note: hold shift key to select the text using mouse + +# set 256 color +set -g default-terminal "screen-256color" + +# monitor activities in other windows +setw -g monitor-activity on +set -g visual-activity on + +# enable vi mode +setw -g mode-keys vi + +# remap copy paste keys +unbind [ +bind y copy-mode +unbind p +bind p paste-buffer +bind-key -T copy-mode-vi v send-keys -X begin-selection +bind-key -T copy-mode-vi y send-keys -X copy-selection +bind-key -T copy-mode-vi r send-keys -X rectangle-toggl + +# copy to system clipboard +bind C-c run "tmux save-buffer - | xclip -i -sel clipboard" + +# paste from system clipboard +bind C-v run "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer" + +# maximizing and restoring panes +unbind Up +bind Up new-window -d -n tmp \; swap-pane -s tmp.1 \; select-window -t tmp +unbind Down +bind Down last-window \; swap-pane -s tmp.1 \; kill-window -t tmp + + +# switch between sessions +bind -r ( switch-client -p +bind -r ) switch-client -n + +# set zsh as default shell +set -g default-command /bin/bash +set -g default-shell /bin/bash + +# recording program output to a log +bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log" + + +# don't allow tmux to rename the window based on commands running +set-window-option -g allow-rename off + +# cool screen saver +set -g lock-after-time 3000 +set -g lock-command "cmatrix -s" + + +# restore vim session even after shutdown +set -g @resurrect-strategy-vim "session" +# vim-tmux-focus +set -g focus-events on +set -g @continuum-save-interval '1' +# include status line powerline theme +# BEGIN FILE +# This tmux statusbar config was created by tmuxline.vim +# on Tue, 19 May 2020 + +set -g status-justify "centre" +set -g status "on" +set -g status-left-style "none" +set -g message-command-style "fg=colour255,bg=colour238" +set -g status-right-style "none" +set -g pane-active-border-style "fg=colour190" +set -g status-style "none,bg=colour234" +set -g message-style "fg=colour255,bg=colour238" +set -g pane-border-style "fg=colour238" +set -g status-right-length "100" +set -g status-left-length "100" +setw -g window-status-activity-style "none,fg=colour190,bg=colour234" +setw -g window-status-separator "" +setw -g window-status-style "none,fg=colour85,bg=colour234" +set -g status-left "#[fg=colour232,bg=colour154] #S #[fg=colour154,bg=colour238,nobold,nounderscore,noitalics]#[fg=colour222,bg=colour238] #W #[fg=colour238,bg=colour235,nobold,nounderscore,noitalics]#[fg=colour121,bg=colour235] #(whoami)  up: #(uptime | cut -f 4-7 -d ' ' | cut -f 1-2 -d ",") #[fg=colour235,bg=colour235,nobold,nounderscore,noitalics]" +set -g status-right "#[fg=colour235,bg=colour235,nobold,nounderscore,noitalics]#[fg=colour121,bg=colour235] %r  %a  %Y #[fg=colour238,bg=colour235,nobold,nounderscore,noitalics]#[fg=colour222,bg=colour238] #{battery_icon}#{battery_percentage}#[fg=colour154,bg=colour238,nobold,nounderscore,noitalics]#[fg=colour232,bg=colour154] #(rainbarf --battery --remaining --no-rgb)" +setw -g window-status-format "#[fg=colour234,bg=colour234,nobold,nounderscore,noitalics]#[default] #I  #W #[fg=colour234,bg=colour234,nobold,nounderscore,noitalics]" +setw -g window-status-current-format "#[fg=colour234,bg=colour238,nobold,nounderscore,noitalics]#[fg=colour255,bg=colour238] #I  #W  #F #[fg=colour238,bg=colour234,nobold,nounderscore,noitalics]" +# END FILE +#set-option -g @batt_charged_icon "" +set-option -g @batt_charging_icon "⚡" +set-option -g @batt_discharging_icon "" +set -g @online_icon "✔" +set -g @offline_icon "✗" +set-option -g status on +set-option -g status-interval 2 +set-option -g status-justify "centre" +set-option -g status-left-length 60 +set-option -g status-right-length 90 + +# Tmux plugins +set -g @tpm_plugins " \ + tmux-plugins/tpm \ + tmux-plugins/tmux-sensible \ + tmux-plugins/tmux-resurrect \ + tmux-plugins/tmux-battery \ + tmux-plugins/tmux-online-status \ + tmux-plugins/tmux-yank \ + tmux-plugins/tmux-copycat \ + tmux-plugins/tmux-continuum \ +" + +# initializes TMUX plugin manager +run-shell ~/.tmux/plugins/tpm/tpm + diff --git a/install.sh b/install.sh index 102d85d..323665b 100755 --- a/install.sh +++ b/install.sh @@ -28,6 +28,7 @@ find ./scripts -type f -iname "*.sh" -exec chmod +x {} \; ./scripts/tools/neovim/install.sh ./scripts/tools/rofi/install.sh ./scripts/tools/alacritty/install.sh +./scripts/tools/tmux/install.sh ./scripts/window_manager/awesome/install.sh ./scripts/window_manager/i3/install.sh -./scripts/tools/fonts/install.sh \ No newline at end of file +./scripts/tools/fonts/install.sh diff --git a/scripts/tools/tmux/install.sh b/scripts/tools/tmux/install.sh new file mode 100755 index 0000000..610808f --- /dev/null +++ b/scripts/tools/tmux/install.sh @@ -0,0 +1,17 @@ + +source ./scripts/common.sh + +if [[ "$WITH_TMUX_CONFIG" == 'yes' || "$WITH_TMUX_CONFIG" == 'force' ]]; then + if [[ -d "$HOME/.tmux.conf" && "$WITH_TMUX_CONFIG" == 'force' ]]; then + rm -rf "$HOME/.tmux.conf" + echo '[INFO] Tmux config removed | Forced by environment variable' + fi + if [[ ! -d "$HOME/.tmux.conf" ]]; then + ln -s "$CWD/configs/tmux/tmux.conf" "$HOME/.tmux.conf" + echo "[INFO] Tmux config linked with symbolic link : $CWD/configs/tmux/tmux.conf -> $HOME/.tmux.conf" + git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm + echo '[INFO] Tmux plugin manager cloned' + else + echo '[INFO] Tmux config already linked' + fi +fi