From d6a236f8e412c771e6585c1b3f90279fe34c8bba Mon Sep 17 00:00:00 2001 From: Josh Ashton Date: Tue, 13 Jun 2023 19:41:00 -0600 Subject: [PATCH] init commit --- gclone | 62 +++++++++++++++++++++++++ ginit | 8 ++++ goto | 41 ++++++++++++++++ gpush | 31 +++++++++++++ lookup | 31 +++++++++++++ mark | 55 ++++++++++++++++++++++ newproject | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++ run | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 490 insertions(+) create mode 100755 gclone create mode 100755 ginit create mode 100755 goto create mode 100755 gpush create mode 100755 lookup create mode 100755 mark create mode 100755 newproject create mode 100755 run diff --git a/gclone b/gclone new file mode 100755 index 0000000..fb6cccc --- /dev/null +++ b/gclone @@ -0,0 +1,62 @@ +#!/bin/zsh + +CONFIG="$HOME/.config/gclone/gclone.conf" + +# Detect if there is already a default user. If not, set it to quaxlyqueen. +if [[ $(grep -c "default-user: " $CONFIG) -gt 0 ]]; then + DEFAULT_USER=`grep "default-user: " $CONFIG | cut -d " " -f 2` +else + echo "default-user: quaxlyqueen" >> $CONFIG +fi + +# Catch any invalid input. +if [[ $# -eq 0 || $# -gt 2 ]]; then + echo "\nImproper usage. Try:" + echo "\ngclone [ { owner }/[ repo { -h | --help | --set-default [ username ] } ] ]" + echo " gclone gclone" + echo " gclone quaxlyqueen/gclone" + echo " gclone -h" + echo " gclone --help" + echo " gclone --set-default quaxlyqueen" + + exit + +# Display help. +elif [[ $1 == "-h" || $1 == "--help" ]]; then + echo "\nMaking the Git command line tool easier to use with simpler commands." + echo "User must provide an argument. This argument is in the format of:" + echo " \"owner/repository\"" + echo "The \"owner/\" portion may be excluded. By default, this will clone from" + echo "the owner quaxlyqueen. WIP: This may be configured at \"$CONFIG\"." + echo "an example is below." + + echo "\n\ndefault-user: quaxlyqueen" + + echo "\n\nUsage:" + echo "gclone [ { owner }/[ repo ] ] { -h | --help | --set-default [ username ] }" + echo " gclone gclone" + echo " gclone quaxlyqueen/gclone" + echo " gclone -h" + echo " gclone --help" + echo " gclone --set-default quaxlyqueen" + + exit + +# Set the default owner to clone repo's. +elif [[ $1 == "--set-default" ]]; then + sed -i "/default-user: /c\default-user: $2" $CONFIG + echo "\nDefault user has been set to $2" + exit + +# Clone a git repo from a specified owner. +elif [[ $1 =~ "/" ]]; then + git clone https://github.com/$1 + REPO=`cut $1 -d "/" -f 2` + +# Clone a git repo from the owner. By default, this will be the owner quaxlyqueen. +else + git clone https://github.com/$DEFAULT_USER/$1 + REPO=$1 +fi + +cd $REPO diff --git a/ginit b/ginit new file mode 100755 index 0000000..f1fbfb4 --- /dev/null +++ b/ginit @@ -0,0 +1,8 @@ +#!/bin/zsh + +git init +gh repo create + +git stage -A +git commit -m "init commit" +git push --set-upstream origin main diff --git a/goto b/goto new file mode 100755 index 0000000..38ea43c --- /dev/null +++ b/goto @@ -0,0 +1,41 @@ +#!/bin/zsh + +# Dependencies: +# quaxlyqueen/scripts/mark + +BOOKMARKS_FILE=~/.bookmarks + +# Catch any invalid input. +if [[ $# -eq 0 || $# -gt 1 ]]; then + echo "\nImproper usage. Try:" + echo "\ngoto [keyword]" + echo " goto downloads" + echo " goto school" + echo " goto portfolio" + echo " goto -h" + echo " goto --help" + +# Display help. +elif [[ $1 == "-h" || $1 == "--help" ]]; then + echo "\nImproper usage. Try:" + echo "\ngoto [keyword]" + echo " goto downloads" + echo " goto school" + echo " goto portfolio" + echo " goto -h" + echo " goto --help" + +else + + # Locate the bookmark. + if [ $(grep -c "$1" $BOOKMARKS_FILE) -gt 0 ]; then + + # Go to the bookmark + cd $(grep "$1" $BOOKMARKS_FILE | head -n 1) + + # List bookmarks if bookmark was not found. + else + echo "Bookmark not found. Available bookmarks:" + mark -ls + fi +fi diff --git a/gpush b/gpush new file mode 100755 index 0000000..666a7eb --- /dev/null +++ b/gpush @@ -0,0 +1,31 @@ +#!/bin/zsh + +# Catch any input that is invalid. +if [[ $# -eq 0 || $# -gt 1 ]]; then + echo "\nImproper usage. Try:" + echo "\ngit-push [ \"message\" | -h | --help ]" + echo " git-push \"init commit\"" + echo " git-push -h" + echo " git-push --help" + + exit + +# Display help. +elif [[ $1 == "-h" || $1 == "--help" ]]; then + echo "\nMaking the Git command line tool easier to use with simpler commands." + echo "User must provide an argument. The argument must be wrapped in \"\" symbols." + + echo "\n\nUsage:" + echo "\ngit-push [ \"message\" | -h | --help ]" + echo " git-push \"init commit\"" + echo " git-push -h" + echo " git-push --help" + + exit + +# Push changes to remote repository. +else + git stage -A + git commit -m "$1" + git push +fi diff --git a/lookup b/lookup new file mode 100755 index 0000000..8693c90 --- /dev/null +++ b/lookup @@ -0,0 +1,31 @@ +#!/bin/zsh + +# Catch any invalid input. +if [[ $# -eq 0 || $# -gt 2 ]]; then + echo "Improper usage: lookup [command] [search term]" + echo "Available commands:" + echo " user [user]" + echo " eg. lookup user quaxlyqueen" + echo " repo [user] [repo]" + echo " eg. lookup repo quaxlyqueen/dnd" + +# Display help. +elif [[ $1 == "-h" || $1 == "--help" ]]; then + echo "Available commands:" + echo " user [user]" + echo " eg. lookup user quaxlyqueen" + echo " repo [user] [repo]" + echo " eg. lookup repo quaxlyqueen/dnd" + echo " -h" + echo " --help" + +# Lookup a user. +elif [[ $1 == "user" ]]; then + firefox https://github.com/$2 + +# Lookup a repo. +elif [[ $1 == "repo" ]]; then + + # TODO need to implement. + firefox https://github.com/$2 +fi diff --git a/mark b/mark new file mode 100755 index 0000000..ab448c9 --- /dev/null +++ b/mark @@ -0,0 +1,55 @@ +#!/bin/bash + +# Usage: mark [-ls] [-rm number] [-rm number TO number] +# Creates a bookmark of the current directory, displays a list of bookmarks if the -ls option is provided +BOOKMARKS_FILE=~/.bookmarks + +# Catch case where there are too many arguments. +if [[ $# -gt 1 ]]; then + echo "Proper usage: mark [ -ls | -rm [ keyword ] ]" + echo " eg. mark" + echo " eg. mark -ls" + echo " eg. mark -rm portfolio" + echo " eg. mark -h" + echo " eg. mark --help" + + exit + +# Help page +elif [[ $1 == "-h" || $1 == "--help" ]]; then + echo "\nCreate and manage persistent bookmarks inside of terminal sessions.\n" + echo "Usage:" + echo " mark" + echo " mark -ls" + echo " eg. run main" + echo " mark -rm" + echo " mark -h" + echo " mark --help" + + exit + +# Add a bookmark to the bookmarks file. +elif [ $# == 0 ]; then + echo $(pwd) >> $BOOKMARKS_FILE + +# List bookmarks stored in the bookmarks file. +elif [ "$1" == "-ls" ]; then + echo "Bookmarks:" + cat $BOOKMARKS_FILE + +# Remove a bookmark stored in the bookmarks file. +elif [ "$1" == "-rm" ]; then + # The user is trying to remove a single bookmark + # Check if the bookmark exists + if [ $(grep -c "$2" $BOOKMARKS_FILE) -gt 0 ]; then + + # Remove the bookmark + sed -i .bak $2d $BOOKMARKS_FILE + else + echo "Bookmark not found" + fi + +# Invalid argument, display an error message +else + echo "Usage: mark [-ls] [-rm [number | number TO number]]" +fi diff --git a/newproject b/newproject new file mode 100755 index 0000000..eaf7eb4 --- /dev/null +++ b/newproject @@ -0,0 +1,128 @@ +#!/bin/zsh + +# Dependencies: +# quaxlyqueen/templates +# +# quaxlyqueen/scripts/mark +# quaxlyqueen/scripts/goto +# quaxlyqueen/scripts/ginit + +# Supported languages. +TYPES=("c", "c-sharp", "java", "js", "go") + +# Catch case where there are too many arguments. +if [[ $# -gt 3 ]]; then + echo "Improper usage. Try:" + echo "\nnewproject { language } { projectname } { -g | --git-project }" + echo " newproject" + echo " newproject c" + echo " newproject c app" + echo " newproject c app -g" + echo " newproject c app --git-project" + echo " newproject -h" + echo " newproject --help\n" + + echo "Supported languages: $TYPES" + + exit + +# Help page +elif [[ $1 == "-h" || $1 == "--help" ]]; then + echo "\nAbstracting away command line tools to create projects in various languages." + echo "User can use with or without arguments." + echo "With no arguments, 'newproject' will prompt for a supported language, project name," + echo " and if a git repo should be created." + echo "Bookmarks the new project directory using the 'mark' script." + echo "Detects required tools to use based upon language selected.\n" + echo "Usage:" + echo "\nnewproject { language } { projectname } { -g | --git-project }" + echo " newproject" + echo " newproject c" + echo " newproject c app" + echo " newproject c app -g" + echo " newproject c app --git-project" + echo " newproject -h" + echo " newproject --help\n" + + echo "Supported languages: $TYPES" + + exit + +elif [[ $# -eq 0 ]]; then + read "?Language: " LANG + read "?Project name: " NAME + read "?Git project (y/N): " GIT + +# User provides the project's language. +elif [[ $# -eq 1 ]]; then + LANG=$1 + read "?Project name: " NAME + read "?Git project (y/N): " GIT + +# User provides arguments for the language and project name. +elif [[ $# -eq 2 ]]; then + LANG=$1 + NAME=$2 + read "?Git project (y/N): " GIT + +# User provides arguments for all fields. +elif [[ $# -eq 3 ]]; then + LANG=$1 + NAME=$2 + GIT=$3 +fi + +# Check if the language the user has provided is supported. +if [[ ${TYPES[@]} =~ $LANG ]]; then + echo Creating $LANG project $NAME + +# Language unsupported, prompt user to create a Github issue. +else + read "?Language is not supported. Create a GH issue (y/N): " GH + if [[ $GH == "y" || $GH == "" ]]; then + gh issue create --web + fi +fi + + +# Create a new C project. +if [[ $LANG == "c" ]]; then + cp -r ~/templates/c ./$NAME # Copy the template C file. + cd $NAME + mark; # Bookmark new project. + +# Create a new C# project with dotnet. +elif [[ $LANG == "c-sharp" ]]; then + mkdir $NAME + cd $NAME + mark; # Bookmark new project. + dotnet new console # Create a new console app with dotnet. + +# Create a new Java project with Gradle. +elif [[ $LANG == "java" ]]; then + mkdir $NAME; + cd $NAME; + mark; # Bookmark new project. + gradle init + +# Create a new HTML, CSS, JS project. +elif [[ $LANG == "html" ]]; then + mkdir $NAME; + cd $NAME; + + cp -r ~/templates/web/public_html . + cd public_html; + mark; # Bookmark new project. + +elif [[ $LANG == "js" ]]; then + mkdir $NAME; + cd $NAME; + + touch main.js; + mark; # Bookmark new project. +fi + +# If the user indicated the project will be a Git project, then run the ginit script. +if [[ $GIT == "-g" || $GIT == "--git-project" ]]; then + ginit; +fi diff --git a/run b/run new file mode 100755 index 0000000..a604f19 --- /dev/null +++ b/run @@ -0,0 +1,134 @@ +#!/bin/zsh + +# Supported languages. +TYPES=("c", "cs", "java", "js", "go") + +# Catch case where there are too many arguments. +if [[ $# -gt 1 ]]; then + echo "Proper usage: run {file}" + echo " eg. run" + echo " eg. run main" + echo " eg. run -h" + echo " eg. run --help" + + exit + +# Help page +elif [[ $1 == "-h" || $1 == "--help" ]]; then + echo "\nAbstracting away command line tools to compile and run code for various languages." + echo "User can use with or without an argument file, the filetype is not needed." + echo "With no arguments, 'run' will list available (and supported) files." + echo "Additionally, 'run' prompts for and passes command line arguments for a program.\n" + echo "Detects required tools to use based upon filetypes.\n" + echo "Usage:" + echo " run" + echo " run [filename]" + echo " eg. run main" + echo " run -h" + echo " run --help\n" + echo "Supported languages: $TYPES" + + exit + +# Default state, with a reminder of what files may be launched from based upon the currently supported languages. +elif [[ $# -eq 0 ]]; then + + echo "Files that may be launched from:" + + # List files available to launch from. + for f in * + do + TYPE=`echo $f | cut -d "." -f 2` + counter=0 + + # Only list supported filetypes. + if [[ ${TYPES[@]} =~ $TYPE ]]; then + counter=$((counter+1)) # Increment counter to indicate the number of results. + + # Format: filename (file type) + echo `echo $f | cut -d "." -f 1` "("$TYPE")" + fi + done + echo $counter" available files.\n" + + # Catch case where there are no available files to run and exit. + if [[ $counter -eq 0 ]]; then + echo "No available files to run. Exiting." + exit + fi + + read "?Which file would you like to launch from: " TMP + + # Locate file and assign variables associated with the file (name and filetype). + for f in * + do + FILE=`echo $f | cut -d "." -f 1` + if [[ $FILE == $TMP ]]; then + NAME=$TMP + TYPE=`echo $f | cut -d "." -f 2` + fi + done + +# User has provided the file name. +elif [[ $# -eq 1 ]]; then + + # Locate file and assign variables associated with the file (name and filetype). + for f in * + do + FILE=`echo $f | cut -d "." -f 1` + if [[ $FILE == $1 ]]; then + NAME=$FILE + TYPE=`echo $f | cut -d "." -f 2` + fi + done +fi + +read "?Arguments: " ARGS + +# Run C app. +if [[ $TYPE == "c" ]]; then + clear + echo "Compiling..." + gcc $NAME.c -lm + echo "Output..." + ./a.out $ARGS + +# Run C# app. +elif [[ $TYPE == "cs" ]]; then + clear + echo "Compiling..." + mcs -out:$NAME.exe $NAME.cs + echo "Output..." + mono $NAME.exe + +# Run Java app. +elif [[ $TYPE == "java" ]]; then + clear + CP=.:../lib/* + echo "Compiling..." + javac -cp $CP *.java + echo "Output..."; + java -cp $CP $NAME $ARGS + rm *.class + +# Run JavaScript app. +elif [[ $TYPE == "js" ]]; then + clear + echo "Output..." + node $NAME.js + +# Run Golang app. +elif [[ $TYPE == "go" ]]; then + clear + echo "Compiling..." + go build + echo "Output..." + ./discordo #TODO: need to dynamically obtain the newly created object file to run and then delete + rm discordo + +else + read "?Language is not supported. Create a GH issue (y/n, default y): " GH + if [[ $GH == "y" || $GH == "" ]]; then + echo "Need to implement issue reporting." + fi +fi