From ba7cc101882bf76efc4a63f26c3f13d62d4d6c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Fri, 30 Jun 2023 20:50:25 +0200 Subject: [PATCH] feat(tmux): add tmux attach + fzf script --- modules/programs/tmux.nix | 54 +++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/modules/programs/tmux.nix b/modules/programs/tmux.nix index 912f7ad..369aec5 100644 --- a/modules/programs/tmux.nix +++ b/modules/programs/tmux.nix @@ -4,13 +4,13 @@ with lib; let cfg = config.my.programs.tmux; - tmux-sessionizer = pkgs.writeShellApplication { - name = "ts"; - runtimeInputs = with pkgs; [ tmux findutils coreutils procps fd ]; + fzf1 = pkgs.writeShellApplication { + name = "fzf1"; + runtimeInputs = with pkgs; [ coreutils fzf ]; text = '' #!/usr/bin/env bash - options=$(fd -HIg '.git' ~/ --min-depth 1 --max-depth 5 --type d --prune --exec dirname {} | fzf --filter "''$*") + options=$(fzf --filter "''$*" < /dev/stdin) if [[ -z $options ]]; then exit 1 @@ -24,17 +24,48 @@ let exit 0 fi + echo "$selected" + ''; + }; + + tmux-switch = pkgs.writeShellApplication { + name = "tmux-switch"; + runtimeInputs = with pkgs; [ tmux ]; + text = '' + #!/usr/bin/env bash + if [[ -z ''${TMUX+x} ]]; then + tmux attach -t "$1" + else + tmux switch-client -t "$1" + fi + ''; + }; + + tmux-sessionizer = pkgs.writeShellApplication { + name = "ts"; + runtimeInputs = with pkgs; [ tmux findutils coreutils procps fd fzf ]; + text = '' + #!/usr/bin/env bash + + selected=$(fd -HIg '.git' ~/ --min-depth 1 --max-depth 5 --type d --prune --exec dirname {} | ${getExe fzf1} "$*") + selected_name=$(basename "$selected" | tr . _) if ! tmux has-session -t="$selected_name" 2> /dev/null; then tmux new-session -ds "$selected_name" -c "$selected" fi - if [[ -z ''${TMUX+x} ]]; then - tmux attach -t "$selected_name" - else - tmux switch-client -t "$selected_name" - fi + ${getExe tmux-switch} "$selected_name" + ''; + }; + + tmux-attach = pkgs.writeShellApplication { + name = "ta"; + runtimeInputs = with pkgs; [ tmux ]; + text = '' + #!/usr/bin/env bash + selected=$(tmux list-sessions -F '#{session_name}' | ${getExe fzf1} "$*") + ${getExe tmux-switch} "$selected" ''; }; @@ -64,7 +95,10 @@ in config = mkIf cfg.enable { my.shell.abbreviations.t = "tmux"; - home-manager.users.moritz.home.packages = [ tmux-sessionizer ]; + home-manager.users.moritz.home.packages = [ + tmux-sessionizer + tmux-attach + ]; home-manager.users.moritz.programs = { tmux = { enable = true;