#!/bin/bash help() { cat < /dev/null if [ $? == 0 ]; then echo "Info: project already exists" exit 0 fi # Check if dir exists if [ ! -d $NEW_PROJECT_DIR ]; then echo "Error: directory $NEW_PROJECT_DIR does not exists" exit 1 fi sed -i "$ a $NEW_PROJECT_DIR" "$PROJECTS_FILE" if [ $? == 0 ]; then echo "Info: added successfully" exit 0 else echo "Error: couldn't add $NEW_PROJECT_DIR" exit 1 fi } remove_project() { PROJECT=$(cat $PROJECTS_FILE | fzf) if [ -z "$PROJECT" ]; then exit 0 fi read -p "Remove project $(basename $PROJECT)? [Ny]: " SHOULD_REMOVE SHOULD_REMOVE=${SHOULD_REMOVE:-n} if [[ $SHOULD_REMOVE =~ [yY] ]]; then sed -i "\#$PROJECT#d" $PROJECTS_FILE if [ $? == 0 ]; then echo "Info: removed $PROJECT" exit 0 else echo "Error: couldn't remove $PROJECT" exit 1 fi fi exit 0 } open_project() { PROJECT=$(cat $PROJECTS_FILE | fzf) if [ -z "$PROJECT" ]; then exit 0 fi if [ -d "$PROJECT" ]; then tmux -L $(basename "$PROJECT") attach if [ $? == 0 ]; then exit 0 else OLDIR=$(pwd) cd "$PROJECT" tmux -L $(basename "$PROJECT") cd "$OLDIR" exit 0 fi else read -p "Error: directory for $(basename $PROJECT) not found. Remove project? [Ny]: " REMOVE_MISSING REMOVE_MISSING=${REMOVE_MISSING:-n} if [[ $REMOVE_MISSING =~ [yY] ]]; then sed -i "\#$PROJECT#d" $PROJECTS_FILE echo "Info: Removed $PROJECT" fi exit 1 fi } PROJECTS_FILE="$HOME/.projects" OPEN="true" NEW_PROJECT_DIR="" # Parse args while getopts "hra" opt; do case $opt in a) OPEN="false" if [ ! -z $OPTARG ]; then NEW_PROJECT_DIR=$OPTARG else NEW_PROJECT_DIR=$(pwd) fi add_project ;; r) OPEN="false"; remove ;; h) OPEN="false"; help; exit 0 ;; \?) echo "" >&2; help; exit 1 ;; esac done if [ ! -f "$PROJECTS_FILE" ]; then touch "$PROJECTS_FILE" echo "Info: Created projects file" fi if [ ! -s "$PROJECTS_FILE" ]; then echo "Error: No project found. Add at least 1 project using -a first" help exit 1 fi if [ $OPEN == "true" ]; then open_project exit 0 fi