From a4b5039da255b135d99caf977b3161ce7f1e7278 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Wed, 3 Sep 2025 01:16:44 +0100 Subject: [PATCH] Re-add `t` script --- modules/scripts/t.nix | 77 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 modules/scripts/t.nix diff --git a/modules/scripts/t.nix b/modules/scripts/t.nix new file mode 100644 index 00000000..6ca8aa7b --- /dev/null +++ b/modules/scripts/t.nix @@ -0,0 +1,77 @@ +{ + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication { + name = "t"; + + runtimeInputs = with pkgs; [ fzf ]; + + text = '' + set -euo pipefail + + # Based on https://github.com/jessarcher/dotfiles/blob/master/scripts/t + # and https://github.com/ThePrimeagen/tmux-sessionizer. + + has_session() { + tmux list-sessions | grep -q "^$1:" + } + + hydrate() { + if [ -f "$2/.tmux-sessionizer" ]; then + tmux send-keys -t "$1" "source $2/.tmux-sessionizer" c-M + elif [ -f "$HOME/.tmux-sessionizer" ]; then + tmux send-keys -t "$1" "source $HOME/.tmux-sessionizer" c-M + fi + } + + is_tmux_running() { + tmux_running=$(pgrep tmux) + + if [[ -z ''${TMUX:-} ]] && [[ -z $tmux_running ]]; then + return 1 + fi + + return 0 + } + + switch_to() { + tmux attach-session -t "$1" || tmux switch-client -t "$1" + } + + if [[ $# -eq 1 ]]; then + selected=$1 + else + items=$( + find "$HOME/Code" -maxdepth 3 -mindepth 1 -type d + find "$HOME/Documents" -maxdepth 1 -mindepth 1 -type d + find "$HOME/tmp" -maxdepth 1 -type d + ) + + selected=$(echo "$items" | sed "s|^$HOME/||" | sort | fzf) + [[ $selected ]] && selected="$HOME/$selected" + fi + + if [[ -z $selected ]]; then + exit 0 + fi + + selected_name=$(basename "$selected" | tr . _) + + if ! is_tmux_running; then + tmux new-session -ds "$selected_name" -c "$selected" + hydrate "$selected_name" "$selected" + fi + + if ! has_session "$selected_name"; then + tmux new-session -ds "$selected_name" -c "$selected" + hydrate "$selected_name" "$selected" + fi + + switch_to "$selected_name" + ''; + }) + ]; + }; +}