tmux/fish
This commit is contained in:
parent
bdaefa4d5c
commit
02bd57490f
2 changed files with 295 additions and 293 deletions
|
|
@ -5,11 +5,10 @@ inputs@{ machine, ... }:
|
||||||
inherit inputs;
|
inherit inputs;
|
||||||
requirements = [ "cli" ];
|
requirements = [ "cli" ];
|
||||||
home-config =
|
home-config =
|
||||||
{
|
{ config
|
||||||
config,
|
, pkgs
|
||||||
pkgs,
|
, lib
|
||||||
lib,
|
, ...
|
||||||
...
|
|
||||||
}:
|
}:
|
||||||
with builtins;
|
with builtins;
|
||||||
with lib.attrsets;
|
with lib.attrsets;
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,12 @@ inputs@{ machine, ... }:
|
||||||
|
|
||||||
shortcut = "k";
|
shortcut = "k";
|
||||||
|
|
||||||
plugins = with pkgs; [
|
plugins =
|
||||||
|
with pkgs;
|
||||||
|
with tmuxPlugins;
|
||||||
|
[
|
||||||
{
|
{
|
||||||
plugin = tmuxPlugins.mkTmuxPlugin {
|
plugin = mkTmuxPlugin {
|
||||||
pluginName = "suspend";
|
pluginName = "suspend";
|
||||||
version = "1a2f806";
|
version = "1a2f806";
|
||||||
src = pkgs.fetchFromGitHub {
|
src = pkgs.fetchFromGitHub {
|
||||||
|
|
@ -31,13 +34,13 @@ inputs@{ machine, ... }:
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
plugin = tmuxPlugins.mode-indicator;
|
plugin = mode-indicator;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
# unbind every single normal keybinding
|
# unbind every single normal keybinding
|
||||||
unbind-key -a
|
unbind -a
|
||||||
|
|
||||||
# for special characters to work right
|
# for special characters to work right
|
||||||
# like <C-_>
|
# like <C-_>
|
||||||
|
|
@ -62,36 +65,36 @@ inputs@{ machine, ... }:
|
||||||
set -s set-clipboard on
|
set -s set-clipboard on
|
||||||
|
|
||||||
# get back normal terminal emulator bindings
|
# get back normal terminal emulator bindings
|
||||||
bind-key -n S-PPage copy-mode -u
|
bind -n S-PPage copy-mode -u
|
||||||
bind-key -T copy-mode -n S-NPage send-keys -X page-down
|
bind -T copy-mode -n S-NPage send-keys -X page-down
|
||||||
|
|
||||||
# don't scroll to end when copying with mouse
|
# don't scroll to end when copying with mouse
|
||||||
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe
|
bind -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe
|
||||||
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe
|
bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe
|
||||||
bind-key -T copy-mode DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
bind -T copy-mode DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
||||||
bind-key -T copy-mode TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
bind -T copy-mode TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
||||||
bind-key -T copy-mode-vi DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
bind -T copy-mode-vi DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
||||||
bind-key -T copy-mode-vi TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
bind -T copy-mode-vi TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
||||||
|
|
||||||
# window control
|
# window control
|
||||||
bind t new-window -c "#{pane_current_path}"
|
bind t new-window -c "#{pane_current_path}"
|
||||||
bind-key Tab next-window
|
bind Tab next-window
|
||||||
bind-key BTab previous-window
|
bind BTab previous-window
|
||||||
set -g automatic-rename-format "#{?#{==:#{pane_current_path},$HOME},~,#{b:pane_current_path}} (#{pane_current_command})"
|
set -g automatic-rename-format "#{?#{==:#{pane_current_path},$HOME},~,#{b:pane_current_path}} (#{pane_current_command})"
|
||||||
set -g renumber-windows on
|
set -g renumber-windows on
|
||||||
bind-key Q confirm-before -p "kill-window #W? (y/n)" kill-window
|
bind Q confirm-before -p "kill-window #W? (y/n)" kill-window
|
||||||
bind A last-window
|
bind A last-window
|
||||||
|
|
||||||
bind-key 1 select-window -t :0
|
bind 1 select-window -t :0
|
||||||
bind-key 2 select-window -t :1
|
bind 2 select-window -t :1
|
||||||
bind-key 3 select-window -t :2
|
bind 3 select-window -t :2
|
||||||
bind-key 4 select-window -t :3
|
bind 4 select-window -t :3
|
||||||
bind-key 5 select-window -t :4
|
bind 5 select-window -t :4
|
||||||
bind-key 6 select-window -t :5
|
bind 6 select-window -t :5
|
||||||
bind-key 7 select-window -t :6
|
bind 7 select-window -t :6
|
||||||
bind-key 8 select-window -t :7
|
bind 8 select-window -t :7
|
||||||
bind-key 9 select-window -t :8
|
bind 9 select-window -t :8
|
||||||
bind-key 0 select-window -t :9
|
bind 0 select-window -t :9
|
||||||
|
|
||||||
# pane control
|
# pane control
|
||||||
bind h select-pane -L
|
bind h select-pane -L
|
||||||
|
|
@ -110,40 +113,41 @@ inputs@{ machine, ... }:
|
||||||
bind S-Down split-window -v -c "#{pane_current_path}"
|
bind S-Down split-window -v -c "#{pane_current_path}"
|
||||||
bind S-Up split-window -h -b -c "#{pane_current_path}"
|
bind S-Up split-window -h -b -c "#{pane_current_path}"
|
||||||
bind S-Right split-window -v -b -c "#{pane_current_path}"
|
bind S-Right split-window -v -b -c "#{pane_current_path}"
|
||||||
bind-key -r -T prefix M-h resize-pane -L 5
|
bind -r -T prefix M-h resize-pane -L 5
|
||||||
bind-key -r -T prefix M-j resize-pane -D 5
|
bind -r -T prefix M-j resize-pane -D 5
|
||||||
bind-key -r -T prefix M-k resize-pane -U 5
|
bind -r -T prefix M-k resize-pane -U 5
|
||||||
bind-key -r -T prefix M-l resize-pane -R 5
|
bind -r -T prefix M-l resize-pane -R 5
|
||||||
bind x swap-pane -D
|
bind x swap-pane -D
|
||||||
|
bind z resize-pane -Z
|
||||||
|
|
||||||
# double-click ^k (or lshift with kanata) for previous pane like ^w in vim
|
# double-click ^k (or lshift with kanata) for previous pane like ^w in vim
|
||||||
bind -r ^k select-pane -l
|
bind -r ^k select-pane -l
|
||||||
bind-key q confirm-before -p "kill-pane #P? (y/n)" kill-pane
|
bind q confirm-before -p "kill-pane #P? (y/n)" kill-pane
|
||||||
|
|
||||||
# bind-key o choose-tree -wZ
|
# bind o choose-tree -wZ
|
||||||
# bind-key O choose-tree -sZ
|
# bind O choose-tree -sZ
|
||||||
|
|
||||||
# get back command mode and some other basics...
|
# get back command mode and some other basics...
|
||||||
bind : command-prompt
|
bind : command-prompt
|
||||||
bind r source-file ~/.config/tmux/tmux.conf \; display "config reloaded"
|
bind r source-file ~/.config/tmux/tmux.conf \; display "config reloaded"
|
||||||
bind-key ? list-keys
|
bind ? list-keys
|
||||||
|
|
||||||
# Scroll oin man etc
|
# Scroll oin man etc
|
||||||
tmux_commands_with_legacy_scroll="nano less more man git"
|
tmux_commands_with_legacy_scroll="nano less more man git"
|
||||||
|
|
||||||
bind-key -T root WheelUpPane \
|
bind -T root WheelUpPane \
|
||||||
if-shell -Ft= '#{?mouse_any_flag,1,#{pane_in_mode}}' \
|
if-shell -Ft= '#{?mouse_any_flag,1,#{pane_in_mode}}' \
|
||||||
'send -Mt=' \
|
'send -Mt=' \
|
||||||
'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \
|
'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \
|
||||||
"send -t= Up" "copy-mode -et="'
|
"send -t= Up" "copy-mode -et="'
|
||||||
|
|
||||||
bind-key -T root WheelDownPane \
|
bind -T root WheelDownPane \
|
||||||
if-shell -Ft = '#{?pane_in_mode,1,#{mouse_any_flag}}' \
|
if-shell -Ft = '#{?pane_in_mode,1,#{mouse_any_flag}}' \
|
||||||
'send -Mt=' \
|
'send -Mt=' \
|
||||||
'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \
|
'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \
|
||||||
"send -t= Down" "send -Mt="'
|
"send -t= Down" "send -Mt="'
|
||||||
|
|
||||||
bind-key -T copy-mode-vi ] \
|
bind -T copy-mode-vi ] \
|
||||||
send-keys -X clear-selection \; \
|
send-keys -X clear-selection \; \
|
||||||
send-keys -X search-forward "--> " \; \
|
send-keys -X search-forward "--> " \; \
|
||||||
send-keys -X next-word \; \
|
send-keys -X next-word \; \
|
||||||
|
|
@ -151,7 +155,7 @@ inputs@{ machine, ... }:
|
||||||
send-keys -X jump-forward ":" \; \
|
send-keys -X jump-forward ":" \; \
|
||||||
send-keys -X jump-to-forward ":" \;
|
send-keys -X jump-to-forward ":" \;
|
||||||
|
|
||||||
bind-key -T copy-mode-vi [ \
|
bind -T copy-mode-vi [ \
|
||||||
send-keys -X clear-selection \; \
|
send-keys -X clear-selection \; \
|
||||||
send-keys -X start-of-line \; \
|
send-keys -X start-of-line \; \
|
||||||
send-keys -X search-backward "--> " \; \
|
send-keys -X search-backward "--> " \; \
|
||||||
|
|
@ -160,8 +164,8 @@ inputs@{ machine, ... }:
|
||||||
send-keys -X jump-forward ":" \; \
|
send-keys -X jump-forward ":" \; \
|
||||||
send-keys -X jump-to-forward ":" \;
|
send-keys -X jump-to-forward ":" \;
|
||||||
|
|
||||||
bind-key [ copy-mode \; send-keys [
|
bind [ copy-mode \; send-keys [
|
||||||
bind-key ] copy-mode \; send-keys ]
|
bind ] copy-mode \; send-keys ]
|
||||||
|
|
||||||
# f: file search
|
# f: file search
|
||||||
# unbound: git files
|
# unbound: git files
|
||||||
|
|
@ -171,32 +175,31 @@ inputs@{ machine, ... }:
|
||||||
# M-i: ips
|
# M-i: ips
|
||||||
# include line and column numbers in file search
|
# include line and column numbers in file search
|
||||||
# rebind `f` so we can reuse it here
|
# rebind `f` so we can reuse it here
|
||||||
bind-key -T prefix C-f command-prompt { find-window -Z "%%" }
|
bind -T prefix C-f command-prompt { find-window -Z "%%" }
|
||||||
# jyn is so sorry, and so am I now
|
# jyn is so sorry, and so am I now
|
||||||
# https://github.com/jyn514/dotfiles/blob/65be3c004113290f41f858f4d7f1a6799fabab19/config/tmux.conf#L203-L212
|
# https://github.com/jyn514/dotfiles/blob/65be3c004113290f41f858f4d7f1a6799fabab19/config/tmux.conf#L203-L212
|
||||||
# see `search-regex.sh` for wtf this means
|
# see `search-regex.sh` for wtf this means
|
||||||
# TODO: include shell variable names
|
# TODO: include shell variable names
|
||||||
bind-key f copy-mode \; send-keys -X search-backward '(^|/|\<|[[:space:]"])((\.|\.\.)|[[:alnum:]~_"-]*)((/[][[:alnum:]_.#$%&+=@"-]+)+([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)|(/[][[:alnum:]_.#$%&+=@"-]+){2,}([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)?|(\.|\.\.)/([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?))'
|
bind f copy-mode \; send-keys -X search-backward '(^|/|\<|[[:space:]"])((\.|\.\.)|[[:alnum:]~_"-]*)((/[][[:alnum:]_.#$%&+=@"-]+)+([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)|(/[][[:alnum:]_.#$%&+=@"-]+){2,}([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)?|(\.|\.\.)/([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?))'
|
||||||
# urls
|
# urls
|
||||||
bind-key u copy-mode \; send-keys -X search-backward '(https?://|git@|git://|ssh://|ftp://|file:///)[[:alnum:]?=%/_.:,;~@!#$&*+-]*'
|
bind u copy-mode \; send-keys -X search-backward '(https?://|git@|git://|ssh://|ftp://|file:///)[[:alnum:]?=%/_.:,;~@!#$&*+-]*'
|
||||||
# hashes
|
# hashes
|
||||||
bind-key g copy-mode \; send-keys -X search-backward '[[:<:]]([0-9a-f]{7,40}|[[:alnum:]]{52}|[0-9a-f]{64})[[:>:]]'
|
bind g copy-mode \; send-keys -X search-backward '[[:<:]]([0-9a-f]{7,40}|[[:alnum:]]{52}|[0-9a-f]{64})[[:>:]]'
|
||||||
# ips
|
# ips
|
||||||
bind-key M-i copy-mode \; send-keys -X search-backward '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}'
|
bind M-i copy-mode \; send-keys -X search-backward '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}'
|
||||||
|
|
||||||
bind-key -T copy-mode-vi o send-keys -X copy-pipe \
|
bind -T copy-mode-vi o send-keys -X copy-pipe \
|
||||||
'cd #{pane_current_path}; xargs -I {} echo "echo {}" | bash | xargs ${../nvim/editor-hax.py} xdg-open-proxy' \; \
|
'cd #{pane_current_path}; xargs -I {} echo "echo {}" | bash | xargs ${../nvim/editor-hax.py} xdg-open-proxy' \; \
|
||||||
if -F "#{alternate_on}" { send-keys -X cancel }
|
if -F "#{alternate_on}" { send-keys -X cancel }
|
||||||
# save the buffer, then open an editor in the current pane
|
# save the buffer, then open an editor in the current pane
|
||||||
bind-key -T copy-mode-vi O send-keys -X copy-pipe-and-cancel \
|
bind -T copy-mode-vi O send-keys -X copy-pipe-and-cancel \
|
||||||
'tmux send-keys "C-q"; xargs -I {} tmux send-keys "vim {}"; tmux send-keys "C-m"'
|
'tmux send-keys "C-q"; xargs -I {} tmux send-keys "vim {}"; tmux send-keys "C-m"'
|
||||||
# search for the highlighted text
|
# search for the highlighted text
|
||||||
bind-key -T copy-mode-vi s send-keys -X copy-pipe \
|
bind -T copy-mode-vi s send-keys -X copy-pipe \
|
||||||
"cd #{pane_current_path}; xargs -I {} open 'https://www.google.com/search?q={}'" \; \
|
"cd #{pane_current_path}; xargs -I {} open 'https://www.google.com/search?q={}'" \; \
|
||||||
if -F "#{alternate_on}" { send-keys -X cancel }
|
if -F "#{alternate_on}" { send-keys -X cancel }
|
||||||
# save buffer and retype into the shell
|
# save buffer and retype into the shell
|
||||||
bind-key -T copy-mode-vi Tab send-keys -X copy-selection-and-cancel \; paste-buffer -p
|
bind -T copy-mode-vi Tab send-keys -X copy-selection-and-cancel \; paste-buffer -p
|
||||||
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue