mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-01-26 11:14:08 +00:00
138 lines
3.6 KiB
Bash
Executable File
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
|