You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 lines
2.8 KiB

#!/usr/bin/env bash
# This script sets things based on my current project and will set the symlink ~/Projects/current to the correct folder
# GLOBAL VARIABLES
export PROJECTS_PATH="$HOME/Projects"
export SYMLINC="$PROJECTS_PATH/current"
function print_subcommand_details(){
"$1" --parent-help
}
# Prints help text
function print_help(){
echo "Manages projects"
echo ""
echo -e "Usage: $0 <command> [<args>]"
echo ""
echo -e "Commands"
echo -e "--------"
echo $PATH | tr ':' '\n' | while read line; do
find "$line" -maxdepth 1 -type f -executable -name project-\* -exec basename {} \; 2> /dev/null
done | sort | uniq | while read line; do
print_subcommand_details "$line"
done | column -t -s" "
#echo -e "copy <target> <files> [..<files>]\t\tCopies files to a target in the project"
#echo -e "\t--bin\t\tCopy to bin directory (inside \$PATH)"
#echo -e "\t--www\t\tCopy to the www directory"
exit 0
}
# Manipulates hosts for the project
function hosts(){
local current="$(project current --path)"
index="$current/index.yaml"
if [ -n "$1" ] ; then
case "$1" in
ip)
local ip
case "$2" in
--fzf)
ip=$(hosts list | fzf --no-preview | cut -d',' -f2)
;;
--dmenu)
ip=$(hosts list | dmenu | cut -d',' -f2)
echo "$ip" | xclip -selection primary
echo "$ip" | xclip -selection clipboard
;;
--rofi)
ip=$(hosts list | rofi -dmenu | cut -d',' -f2)
echo "$ip" | xclip -selection primary
echo "$ip" | xclip -selection clipboard
;;
esac
echo "$ip"
;;
add)
echo -n "Name: "
read name < /dev/tty
echo -n "IP: "
read ip < /dev/tty
echo -n "Description: "
read description < /dev/tty
local host='{}'
if [ -n "$name" ]; then
host="$(echo $host | jq ".name=\"$name\"" )"
fi
if [ -n "$ip" ]; then
host="$(echo $host | jq ".ip=\"$ip\"" )"
fi
if [ -n "$description" ]; then
host="$(echo $host | jq ".description=\"$description\"" )"
fi
yq --yaml-output ".hosts |= .+ [$host]" "$index" > newindex
rm "$index"
mv newindex "$index"
;;
*)
echo "Unknown command $1"
print_help
exit 1
;;
esac
fi
}
if [ -n "$1" ] ; then
case "$1" in
-h|--help)
print_help
exit 0
;;
#list)
# list_projects
# exit 0
# ;;
#switch)
# switch "$2"
# exit 0
# ;;
#current)
# get_current "$2"
# exit 0
# ;;
#new)
# new_project "$2"
# exit 0
# ;;
#copy)
# shift
# copyto "$@"
# exit 0
# ;;
#serve)
# shift
# serve "$@"
# exit 0
# ;;
#hosts)
# shift
# hosts "$@"
# exit 0
# ;;
*)
executable="project-${1}"
if command -v "$executable" > /dev/null; then
shift
"$executable" "$@"
exit 0
else
echo "Unknown command $1"
print_help
exit 1
fi
;;
esac
fi