Files
dotfiles/local/bin/dfm
Ismo Vuorinen 5e06a735cc Add linters (#1)
* Add linters and ignore antigen.zsh
2022-12-12 13:50:31 +02:00

138 lines
3.6 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Dotfiles manager and install helper
# (c) Ismo Vuorinen <https://github.com/ivuorinen> 2022
# Licensed under MIT, see LICENSE
#
# shellcheck source-path=$HOME/.dotfiles/local/bin
#
# Helper variables, override with ENVs like `VERBOSE=1 dfm help`
: "${VERBOSE:=0}"
: "${DOTFILES:=$HOME/.dotfiles}"
: "${INSTALL_SCRIPT:=$DOTFILES/scripts/install.sh}"
: "${BREWFILE:=$DOTFILES/Brewfile}"
SCRIPT=$(basename "$0")
function section_install
{
USAGE_PREFIX="-> $SCRIPT install"
case "$1" in
all)
bash "$DOTFILES/scripts/settler.sh" && echo "🎉 Done!"
;;
antigen)
curl -L git.io/antigen > "$DOTFILES/local/bin/antigen.zsh" && echo "🎉 Done!"
;;
defaults)
bash "$DOTFILES/scripts/set-defaults.sh" && echo "🎉 Done!"
;;
gh-extensions)
bash "$DOTFILES/scripts/gh-extensions.sh" && echo "🎉 Done!"
;;
*)
echo "$USAGE_PREFIX [antigen | defaults | gh-extensions]"
echo " * antigen: Updates the antigen.zsh file"
echo " * defaults: Setup nice macOS defaults"
echo " * gh-extensions: Install GitHub CLI Extensions"
;;
esac
}
function section_brew
{
USAGE_PREFIX="-> $SCRIPT brew"
if ! command -v brew &> /dev/null; then
echo "brew could not be found, please install it first"
exit
fi
case "$1" in
install)
brew bundle install --file="$BREWFILE"
echo "🎉 Done!"
;;
update)
brew update && brew outdated && brew upgrade && brew cleanup
echo "🎉 Done!"
;;
updatebundle)
# Updates .dotfiles/Brewfile with descriptions
brew bundle dump --force --file="$BREWFILE" --describe && echo "🎉 Done!"
;;
autoupdate)
brew autoupdate start 43200 --upgrade --cleanup --immediate
;;
*)
echo "$USAGE_PREFIX [install | update | updatebundle]"
echo " * install: Installs items defined in Brewfile"
echo " * update: Updates and upgrades brew packages"
echo " * updatebundle: Updates Brewfile with descriptions"
echo " * autoupdate: Setups brew auto-update and runs it immediately"
;;
esac
}
function section_dotfiles
{
USAGE_PREFIX="-> $SCRIPT dotfiles"
case "$1" in
link)
rcup -B "$HOSTNAME" -v && echo "🎉 Done!"
;;
update)
# Updates .dotfiles/scripts/install.sh and formats it
rcup -B 0 -g \
| tee "$INSTALL_SCRIPT" 1> /dev/null \
&& shfmt -w -l "$INSTALL_SCRIPT" \
&& sed -i '' "s|$HOME|\$HOME|g" "$INSTALL_SCRIPT" \
&& echo "🎉 Done!"
;;
shfmt)
# Format shell scripts according to following rules.
shfmt \
--find \
--list \
--write \
--diff \
--simplify \
--language-dialect bash \
--indent 2 \
--binary-next-line \
--case-indent \
--space-redirects \
--func-next-line \
"$DOTFILES"
;;
*)
echo "$USAGE_PREFIX [link | update | shfmt]"
echo " * link: Use rcrc to update dotfile links"
echo " * update: Updates dotfile links, installs host specific overrides automatically"
echo " * shfmt: Run shfmt to all dotfiles"
;;
esac
}
function usage
{
echo $"Usage: $SCRIPT [install | brew | dotfiles]"
echo $" All commands have their own subcommands."
echo ""
section_install
echo ""
section_brew
echo ""
section_dotfiles
}
# The main loop. first keyword after $0 triggers section, or help.
case "$1" in
install) section_install "$2" ;;
brew) section_brew "$2" ;;
dotfiles) section_dotfiles "$2" ;;
*) usage && exit 1 ;;
esac