From b75701f53c7ba33dc4bcee29546071c47f8abf31 Mon Sep 17 00:00:00 2001 From: Jason Hilder Date: Sat, 25 Apr 2026 07:57:10 +0200 Subject: [PATCH] Fish shell to open in tmux and create new sessions --- config/fish/config.fish | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/config/fish/config.fish b/config/fish/config.fish index a41d222..3c66ee7 100644 --- a/config/fish/config.fish +++ b/config/fish/config.fish @@ -91,6 +91,8 @@ alias myip='curl ipinfo.io/ip; echo ""' alias lspmake='bear -- make -B' alias services-up='docker compose -f /home/jason/Documents/Compose/local-services/docker-compose.yaml up -d' alias services-down='docker compose -f /home/jason/Documents/Compose/local-services/docker-compose.yaml down' +alias tc='tmux attach' +alias td='tmux detach' # ============================================================================== # FUNCTIONS @@ -189,3 +191,31 @@ set -g __fish_git_prompt_char_stagedstate '●' set -g __fish_git_prompt_char_untrackedfiles '' direnv hook fish | source + +# Auto-attach to tmux on interactive shell start +if status is-interactive && not set -q TMUX + # Get all session names matching shell, shell-2, shell-3 etc + set sessions (tmux list-sessions -F '#S' 2>/dev/null) + + if test (count $sessions) -eq 0 + tmux new-session -s shell + else + # Check if any shell session is unattached and attach it + set target (tmux list-sessions -F '#{session_name} #{session_attached}' 2>/dev/null \ + | grep '^shell' | grep ' 0$' | head -1 | awk '{print $1}') + + if test -n "$target" + tmux attach -t $target + else + # All shell sessions attached — find next number + set nums 1 + for s in $sessions + if string match -rq '^shell-(\d+)$' $s + set nums $nums (string replace 'shell-' '' $s) + end + end + set next (math (string join \n $nums | sort -n | tail -1) + 1) + tmux new-session -s shell-$next + end + end +end