fix: update tmux
This commit is contained in:
parent
6edcf42c52
commit
c175a36a13
3 changed files with 127 additions and 169 deletions
28
home-manager/modules/tmux/gitmux.yml
Normal file
28
home-manager/modules/tmux/gitmux.yml
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
tmux:
|
||||||
|
symbols:
|
||||||
|
branch: " "
|
||||||
|
hashprefix: ":"
|
||||||
|
ahead: " "
|
||||||
|
behind: " "
|
||||||
|
staged: " "
|
||||||
|
conflict: " "
|
||||||
|
untracked: " "
|
||||||
|
modified: " "
|
||||||
|
stashed: " "
|
||||||
|
clean: " "
|
||||||
|
insertions: " "
|
||||||
|
deletions: " "
|
||||||
|
styles:
|
||||||
|
state: "#[fg=red,nobold]"
|
||||||
|
branch: "#[fg=white,nobold]"
|
||||||
|
staged: "#[fg=green,nobold]"
|
||||||
|
conflict: "#[fg=red,nobold]"
|
||||||
|
modified: "#[fg=yellow,nobold]"
|
||||||
|
untracked: "#[fg=gray,nobold]"
|
||||||
|
stashed: "#[fg=gray,nobold]"
|
||||||
|
clean: "#[fg=green,nobold]"
|
||||||
|
divergence: "#[fg=cyan,nobold]"
|
||||||
|
layout: [branch, divergence, flags, stats, " "]
|
||||||
|
options:
|
||||||
|
branch_max_len: 0
|
||||||
|
hide_clean: true
|
||||||
|
|
@ -1,77 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
not_in_tmux() {
|
|
||||||
[ -z "$TMUX" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
DIR="$1"
|
|
||||||
|
|
||||||
# If no arguments are passed in, try to immediately attach or start without further input
|
|
||||||
echo "$DIR"
|
|
||||||
if [ -z "$DIR" ]; then
|
|
||||||
if not_in_tmux; then
|
|
||||||
tmux attach && exit 1 || DIR="--start"
|
|
||||||
else
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If --start was passed in, immediately start a new session based on the current directory
|
|
||||||
if [ "$DIR" = "--start" ]; then
|
|
||||||
echo "Starting"
|
|
||||||
path_name="$(basename "$PWD" | tr . -)"
|
|
||||||
session_name="${path_name//./_}"
|
|
||||||
else
|
|
||||||
# Ask the user which directory to start in
|
|
||||||
_session_name=$(cd "$DIR" && find -L . -maxdepth 1 -type d -printf "%f\n" | sed "s|/||g" | fzf --reverse --header="Select project from $(basename "$DIR") ")
|
|
||||||
session_name="${_session_name//./_}"
|
|
||||||
path_name="$DIR/$_session_name"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Session name is \"$session_name\""
|
|
||||||
echo "Path name is \"$path_name\""
|
|
||||||
|
|
||||||
if [ -z "$session_name" ]; then
|
|
||||||
# Operation cancelled by user
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
session_exists() {
|
|
||||||
# Check if the $session_name exists
|
|
||||||
tmux has-session -t "=$session_name"
|
|
||||||
}
|
|
||||||
|
|
||||||
create_detached_session() {
|
|
||||||
if [ "$DIR" = "--start" ]; then
|
|
||||||
(TMUX=''
|
|
||||||
tmux new-session -Ad -s "$session_name" -c "$path_name"
|
|
||||||
)
|
|
||||||
else
|
|
||||||
(TMUX=''
|
|
||||||
tmux new-session -Ad -s "$session_name" -c "$path_name"
|
|
||||||
# tmux split-window -vb -t "$session_name" -c "$path_name" -p 70
|
|
||||||
tmux send-keys -t "$session_name" "nvim '+Telescope find_files'" Enter
|
|
||||||
)
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
create_if_needed_and_attach() {
|
|
||||||
if not_in_tmux; then
|
|
||||||
tmux new-session -As "$session_name" -c "$path_name"
|
|
||||||
else
|
|
||||||
if ! session_exists; then
|
|
||||||
create_detached_session
|
|
||||||
fi
|
|
||||||
tmux switch-client -t "$session_name"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
attach_to_first_session() {
|
|
||||||
first_session_name=$(tmux list-sessions -F "#{session_name}" | head -n 1)
|
|
||||||
if [ -n "$first_session_name" ]; then
|
|
||||||
tmux attach -t "$first_session_name"
|
|
||||||
tmux choose-tree -Za
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
create_if_needed_and_attach || attach_to_first_session
|
|
||||||
|
|
@ -18,122 +18,132 @@
|
||||||
];
|
];
|
||||||
|
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
bind -n M-r source-file ~/.config/tmux/tmux.conf
|
bind -n M-r source-file ~/.config/tmux/tmux.conf
|
||||||
|
|
||||||
set -ag terminal-overrides ",xterm-256color:RGB"
|
set -ag terminal-overrides ",xterm-256color:RGB"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
set -g detach-on-destroy off # don't exit from tmux when closing a session
|
set -g detach-on-destroy off # don't exit from tmux when closing a session
|
||||||
|
|
||||||
# New Theme
|
# New Theme
|
||||||
set -g status-interval 3 # update the status bar every 3 seconds
|
set -g status-interval 3 # update the status bar every 3 seconds
|
||||||
set -g status-left "#[fg=blue,bold,bg=#${config.lib.stylix.colors.base00}]#S "
|
#set -g status-left "#[fg=blue,bold,bg=#${config.lib.stylix.colors.base00}] #S "
|
||||||
set -g status-right "#[fg=#${config.lib.stylix.colors.base07},bold,bg=#${config.lib.stylix.colors.base00}]%a %Y-%m-%d %l:%M %p"
|
set -ga status-left " #[fg=blue,nobold]#(gitmux -cfg $HOME/.config/tmux/gitmux.yml)"
|
||||||
set -ga status-right "#($HOME/.config/tmux/scripts/cal.sh)"
|
set -g status-right ""
|
||||||
set -g status-justify left
|
|
||||||
set -g status-left-length 200 # increase length (from 10)
|
set -g status-justify left
|
||||||
set -g status-right-length 200 # increase length (from 10)
|
set -g status-left-length 200 # increase length (from 10)
|
||||||
set -g status-position top # macOS / darwin style
|
set -g status-right-length 200 # increase length (from 10)
|
||||||
set -g status-style 'bg=#${config.lib.stylix.colors.base00}' # transparent
|
set -g status-position top # macOS / darwin style
|
||||||
set -g window-status-current-format '#[fg=magenta,bg=#${config.lib.stylix.colors.base00}]#I #W#{?window_zoomed_flag,(),} '
|
set -g status-style 'bg=#${config.lib.stylix.colors.base00}' # transparent
|
||||||
set -g window-status-format '#[fg=gray,bg=#${config.lib.stylix.colors.base00}] #I #W'
|
set -g window-status-current-format '#[fg=magenta,bg=#${config.lib.stylix.colors.base00}]#I👉#W#{?window_zoomed_flag,(),} '
|
||||||
set -g window-status-last-style 'fg=white,bg=black'
|
set -g window-status-format '#[fg=gray,bg=#${config.lib.stylix.colors.base00}] #I #W'
|
||||||
set -g message-command-style bg=default,fg=yellow
|
set -g window-status-last-style 'fg=white,bg=black'
|
||||||
set -g message-style bg=default,fg=yellow
|
set -g message-command-style bg=default,fg=yellow
|
||||||
set -g mode-style bg=default,fg=yellow
|
set -g message-style bg=default,fg=yellow
|
||||||
set -g pane-active-border-style 'fg=magenta,bg=default'
|
set -g mode-style bg=default,fg=yellow
|
||||||
set -g pane-border-style 'fg=brightblack,bg=default'
|
set -g pane-active-border-style 'fg=magenta,bg=default'
|
||||||
set -g @tmux-last-prompt-pattern ' '
|
set -g pane-border-style 'fg=brightblack,bg=default'
|
||||||
|
set -g @tmux-last-prompt-pattern ' '
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
set -g mouse on
|
set -g mouse on
|
||||||
|
|
||||||
set-option -g status-position top
|
set-option -g status-position top
|
||||||
|
|
||||||
bind-key g display-popup -h 95% -w 95% -E 'lazygit'
|
bind-key x kill-pane
|
||||||
bind-key t display-popup -h 95% -w 95% -E "${pkgs.htop}/bin/htop"
|
|
||||||
|
|
||||||
bind C-g display-popup -E "tat ~/Projects"
|
#bind-key g display-popup -h 95% -w 95% -E 'lazygit'
|
||||||
|
bind -N "⌘+g lazygit " g new-window -c "#{pane_current_path}" -n "🌳" "lazygit 2> /dev/null"
|
||||||
|
bind -N "⌘+G gh-dash " G new-window -c "#{pane_current_path}" -n "😺" "gh-dash 2> /dev/null"
|
||||||
|
bind-key t display-popup -h 95% -w 95% -E "${pkgs.htop}/bin/htop"
|
||||||
|
bind-key e send-keys "tmux capture-pane -p -S - | nvim -c 'set buftype=nofile' +" Enter
|
||||||
|
|
||||||
bind -n M-g display-popup -E "tmux new-session -A -s scratch"
|
bind -n M-g display-popup -E "tmux new-session -A -s scratch"
|
||||||
|
|
||||||
bind -n M-b switch-client -l
|
bind -n M-b switch-client -l
|
||||||
bind -n M-p previous-window # for ansi
|
bind -n M-p previous-window # for ansi
|
||||||
bind -n M-n next-window # for ansi
|
bind -n M-n next-window # for ansi
|
||||||
bind -n M-P switch-client -p
|
bind -n M-P switch-client -p
|
||||||
bind -n M-N switch-client -n
|
bind -n M-N switch-client -n
|
||||||
|
|
||||||
unbind f
|
unbind f
|
||||||
bind f resize-pane -Z
|
bind f resize-pane -Z
|
||||||
|
|
||||||
# create session
|
# create session
|
||||||
bind C-c new-session
|
bind C-c new-session
|
||||||
|
|
||||||
# split current window horizontally
|
# split current window horizontally
|
||||||
bind - split-window -v
|
bind - split-window -v
|
||||||
# split current window vertically
|
# split current window vertically
|
||||||
bind _ split-window -h
|
bind _ split-window -h
|
||||||
|
|
||||||
# Select Layouts
|
# Select Layouts
|
||||||
#―――――――――――――――――
|
#―――――――――――――――――
|
||||||
bind -n M-a select-layout main-vertical
|
bind -n M-a select-layout main-vertical
|
||||||
bind -n M-A select-layout main-horizontal
|
bind -n M-A select-layout main-horizontal
|
||||||
bind -n M-E select-layout even-vertical
|
bind -n M-E select-layout even-vertical
|
||||||
bind -n M-V select-layout even-horizontal
|
bind -n M-V select-layout even-horizontal
|
||||||
|
|
||||||
# pane navigation
|
# pane navigation
|
||||||
bind -r h select-pane -L # move left
|
bind -r h select-pane -L # move left
|
||||||
bind -r j select-pane -D # move down
|
bind -r j select-pane -D # move down
|
||||||
bind -r k select-pane -U # move up
|
bind -r k select-pane -U # move up
|
||||||
bind -r l select-pane -R # move right
|
bind -r l select-pane -R # move right
|
||||||
bind > swap-pane -D # swap current pane with the next one
|
bind > swap-pane -D # swap current pane with the next one
|
||||||
bind < swap-pane -U # swap current pane with the previous one
|
bind < swap-pane -U # swap current pane with the previous one
|
||||||
|
|
||||||
# pane resizing
|
# pane resizing
|
||||||
bind -r H resize-pane -L 2
|
bind -r H resize-pane -L 2
|
||||||
bind -r J resize-pane -D 2
|
bind -r J resize-pane -D 2
|
||||||
bind -r K resize-pane -U 2
|
bind -r K resize-pane -U 2
|
||||||
bind -r L resize-pane -R 2
|
bind -r L resize-pane -R 2
|
||||||
bind -r c-f resize-pane -Z
|
bind -r c-f resize-pane -Z
|
||||||
|
|
||||||
# window navigation
|
# window navigation
|
||||||
# unbind n
|
# unbind n
|
||||||
# unbind p
|
# unbind p
|
||||||
|
|
||||||
setw -g mode-keys vi
|
setw -g mode-keys vi
|
||||||
|
|
||||||
bind Enter copy-mode # enter copy mode
|
bind Enter copy-mode # enter copy mode
|
||||||
|
|
||||||
bind -T copy-mode-vi v send -X begin-selection
|
bind -T copy-mode-vi v send -X begin-selection
|
||||||
bind -T copy-mode-vi C-v send -X rectangle-toggle
|
bind -T copy-mode-vi C-v send -X rectangle-toggle
|
||||||
bind -T copy-mode-vi y send -X copy-selection-and-cancel
|
bind -T copy-mode-vi y send -X copy-selection-and-cancel
|
||||||
bind -T copy-mode-vi Escape send -X cancel
|
bind -T copy-mode-vi Escape send -X cancel
|
||||||
bind -T copy-mode-vi H send -X start-of-line
|
bind -T copy-mode-vi H send -X start-of-line
|
||||||
bind -T copy-mode-vi L send -X end-of-line
|
bind -T copy-mode-vi L send -X end-of-line
|
||||||
|
|
||||||
# -- buffers -------------------------------------------------------------------
|
# -- buffers -------------------------------------------------------------------
|
||||||
|
|
||||||
bind b list-buffers # list paste buffers
|
bind b list-buffers # list paste buffers
|
||||||
#bind p paste-buffer -p # paste from the top paste buffer
|
#bind p paste-buffer -p # paste from the top paste buffer
|
||||||
bind P choose-buffer # choose which buffer to paste from
|
bind P choose-buffer # choose which buffer to paste from
|
||||||
|
|
||||||
# -- display -------------------------------------------------------------------
|
# -- display -------------------------------------------------------------------
|
||||||
|
|
||||||
set -g renumber-windows on # renumber windows when a window is closed
|
set -g renumber-windows on # renumber windows when a window is closed
|
||||||
|
|
||||||
bind k display-popup -E "\
|
bind k display-popup -E "\
|
||||||
tmux list-sessions -F '#{?session_attached,,#{session_name}}' |\
|
tmux list-sessions -F '#{?session_attached,,#{session_name}}' |\
|
||||||
fzf --reverse -m --header=kill-session |\
|
fzf --reverse -m --header=kill-session |\
|
||||||
xargs -I {} tmux kill-session -t {}"
|
xargs -I {} tmux kill-session -t {}"
|
||||||
|
|
||||||
bind C-j display-popup -E "\
|
|
||||||
tmux list-sessions -F '#{?session_attached,,#{session_name}}' |\
|
|
||||||
sed '/^$/d' |\
|
|
||||||
fzf --reverse --header jump-to-session --preview 'tmux capture-pane -pt {}' |\
|
|
||||||
xargs tmux switch-client -t"
|
|
||||||
|
|
||||||
|
bind-key "T" run-shell "sesh connect $(
|
||||||
|
sesh list -tz | fzf-tmux -p 55%,60% \
|
||||||
|
--no-sort --border-label ' sesh ' --prompt '⚡ ' \
|
||||||
|
--header ' ^a all ^t tmux ^x zoxide ^f find' \
|
||||||
|
--bind 'tab:down,btab:up' \
|
||||||
|
--bind 'ctrl-a:change-prompt(⚡ )+reload(sesh list)' \
|
||||||
|
--bind 'ctrl-t:change-prompt(🪟 )+reload(sesh list -t)' \
|
||||||
|
--bind 'ctrl-x:change-prompt(📁 )+reload(sesh list -z)' \
|
||||||
|
--bind 'ctrl-f:change-prompt(🔎 )+reload(fd -H -d 2 -t d -E .Trash . ~)'
|
||||||
|
--bind 'ctrl-d:execute(tmux kill-session -t {})+change-prompt(⚡ )+reload(sesh list)'
|
||||||
|
)"
|
||||||
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
@ -143,15 +153,12 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
home.packages = [
|
home.packages = [
|
||||||
# Open tmux for current project.
|
|
||||||
(pkgs.writeShellApplication {
|
|
||||||
name = "tat";
|
|
||||||
runtimeInputs = [pkgs.tmux pkgs.fzf];
|
|
||||||
text = builtins.readFile ./ta.sh;
|
|
||||||
})
|
|
||||||
pkgs.fzf
|
pkgs.fzf
|
||||||
|
pkgs.gitmux
|
||||||
];
|
];
|
||||||
|
|
||||||
|
home.file.".config/tmux/gitmux.yml".source = ./gitmux.yml;
|
||||||
|
|
||||||
programs.zsh = {
|
programs.zsh = {
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
tx = "tmux new -s default";
|
tx = "tmux new -s default";
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue