first commit
This commit is contained in:
commit
d34e5aad31
15
.gitmodules
vendored
Normal file
15
.gitmodules
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
[submodule "plugins/tpm"]
|
||||||
|
path = plugins/tpm
|
||||||
|
url = https://github.com/tmux-plugins/tpm
|
||||||
|
[submodule "plugins/tmux-prefix-highlight"]
|
||||||
|
path = plugins/tmux-prefix-highlight
|
||||||
|
url = https://github.com/tmux-plugins/tmux-prefix-highlight
|
||||||
|
[submodule "plugins/tmux-menus"]
|
||||||
|
path = plugins/tmux-menus
|
||||||
|
url = https://github.com/jaclu/tmux-menus
|
||||||
|
[submodule "plugins/extrakto"]
|
||||||
|
path = plugins/extrakto
|
||||||
|
url = https://github.com/laktak/extrakto
|
||||||
|
[submodule "plugins/tmux-sidebar"]
|
||||||
|
path = plugins/tmux-sidebar
|
||||||
|
url = https://github.com/tmux-plugins/tmux-sidebar
|
141
README.md
Normal file
141
README.md
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
# [tmuxrc][tmuxrc_repo]
|
||||||
|
|
||||||
|
![Tmux](https://img.shields.io/badge/tmux-v3.3-brightgreen)
|
||||||
|
![Fzf](https://img.shields.io/badge/fzf-v0.35-green)
|
||||||
|
|
||||||
|
**tmuxrc** is a collection of [RUNCOM][RUNCOM] & plugins dedicated to the terminal multiplexer [Tmux][TMUX_repo].
|
||||||
|
|
||||||
|
- I use this configuration with my custom [bash environment][bashrc_repo] to always work in Tmux locally and in SSH sessions.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Plugins:
|
||||||
|
- [tpm][tpm]: Plugin Manager
|
||||||
|
- [tmux-prefix-highlight][tmux-prefix-highlight]: highlights when you press tmux prefix key
|
||||||
|
- [tmux-menus][tmux-menus]: Popup menus
|
||||||
|
- [extrakto][extrakto]: quickly select, copy/insert/complete text without a mouse
|
||||||
|
- [tmux-sidebar][tmux-sidebar]: directory tree for the current path
|
||||||
|
- Usage of popups and fzf
|
||||||
|
- Some defaults are now toggle modes, like sync or zoom
|
||||||
|
- Simple true color theme
|
||||||
|
- Compatible withe my environment config: [bashrc][bashrc_repo]
|
||||||
|
- Check more in the conf file ...
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- [Tmux][TMUX_repo] 3.3+:
|
||||||
|
- libevent 2.x (apt or [build][libevent_repo])
|
||||||
|
- ncurses (apt or [build][ncurses_repo])
|
||||||
|
- [Gitmux][gitmux_repo]
|
||||||
|
- [Fzf][fzf_repo] 0.35+ for `fzf-tmux`
|
||||||
|
|
||||||
|
### Recommended
|
||||||
|
|
||||||
|
- bash 5+
|
||||||
|
- bash_completion
|
||||||
|
- My environment config: [bashrc][bashrc_repo]
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### Tmux
|
||||||
|
|
||||||
|
- With APT:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# chech version with apt
|
||||||
|
sudo apt show tmux 2> /dev/null | grep Version:
|
||||||
|
|
||||||
|
# if your apt repositories deliver at least 3.3, you can install it
|
||||||
|
sudo apt install tmux
|
||||||
|
```
|
||||||
|
|
||||||
|
- Or build & install:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p $HOME/Builds && cd $HOME/Builds
|
||||||
|
wget https://github.com/tmux/tmux/releases/download/3.3a/tmux-3.3a.tar.gz
|
||||||
|
tar -zxf tmux-*.tar.gz
|
||||||
|
cd tmux-*/
|
||||||
|
./configure
|
||||||
|
make && make install
|
||||||
|
```
|
||||||
|
|
||||||
|
### Gitmux
|
||||||
|
|
||||||
|
- Copy it manually to /usr/local/bin: https://github.com/arl/gitmux/releases
|
||||||
|
|
||||||
|
- Or you need jq to parse the latest release in cli:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# for linux_amd64
|
||||||
|
sudo apt install jq
|
||||||
|
_RELEASES=$(curl -s https://api.github.com/repos/arl/gitmux/releases/latest)
|
||||||
|
_URL=$(echo "$_RELEASES" | jq -r '.assets[] | select( .name | match("linux_amd64")) | .browser_download_url')
|
||||||
|
wget -c -nv "$_URL" -O - | sudo tar --no-same-owner -xzv -C /usr/local/bin gitmux
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fzf
|
||||||
|
|
||||||
|
- With APT:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# chech version with apt
|
||||||
|
sudo apt show fzf 2> /dev/null | grep Version:
|
||||||
|
|
||||||
|
# if your apt repositories deliver at least 0.35, you can install it
|
||||||
|
sudo apt install tmux
|
||||||
|
```
|
||||||
|
|
||||||
|
- Or build & install:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p $HOME/Builds && cd $HOME/Builds
|
||||||
|
git clone --depth 1 https://github.com/junegunn/fzf.git
|
||||||
|
cd fzf
|
||||||
|
sudo ./install --all --no-bash --no-zsh --no-fish
|
||||||
|
sudo cp shell/completion.bash /etc/bash_completion.d/fzf
|
||||||
|
sudo cp bin/* /usr/local/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
### TmuxRC
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# backup current files
|
||||||
|
mkdir -p $HOME/.backups
|
||||||
|
cp -r --backup=t {"$HOME"/.tmux/,"$HOME"/.tmux,"$HOME"/.config/tmux/} $HOME/.backups/
|
||||||
|
rm -Rf "$HOME"/.tmux/ "$HOME"/.tmux "$HOME"/.config/tmux/
|
||||||
|
|
||||||
|
mkdir -p $HOME/.config
|
||||||
|
cd $HOME/.config
|
||||||
|
git clone --depth=1 --recurse-submodules https://git.tkapias.net/tkapias/tmuxrc
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
### SSH/Remote
|
||||||
|
|
||||||
|
If you install this configuration on a remote system you want another prefix than on the local tmux (ctrl+x).
|
||||||
|
|
||||||
|
You can change the prefix to ctrl+w on the remote like this:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sed -i -e 's/C-x/C-w/g' -e 's/Ctrl-x/Ctrl-w/g' $HOME/.tmux.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
[//]: # (LINKS)
|
||||||
|
[tmuxrc_repo]: https://git.tkapias.net/tkapias/tmuxrc
|
||||||
|
[TMUX_repo]: https://github.com/tmux/tmux
|
||||||
|
[bashrc_repo]: https://git.tkapias.net/tkapias/bashrc
|
||||||
|
[RUNCOM]: https://en.wikipedia.org/wiki/RUNCOM
|
||||||
|
[libevent_repo]: https://github.com/libevent/libevent/releases/latest
|
||||||
|
[ncurses_repo]: https://invisible-mirror.net/archives/ncurses/
|
||||||
|
[gitmux_repo]: https://github.com/arl/gitmux
|
||||||
|
[tpm]: https://github.com/tmux-plugins/tpm
|
||||||
|
[tmux-prefix-highlight]: https://github.com/tmux-plugins/tmux-prefix-highlight
|
||||||
|
[tmux-menus]: https://github.com/jaclu/tmux-menus
|
||||||
|
[extrakto]: https://github.com/laktak/extrakto
|
||||||
|
[tmux-sidebar]: https://github.com/tmux-plugins/tmux-sidebar
|
1
plugins/extrakto
Submodule
1
plugins/extrakto
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit efca89800293cbb8224463d82eeecffdb2f7036a
|
1
plugins/tmux-menus
Submodule
1
plugins/tmux-menus
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit ab82aee4845899d75943dd3ad46296f542ec471f
|
1
plugins/tmux-prefix-highlight
Submodule
1
plugins/tmux-prefix-highlight
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 15acc6172300bc2eb13c81718dc53da6ae69de4f
|
1
plugins/tmux-sidebar
Submodule
1
plugins/tmux-sidebar
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit a41d72c019093fd6a1216b044e111dd300684f1a
|
1
plugins/tpm
Submodule
1
plugins/tpm
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 99469c4a9b1ccf77fade25842dc7bafbc8ce9946
|
0
sidebar/directory_widths.txt
Normal file
0
sidebar/directory_widths.txt
Normal file
192
tmux.conf
Normal file
192
tmux.conf
Normal file
|
@ -0,0 +1,192 @@
|
||||||
|
# git init $HOME/.config/tmux/plugins
|
||||||
|
# cd $HOME/.config/tmux/plugins
|
||||||
|
# git submodule init
|
||||||
|
# git submodule add https://github.com/tmux-plugins/tpm
|
||||||
|
# git submodule add https://github.com/tmux-plugins/tmux-prefix-highlight
|
||||||
|
# git submodule add https://github.com/jaclu/tmux-menus
|
||||||
|
# git submodule add https://github.com/laktak/extrakto
|
||||||
|
# git submodule add https://github.com/tmux-plugins/tmux-sidebar
|
||||||
|
|
||||||
|
# ----- Prefix -----
|
||||||
|
|
||||||
|
# Rebind the prefix to Ctrl+x
|
||||||
|
unbind-key C-b
|
||||||
|
set-option -g prefix C-x
|
||||||
|
bind-key C-x send-prefix
|
||||||
|
|
||||||
|
# ----- Panes -----
|
||||||
|
|
||||||
|
# Splits open in the current working directory
|
||||||
|
bind-key '"' split-window -c "#{pane_current_path}"
|
||||||
|
bind-key '%' split-window -h -c "#{pane_current_path}"
|
||||||
|
|
||||||
|
# Bind "a" to toggle sync mode on all panes with an active border color
|
||||||
|
bind-key a if -F '#{pane_synchronized}' \
|
||||||
|
'set-window-option synchronize-panes off; \
|
||||||
|
set-window-option pane-active-border-style fg=colour02; \
|
||||||
|
set-window-option pane-border-style fg=colour04' \
|
||||||
|
'set-window-option synchronize-panes on; \
|
||||||
|
set-window-option pane-active-border-style fg=colour02; \
|
||||||
|
set-window-option pane-border-style fg=colour02'
|
||||||
|
|
||||||
|
# Bind 2 repeatable keys to switch panes and zoom in. Just zomming in is rebinded to "Z"
|
||||||
|
unbind-key z
|
||||||
|
bind-key Z resize-pane -Z
|
||||||
|
bind-key -r e select-pane -t .+1 \; resize-pane -Z
|
||||||
|
bind-key -r z select-pane -t .-1 \; resize-pane -Z
|
||||||
|
|
||||||
|
# Add a status for each pane with index, title and command
|
||||||
|
set -g pane-border-status bottom
|
||||||
|
set -g pane-border-format '#{pane_index} #{pane_title} > #(sleep 1; ps -t #{pane_tty} --no-headers -o command | tail -1)'
|
||||||
|
|
||||||
|
# Add a shortcup to interactively rename the title of the current pane
|
||||||
|
bind-key P command-prompt -I 'select-pane -T '
|
||||||
|
|
||||||
|
# Seperator colors for current pane
|
||||||
|
set-option -g pane-active-border-style fg=colour02
|
||||||
|
|
||||||
|
# Seperator color for other panes
|
||||||
|
set-option -g pane-border-style fg=colour04
|
||||||
|
|
||||||
|
# ----- Status Bar -----
|
||||||
|
|
||||||
|
# Colors for the status bar
|
||||||
|
set -g status-bg 'colour00'
|
||||||
|
set -g status-fg 'colour08'
|
||||||
|
|
||||||
|
# Contents on the right of the status bar
|
||||||
|
set -g status-right '#(gitmux -timeout 3s -cfg ~/.config/gitmux.conf "#{pane_current_path}") #{prefix_highlight}'
|
||||||
|
set -g status-interval 1
|
||||||
|
set -g status-right-length 45
|
||||||
|
|
||||||
|
# Contents on the left of the status bar
|
||||||
|
set -g status-left '#[fg=colour03,bg=colour08,bold][#S]#[bg=default] '
|
||||||
|
set -g status-left-length 32
|
||||||
|
|
||||||
|
# Position of the status bar
|
||||||
|
# (top/bottom)
|
||||||
|
set -g status-position bottom
|
||||||
|
|
||||||
|
# Position of the window status
|
||||||
|
# (left/centre/right)
|
||||||
|
set -g status-justify left
|
||||||
|
|
||||||
|
# Color of the status bar message
|
||||||
|
set-option -g message-style bg=colour04,fg=colour08
|
||||||
|
|
||||||
|
# ----- Windows -----
|
||||||
|
|
||||||
|
# open a fzf popup session changer
|
||||||
|
bind-key C-j display-popup -E "tmux list-sessions | sed -E 's/:.*$//' | grep -v \"^$(tmux display-message -p '#S')\$\" | fzf --reverse | xargs tmux switch-client -t"
|
||||||
|
|
||||||
|
# open/close a popup scratch session
|
||||||
|
#bind-key C-g display-popup -E "tmux new-session -A -s scratch"
|
||||||
|
bind-key C-g if-shell -F '#{==:#{session_name},scratch}' {
|
||||||
|
detach-client
|
||||||
|
} {
|
||||||
|
display-popup -E "tmux new-session -A -s scratch"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Status format for the current window
|
||||||
|
setw -g window-status-current-format '#[fg=colour06,bg=colour08,bold] #I #W '
|
||||||
|
|
||||||
|
# Status format for other windows
|
||||||
|
setw -g window-status-format '#[fg=colour04,bg=colour08] #I #W '
|
||||||
|
|
||||||
|
# Seperator between each window names
|
||||||
|
set -wg window-status-separator ' '
|
||||||
|
|
||||||
|
# Show alert if other window changes?
|
||||||
|
setw -g monitor-activity off
|
||||||
|
|
||||||
|
# Should automatically rename other windows based on the current program?
|
||||||
|
set -g automatic-rename on
|
||||||
|
|
||||||
|
# ----- More options -----
|
||||||
|
|
||||||
|
# Emacs key bindings in tmux command prompt (prefix + :) are better than
|
||||||
|
# vi keys, even for vim users
|
||||||
|
set -g status-keys emacs
|
||||||
|
|
||||||
|
# Focus events enabled for terminals that support them
|
||||||
|
set -g focus-events on
|
||||||
|
|
||||||
|
# Super useful when using "grouped sessions" and multi-monitor setup
|
||||||
|
setw -g aggressive-resize on
|
||||||
|
|
||||||
|
# Delay for the repeat key (-r) to be available, default is 500
|
||||||
|
set-option -g repeat-time 1000
|
||||||
|
|
||||||
|
# History limit for scrolling back
|
||||||
|
set -g history-limit 10000
|
||||||
|
|
||||||
|
# Increase tmux messages display duration from 750ms to 4s
|
||||||
|
set -g display-time 4000
|
||||||
|
|
||||||
|
# Use mouse to switch windows, adjust panes, etc...
|
||||||
|
set -g mouse off
|
||||||
|
|
||||||
|
# True color support
|
||||||
|
set -g default-terminal tmux-256color
|
||||||
|
set-option -ga terminal-overrides ',*-256colo*:Tc'
|
||||||
|
|
||||||
|
# Delay after escape key is passed into the program
|
||||||
|
set -s escape-time 0
|
||||||
|
|
||||||
|
# Use vi styled keys for scrolling & copying
|
||||||
|
set-window-option -g mode-keys vi
|
||||||
|
|
||||||
|
# set-clipboard for copying with OSC 52
|
||||||
|
set -g allow-passthrough on
|
||||||
|
set -s set-clipboard on
|
||||||
|
set -as terminal-features ',rxvt-unicode-256color:clipboard'
|
||||||
|
|
||||||
|
# modified copy mode with clipboard output
|
||||||
|
bind-key -T prefix v copy-mode
|
||||||
|
bind-key -T copy-mode-vi v send-keys -X begin-selection
|
||||||
|
bind-key -T copy-mode-vi y send-keys -X rectangle-toggle
|
||||||
|
|
||||||
|
# ----- Plugins -----
|
||||||
|
|
||||||
|
# Tmux plugin manager
|
||||||
|
set -g @plugin 'tmux-plugins/tpm'
|
||||||
|
set-environment -g TMUX_PLUGIN_MANAGER_PATH "~/.config/tmux/plugins/"
|
||||||
|
|
||||||
|
# Import plugins
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
|
||||||
|
set -g @plugin 'jaclu/tmux-menus'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-sidebar'
|
||||||
|
set -g @plugin 'laktak/extrakto'
|
||||||
|
|
||||||
|
# tmux-prefix_highlight configs
|
||||||
|
set -g @prefix_highlight_prefix_prompt 'Wait'
|
||||||
|
set -g @prefix_highlight_copy_prompt 'Copy'
|
||||||
|
set -g @prefix_highlight_sync_prompt 'Sync'
|
||||||
|
set -g @prefix_highlight_fg 'colour05'
|
||||||
|
set -g @prefix_highlight_bg 'colour08'
|
||||||
|
set -g @prefix_highlight_show_copy_mode 'on'
|
||||||
|
set -g @prefix_highlight_copy_mode_attr 'fg=colour08,bg=colour03,bold'
|
||||||
|
set -g @prefix_highlight_show_sync_mode 'on'
|
||||||
|
set -g @prefix_highlight_sync_mode_attr 'fg=colour08,bg=colour02,bold'
|
||||||
|
|
||||||
|
# extrakto configs
|
||||||
|
set -g @extrakto_grab_area 'recent'
|
||||||
|
set -g @extrakto_filter_order 'line word all'
|
||||||
|
set -g @extrakto_popup_size '90%,60%'
|
||||||
|
set -g @extrakto_clip_tool_run 'tmux_osc52'
|
||||||
|
set -g @extrakto_copy_key 'ctrl-y'
|
||||||
|
set -g @extrakto_insert_key 'enter'
|
||||||
|
set -g @extrakto_filter_key 'ctrl-f'
|
||||||
|
set -g @extrakto_grab_key 'ctrl-g'
|
||||||
|
set -g @extrakto_edit_key 'ctrl-e'
|
||||||
|
set -g @extrakto_open_key 'ctrl-o'
|
||||||
|
|
||||||
|
# tmux-sidebar configs
|
||||||
|
set -g @sidebar-tree-width '40'
|
||||||
|
set -g @sidebar-tree-command 'exa -abTL 2 --long --color always --icons --sort Name --group-directories-first --no-permissions --no-time --no-user'
|
||||||
|
set -g @sidebar-tree 'C-e'
|
||||||
|
set -g @sidebar-tree-focus 'C-z'
|
||||||
|
|
||||||
|
# Initialize TMUX plugin manager
|
||||||
|
# (keep this line at the very bottom of tmux.conf)
|
||||||
|
run -b '~/.config/tmux/plugins/tpm/tpm'
|
Loading…
Reference in a new issue