From c1c21956929a8d4865742863ec1c1a2eb6a4ca02 Mon Sep 17 00:00:00 2001 From: Tristan Date: Wed, 30 Jul 2025 19:04:17 +0100 Subject: [PATCH] framework: tmux-sessionizer --- home/default.nix | 2 +- home/programs/{tmux.nix => tmux/default.nix} | 10 +++++++ home/programs/tmux/sessionizer.sh | 29 ++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) rename home/programs/{tmux.nix => tmux/default.nix} (76%) create mode 100644 home/programs/tmux/sessionizer.sh diff --git a/home/default.nix b/home/default.nix index 42e6273..46d886d 100644 --- a/home/default.nix +++ b/home/default.nix @@ -10,7 +10,7 @@ ./programs/git.nix ./programs/lf/. ./programs/zsh.nix - ./programs/tmux.nix + ./programs/tmux/. ]; programs.home-manager.enable = true; diff --git a/home/programs/tmux.nix b/home/programs/tmux/default.nix similarity index 76% rename from home/programs/tmux.nix rename to home/programs/tmux/default.nix index 4d645ca..d964aae 100644 --- a/home/programs/tmux.nix +++ b/home/programs/tmux/default.nix @@ -1,4 +1,10 @@ { + pkgs, + lib, + ... +}: let + sessionizer = lib.getExe (pkgs.writeShellScriptBin "tmux-sessionizer" (lib.readFile ./sessionizer.sh)); +in { programs.tmux = { enable = true; baseIndex = 1; @@ -25,8 +31,12 @@ bind -n M-u copy-mode bind -n M-p previous-window bind -n M-n next-window + bind-key -r f run-shell "tmux neww ${sessionizer}" set-option -g renumber-windows on ''; }; + programs.zsh.initContent = '' + bindkey -s ^f "${sessionizer}\n" + ''; } diff --git a/home/programs/tmux/sessionizer.sh b/home/programs/tmux/sessionizer.sh new file mode 100644 index 0000000..33ac5fc --- /dev/null +++ b/home/programs/tmux/sessionizer.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +if [[ $# -eq 1 ]]; then + selected=$1 +else + selected=$(find ~/Documents/code ~/Documents/infra -mindepth 1 -maxdepth 1 -type d | fzf) +fi + +if [[ -z $selected ]]; then + exit 0 +fi + +selected_name=$(basename "$selected" | tr . _) +tmux_running=$(pgrep tmux) + +if [[ -z $TMUX ]] && [[ -z $tmux_running ]]; then + tmux new-session -s $selected_name -c $selected + exit 0 +fi + +if ! tmux has-session -t=$selected_name 2> /dev/null; then + tmux new-session -ds $selected_name -c $selected +fi + +if [[ -z $TMUX ]]; then + tmux attach -t $selected_name +else + tmux switch-client -t $selected_name +fi