{ 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" ''; }) ]; }; }