#!/usr/bin/env bash # # Main entry script for dotbare, used to route command to appropriate scripts # # @params # Globals # ${mydir}: string, directory of the executing script, used for sourcing helpers # ${action_command}: string, determine which script to call # Arguments # action_command: sub commands dotbare should run # General git command: log, status etc # dotbare specific commands: fadd | frm | fpop | freset | fcheckout | help etc # option flags: # check sub commands for available option flags mydir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" source "${mydir}"/helper/set_variable.sh function usage() { echo -e "Usage: dotbare [-h] [COMMANDS] [OPTIONS] ...\n" echo -e "Interactively manage dotfiles with the help of fzf and git bare repo" echo -e "To see all dotbare specific COMMANDS, run dotbare without any arguments\n" echo -e "dotbare is just a wrapper around git hence all git commands will function" echo -e "normally, just replace git with dotbare (e.g. dotbare commit -m 'message')." echo -e "dotbare added couple useful scripts starting with 'f' prefix to help you" echo -e "manage your interact with your git bare repo a little easier with the help of fzf\n" echo -e "optional arguments:" echo -e " -h\t\tshow this help message and exit" echo -e "Available commands:" echo -e " Any git commands, treat dotbare as git" echo -e " fadd \t\tstage modified file interactively" echo -e " funtrack \t\tuntrack file interactively" echo -e " fstash \t\tmanage stash interactively" echo -e " fcheckout \t\tcheckout branch/files/commits interactively" echo -e " fstat \t\tstage/unstage interactively" echo -e " fedit \t\tselect files/commits and edit interactively" echo -e " flog \t\tmanage commits interactively" echo -e " fbackup \t\tperform backup for tracked dotfiles" echo -e " fupgrade \t\tupdate dotbare to the latest version" echo -e " finit \t\tinitialise/migrate dotbare" echo -e " help \t\tshow this help message and exit" } # if no argument, display all possible actions # disbale shell check for ls, we are not processing if [[ $# -eq 0 ]]; then # shellcheck disable=SC2012 ls "${mydir}"/scripts \ | fzf --no-multi --header='Available commands' --preview="dotbare {} -h" \ | xargs -I __ dotbare __ -h exit 0 fi # shellcheck disable=SC2199 [[ "$@" == 'add --all' ]] && \ echo 'If you intend to stage all modified file, run dotbare add -u' && \ echo "dotbare disabled add --all option as this will stage every single file in ${DOTBARE_TREE}" && \ exit 1 action_command='' case "$1" in fadd) action_command='fadd' shift ;; funtrack) action_command='funtrack' shift ;; fstash) action_command='fstash' shift ;; freset) action_command='freset' shift ;; fcheckout) action_command='fcheckout' shift ;; fstat) action_command='fstat' shift ;; fedit) action_command='fedit' shift ;; flog) action_command="flog" shift ;; fbackup) action_command="fbackup" shift ;; finit) action_command='finit' shift ;; fupgrade) action_command='fupgrade' shift ;; help) usage exit 0 ;; -h) usage exit 0 ;; esac if [[ -z "${action_command}" ]]; then /usr/bin/git --git-dir="${DOTBARE_DIR}" --work-tree="${DOTBARE_TREE}" "$@" else # run the scripts "${mydir}/scripts/${action_command}" "$@" fi