This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

tools.tmux: add session manager with fzf popup

+33
+33
tools/tmux/flake-module.nix
··· 3 3 perSystem = 4 4 { pkgs, ... }: 5 5 let 6 + sessionManager = pkgs.writeShellScript "tmux-session-manager" '' 7 + while true; do 8 + existing=$(tmux list-sessions -F '#{session_name}: #{session_windows} windows (created #{session_created_string})#{?session_attached, (attached),}' 2>/dev/null) 9 + [[ -z "$existing" ]] && break 10 + chosen=$(echo -e ">>> new session <<<\n$existing" \ 11 + | ${pkgs.fzf}/bin/fzf --height=80% --reverse \ 12 + --header="Pick a tmux session (DEL to kill)" \ 13 + --expect=delete \ 14 + --preview='s={1}; s=''${s%:}; [ "$s" = ">>>" ] && echo "Create a new session" || tmux capture-pane -t "$s" -p -e 2>/dev/null' \ 15 + --preview-window=down:50%) 16 + key=$(echo "$chosen" | head -1) 17 + selection=$(echo "$chosen" | tail -1) 18 + chosen_name=$(echo "$selection" | cut -d: -f1) 19 + if [[ "$key" == "delete" && -n "$chosen_name" && "$chosen_name" != ">>> new session <<<" ]]; then 20 + tmux kill-session -t "$chosen_name" 2>/dev/null 21 + continue 22 + fi 23 + if [[ -n "$chosen_name" && "$chosen_name" != ">>> new session <<<" ]]; then 24 + tmux switch-client -t "$chosen_name" 25 + exit 0 26 + fi 27 + break 28 + done 29 + # Create a new session 30 + session_name=$(${ 31 + self.packages.${pkgs.system}.name-generator 32 + }/bin/name-generator 2>/dev/null || echo "session-$$") 33 + tmux new-session -d -s "$session_name" 34 + tmux switch-client -t "$session_name" 35 + ''; 6 36 tmuxConfigText = '' 7 37 set-option -g default-terminal screen-256color 8 38 ··· 13 43 set -g allow-passthrough on 14 44 set -ga update-environment TERM 15 45 set -ga update-environment TERM_PROGRAM 46 + 47 + # Session manager popup (prefix + s) 48 + bind s display-popup -E -w 80% -h 80% "${sessionManager}" 16 49 ''; 17 50 tmuxConfigFile = pkgs.writeText "tmux.conf" tmuxConfigText; 18 51 in