From a36dd7baf4197d51ef74f59c507b451885175ba5 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Mon, 17 Jun 2024 17:59:35 +0100 Subject: [PATCH] Move `t` into its own file --- lib/shared/home-manager-packages.nix | 68 ++-------------------------- lib/shared/scripts/t.nix | 67 +++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 65 deletions(-) create mode 100644 lib/shared/scripts/t.nix diff --git a/lib/shared/home-manager-packages.nix b/lib/shared/home-manager-packages.nix index 2d476b3..454ebce 100644 --- a/lib/shared/home-manager-packages.nix +++ b/lib/shared/home-manager-packages.nix @@ -5,75 +5,13 @@ let inherit (pkgs) writeShellApplication; - script-t = writeShellApplication { - name = "t"; - - runtimeInputs = with pkgs; [ - openssl - tmux - ]; - - text = '' - # Credit to ThePrimeagen and Jess Archer. - - if [[ $# -eq 1 ]]; then - SELECTED_PATH=$1 - else - # Get the session name from fuzzy-finding list of directories and generating a - # tmux-safe version. - items=$(find ~/Code/* ~/Code ~ ~/Documents /tmp \ - -maxdepth 1 -mindepth 1 -type d \ - ! -name "*-old" \ - ! -name "*.old" - ) - - SELECTED_PATH=$(echo "''${items}" | fzf) - fi - - 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 - - # TODO: support .ignored/.tmux - if [[ -x "''${SELECTED_PATH}/.tmux" ]]; then - DIGEST="$(openssl sha512 "''${SELECTED_PATH}/.tmux")" - - # 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 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 switch-client -t "''${SESSION_NAME}" || tmux attach-session -t "''${SESSION_NAME}" - ''; + scripts = { + t = writeShellApplication (import ./scripts/t.nix { inherit pkgs; }); }; in with pkgs; [ - script-t + scripts.t inputs.build-configs.packages.${pkgs.system}.default diff --git a/lib/shared/scripts/t.nix b/lib/shared/scripts/t.nix new file mode 100644 index 0000000..7a65aae --- /dev/null +++ b/lib/shared/scripts/t.nix @@ -0,0 +1,67 @@ +{ pkgs }: + +{ + name = "t"; + + runtimeInputs = with pkgs; [ + openssl + tmux + ]; + + text = '' + # Credit to ThePrimeagen and Jess Archer. + + if [[ $# -eq 1 ]]; then + SELECTED_PATH=$1 + else + # Get the session name from fuzzy-finding list of directories and generating a + # tmux-safe version. + items=$(find ~/Code/* ~/Code ~ ~/Documents /tmp \ + -maxdepth 1 -mindepth 1 -type d \ + ! -name "*-old" \ + ! -name "*.old" + ) + + SELECTED_PATH=$(echo "''${items}" | fzf) + fi + + 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 + + # TODO: support .ignored/.tmux + if [[ -x "''${SELECTED_PATH}/.tmux" ]]; then + DIGEST="$(openssl sha512 "''${SELECTED_PATH}/.tmux")" + + # 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 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 switch-client -t "''${SESSION_NAME}" || tmux attach-session -t "''${SESSION_NAME}" + ''; +}