From 4d24228c30e986c69564ff91d6ea45aa445795fb Mon Sep 17 00:00:00 2001
From: Oliver Davies <oliver@oliverdavies.dev>
Date: Sat, 15 Jun 2024 15:33:57 +0100
Subject: [PATCH] Update `t` script

---
 lib/shared/home-manager-packages.nix | 58 +++++++++++++++++++---------
 1 file changed, 40 insertions(+), 18 deletions(-)

diff --git a/lib/shared/home-manager-packages.nix b/lib/shared/home-manager-packages.nix
index 93f17200..2d476b35 100644
--- a/lib/shared/home-manager-packages.nix
+++ b/lib/shared/home-manager-packages.nix
@@ -7,14 +7,17 @@ let
 
   script-t = writeShellApplication {
     name = "t";
-    text = ''
-      # Credit to ThePrimeagen.
 
-      set -o nounset
-      set -o pipefail
+    runtimeInputs = with pkgs; [
+      openssl
+      tmux
+    ];
+
+    text = ''
+      # Credit to ThePrimeagen and Jess Archer.
 
       if [[ $# -eq 1 ]]; then
-        selected=$1
+        SELECTED_PATH=$1
       else
         # Get the session name from fuzzy-finding list of directories and generating a
         # tmux-safe version.
@@ -24,28 +27,47 @@ let
           ! -name "*.old"
         )
 
-        selected=$(echo "''${items}" | fzf)
+        SELECTED_PATH=$(echo "''${items}" | fzf)
       fi
 
-      if [[ -z "''${selected}" ]]; then
-        exit 0
+      SESSION_NAME=$(basename "''${SELECTED_PATH}" | sed 's/\./_/g')
+
+      # Attach to an existing session, if one exists.
+      if tmux has-session -t "''${SESSION_NAME}" 2> /dev/null; then
+        tmux attach -t "''${SESSION_NAME}" || tmux switch-client -t "''${SESSION_NAME}"
+        exit
       fi
 
-      session_name=$(basename "''${selected}" | sed 's/\./_/g')
-      session_path="''${selected}"
+      # TODO: support .ignored/.tmux
+      if [[ -x "''${SELECTED_PATH}/.tmux" ]]; then
+        DIGEST="$(openssl sha512 "''${SELECTED_PATH}/.tmux")"
 
-      # Git worktrees.
-      if [[ -e "''${selected}/main" ]]; then
-        session_path="''${selected}/main"
+        # Prompt the first time we see a given .tmux file before running it.
+        if ! grep -q "''${DIGEST}" ~/..tmux.digests 2> /dev/null; then
+          cat "''${SELECTED_PATH}/.tmux"
+
+          read -r -n 1 -p "Trust (and run) this .tmux file? (t = trust, otherwise = skip) "
+
+          if [[ $REPLY =~ ^[Tt]$ ]]; then
+            echo "''${DIGEST}" >> ~/..tmux.digests
+
+            # Create a new session and run the .tmux script.
+            tmux new-session -d -c "''${SELECTED_PATH}" -s "''${SESSION_NAME}"
+            (cd "''${SELECTED_PATH}" && "''${SELECTED_PATH}/.tmux" "''${SESSION_NAME}")
+          fi
+        else
+          # Create a new session and run the .tmux script.
+          tmux new-session -d -c "''${SELECTED_PATH}" -s "''${SESSION_NAME}"
+          (cd "''${SELECTED_PATH}" && "''${SELECTED_PATH}/.tmux" "''${SESSION_NAME}")
+        fi
       fi
 
-      if tmux has-session -t "''${session_name}" 2> /dev/null; then
-        tmux attach -t "''${session_name}"
+      # If there is no session, create one.
+      if ! tmux has-session -t "''${SESSION_NAME}" 2> /dev/null; then
+        tmux new-session -d -c "''${SELECTED_PATH}" -s "''${SESSION_NAME}"
       fi
 
-      tmux new-session -d -s "''${session_name}" -c "''${session_path}"
-
-      tmux switch-client -t "''${session_name}" || tmux attach -t "''${session_name}"
+      tmux switch-client -t "''${SESSION_NAME}" || tmux attach-session -t "''${SESSION_NAME}"
     '';
   };
 in