Files
dotfiles/scripts/project.sh

74 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
projects=$(find ~/src -maxdepth 1 -type d -not -path ~/src | xargs -I {} basename {})
projects="$projects"$'\n'"dotfiles"
projects="$projects"$'\n'"new"
selected=$(echo "$projects" | rofi -dmenu -p "Select project:")
create_new_project() {
local project_name
project_name=$(rofi -dmenu -p "Enter new project name:")
if [[ -z "$project_name" ]]; then
return
fi
local project_path="$HOME/src/$project_name"
if [[ -d "$project_path" ]]; then
notify-send "Error" "Project $project_name already exists"
return
fi
mkdir -p "$project_path"
cd "$project_path"
notify-send "Success" "Created new project: $project_name"
ghostty --working-directory="$project_path" -e bash -c "
open_project() {
local name=\"\$1\"
local path=\"\$2\"
if tmux has-session -t \"\$name\" 2>/dev/null; then
tmux attach-session -t \"\$name\"
else
tmux new-session -s \"\$name\" -c \"\$path\"
fi
}; open_project '$project_name' '$project_path'"
}
open_existing_project() {
local name="$1"
local path="$2"
if [[ ! -d "$path" ]]; then
notify-send "Error" "Project directory $path does not exist"
return
fi
ghostty --working-directory="$path" -e bash -c "
open_project() {
local name=\"\$1\"
local path=\"\$2\"
if tmux has-session -t \"\$name\" 2>/dev/null; then
tmux attach-session -t \"\$name\"
else
tmux new-session -s \"\$name\" -c \"\$path\"
fi
}; open_project '$name' '$path'"
}
[[ -z "$selected" ]] && exit 0
case "$selected" in
"new")
create_new_project
;;
"dotfiles")
open_existing_project "$selected" "$HOME/dotfiles"
;;
*)
open_existing_project "$selected" "$HOME/src/$selected"
;;
esac