mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-01-26 11:14:08 +00:00
210 lines
6.1 KiB
Bash
Executable File
210 lines
6.1 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-dotfiles.sh}"
|
|
: "${BREWFILE:=$DOTFILES/Brewfile}"
|
|
|
|
SCRIPT=$(basename "$0")
|
|
|
|
# shellcheck source=./../../scripts/shared.sh
|
|
source "$DOTFILES/scripts/shared.sh"
|
|
|
|
function section_reset
|
|
{
|
|
USAGE_PREFIX="$SCRIPT reset"
|
|
case "$1" in
|
|
all)
|
|
msg_ok "Running all reset commands"
|
|
$0 reset nvim
|
|
;;
|
|
nvim)
|
|
rm -rf ~/.local/share/nvim ~/.local/state/nvim ~/.cache/nvim ~/.config/astronvim ~/.config/nvim
|
|
msg_ok "Deleted old nvim files"
|
|
ln -s ~/.dotfiles/config/astronvim ~/.config/astronvim
|
|
ln -s ~/.dotfiles/config/nvim ~/.config/nvim
|
|
msg_ok "Linked nvim and astronvim"
|
|
hash brew 2>/dev/null && $0 install brew
|
|
hash go 2>/dev/null && $0 install ext_go
|
|
hash npm 2>/dev/null && $0 install ext_npm
|
|
msg_ok "Installed packages"
|
|
msg_done "...and we are done!"
|
|
;;
|
|
*)
|
|
menu_section "$USAGE_PREFIX" "all | nvim"
|
|
menu_item "all" "Reset everything, runs all configured reset actions"
|
|
menu_item "nvim" "Resets nvim. Deletes caches, removes nvim folders and relinks nvim folders"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
function section_install
|
|
{
|
|
USAGE_PREFIX="$SCRIPT install"
|
|
|
|
case "$1" in
|
|
all)
|
|
$0 install antigen
|
|
$0 install macos
|
|
$0 install ext_gh
|
|
$0 install ext_go
|
|
;;
|
|
antigen)
|
|
curl -L git.io/antigen > "$DOTFILES/local/bin/antigen.zsh" && msg_done "🎉 New antigen installed!"
|
|
;;
|
|
macos)
|
|
bash "$DOTFILES/scripts/set-macos-defaults.sh" && msg_done "🎉 Brewfile defined apps has been installed!"
|
|
;;
|
|
ext_go)
|
|
bash "$DOTFILES/scripts/install-go-packages.sh" && msg_done "🎉 Go packages have been installed!"
|
|
;;
|
|
ext_gh)
|
|
bash "$DOTFILES/scripts/install-gh-extensions.sh" && msg_done "🎉 Extensions for GitHub CLI have been installed!"
|
|
;;
|
|
ext_npm)
|
|
bash "$DOTFILES/scripts/install-npm-packages.sh" && msg_done "NPM Packages have been installed!"
|
|
;;
|
|
settler)
|
|
bash "$DOTFILES/scripts/settler.sh" && msg_done "🎉 Settler has been run!"
|
|
;;
|
|
*)
|
|
menu_section "$USAGE_PREFIX" "all | antigen | ext_gh | ext_go | ext_npm | macos | settler"
|
|
menu_item "all" "Installs antigen, macos, brew, ext_gh and ext_go"
|
|
menu_item "antigen" "Updates the antigen.zsh file"
|
|
menu_item "ext_gh" "Install GitHub CLI Extensions"
|
|
menu_item "ext_go" "Install Go Packages"
|
|
menu_item "ext_npm" "Install NPM Packages"
|
|
menu_item "macos" "Setup nice macOS defaults"
|
|
menu_item "settler" "Runs the WIP settler.sh"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
function section_brew
|
|
{
|
|
USAGE_PREFIX="$SCRIPT brew"
|
|
|
|
if ! command -v brew &> /dev/null; then
|
|
menu_section "$USAGE_PREFIX" "brew not available on this system"
|
|
else
|
|
case "$1" in
|
|
install)
|
|
brew bundle install --file="$BREWFILE" && msg_done "🎉 Done!"
|
|
;;
|
|
update)
|
|
brew update && brew outdated && brew upgrade && brew cleanup
|
|
msg_done "🎉 Done!"
|
|
;;
|
|
updatebundle)
|
|
# Updates .dotfiles/Brewfile with descriptions
|
|
brew bundle dump \
|
|
--force \
|
|
--file="$BREWFILE" \
|
|
--describe && msg_done "🎉 Done!"
|
|
;;
|
|
autoupdate)
|
|
brew autoupdate delete
|
|
brew autoupdate start 43200 --upgrade --cleanup --immediate
|
|
;;
|
|
*)
|
|
menu_section "$USAGE_PREFIX" "install | update | updatebundle | autoupdate"
|
|
menu_item "install" "Installs items defined in Brewfile"
|
|
menu_item "update" "Updates and upgrades brew packages"
|
|
menu_item "updatebundle" "Updates Brewfile with descriptions"
|
|
menu_item "autoupdate" "Setups brew auto-update and runs it immediately"
|
|
;;
|
|
esac
|
|
fi
|
|
}
|
|
|
|
function section_dotfiles
|
|
{
|
|
USAGE_PREFIX="$SCRIPT dotfiles"
|
|
|
|
case "$1" in
|
|
link)
|
|
rcup -B "$HOSTNAME" -f -v && msg_done "🎉 dotfiles have been linked!"
|
|
;;
|
|
update)
|
|
# Updates .dotfiles/scripts/install.sh and formats it
|
|
rcup -B 0 -g \
|
|
| tee "$INSTALL_SCRIPT" 1> /dev/null \
|
|
&& sed -i '' "s|$HOME|\$HOME|g" "$INSTALL_SCRIPT" \
|
|
&& sed -i '' "s|install.sh|$(basename "$INSTALL_SCRIPT")|g" "$INSTALL_SCRIPT"
|
|
$0 dotfiles shfmt
|
|
$0 dotfiles link
|
|
msg_done "🎉 dotfiles updated and linked!"
|
|
;;
|
|
shfmt)
|
|
# Format shell scripts according to following rules.
|
|
find "$DOTFILES" \
|
|
\( -name '*.sh' -or -name '*.zsh' -or -name 'x-*' -or -not '*.pl' \) \
|
|
-exec shfmt -fn -l -w -i 2 -ci -sr -bn {} \;
|
|
msg_done "🎉 dotfiles have been formatted!"
|
|
;;
|
|
*)
|
|
menu_section "$USAGE_PREFIX" "link | update | shfmt"
|
|
menu_item "link" "Use rcrc to update dotfile links"
|
|
menu_item "update" "Updates dotfile links (scripts/install.sh), formats it and runs it."
|
|
menu_item "shfmt" "Run shfmt to all dotfiles"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Secret menu for visual tests
|
|
function section_tests
|
|
{
|
|
USAGE_PREFIX="$SCRIPT tests"
|
|
|
|
case "$1" in
|
|
msg)
|
|
msg "msg"
|
|
msg_done "msg_done"
|
|
msg_prompt "msg_prompt"
|
|
msg_prompt_done "msg_prompt_done"
|
|
msg_nested "msg_nested"
|
|
msg_nested_done "msg_nested_done"
|
|
msg_run "msg_run" "second_param"
|
|
msg_ok "msg_ok"
|
|
msg_warn "msg_warn"
|
|
msg_err "msg_err"
|
|
;;
|
|
*)
|
|
menu_section "$USAGE_PREFIX" "msg"
|
|
menu_item "msg" "List all log functions from shared.sh"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
function usage
|
|
{
|
|
echo ""
|
|
menu_section "Usage: $SCRIPT" "install | reset | brew | dotfiles"
|
|
echo $" All commands have their own subcommands."
|
|
echo ""
|
|
section_install
|
|
echo ""
|
|
section_reset
|
|
echo ""
|
|
section_brew
|
|
echo ""
|
|
section_dotfiles
|
|
}
|
|
|
|
# The main loop. first keyword after $0 triggers section, or help.
|
|
case "$1" in
|
|
install) section_install "$2" ;;
|
|
reset) section_reset "$2" ;;
|
|
brew) section_brew "$2" ;;
|
|
dotfiles) section_dotfiles "$2" ;;
|
|
tests) section_tests "$2" ;;
|
|
*) usage && exit 0 ;;
|
|
esac
|