mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-02-17 04:54:15 +00:00
feat(install): add automation and skip flags (#121)
* feat(install): add automation and skip flags * fix(install): avoid resetting flags in cargo * fix(install): avoid option reset * fix(install): preserve parsed options
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
# Installation functions for dfm, the dotfile manager
|
# Installation functions for dfm, the dotfile manager
|
||||||
#
|
#
|
||||||
# @author Ismo Vuorinen <https://github.com/ivuorinen>
|
# @author Ismo Vuorinen <https://github.com/ivuorinen>
|
||||||
@@ -25,12 +26,53 @@
|
|||||||
#
|
#
|
||||||
# Example:
|
# Example:
|
||||||
# all
|
# all
|
||||||
|
parse_options()
|
||||||
|
{
|
||||||
|
NO_AUTOMATION=0
|
||||||
|
SKIP_FONTS=0
|
||||||
|
SKIP_BREW=0
|
||||||
|
SKIP_CARGO=0
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--no-automation)
|
||||||
|
NO_AUTOMATION=1
|
||||||
|
;;
|
||||||
|
--no-fonts)
|
||||||
|
SKIP_FONTS=1
|
||||||
|
;;
|
||||||
|
--no-brew)
|
||||||
|
SKIP_BREW=1
|
||||||
|
;;
|
||||||
|
--no-cargo)
|
||||||
|
SKIP_CARGO=1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
lib::error "Unknown option: $1"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
function all()
|
function all()
|
||||||
{
|
{
|
||||||
|
parse_options "$@"
|
||||||
|
|
||||||
lib::log "Installing all packages..."
|
lib::log "Installing all packages..."
|
||||||
fonts
|
|
||||||
brew
|
if [[ $SKIP_FONTS -eq 0 ]]; then
|
||||||
cargo
|
fonts
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $SKIP_BREW -eq 0 ]]; then
|
||||||
|
brew
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $SKIP_CARGO -eq 0 ]]; then
|
||||||
|
cargo
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Installs fonts required by the dotfile manager.
|
# Installs fonts required by the dotfile manager.
|
||||||
@@ -51,8 +93,25 @@ function all()
|
|||||||
# fonts
|
# fonts
|
||||||
function fonts()
|
function fonts()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if [[ $SKIP_FONTS -eq 1 ]]; then
|
||||||
|
lib::log "Skipping fonts installation"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $NO_AUTOMATION -eq 0 ]]; then
|
||||||
|
utils::interactive::confirm "Install fonts?" || return 0
|
||||||
|
fi
|
||||||
|
|
||||||
lib::log "Installing fonts..."
|
lib::log "Installing fonts..."
|
||||||
# implement fonts installation
|
local script="${DOTFILES}/scripts/install-fonts.sh"
|
||||||
|
|
||||||
|
if [[ ! -x "$script" ]]; then
|
||||||
|
lib::error "Font installation script not found: $script"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
bash "$script"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Install Homebrew and set it up.
|
# Install Homebrew and set it up.
|
||||||
@@ -69,8 +128,35 @@ function fonts()
|
|||||||
# brew
|
# brew
|
||||||
function brew()
|
function brew()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
if [[ $SKIP_BREW -eq 1 ]]; then
|
||||||
|
lib::log "Skipping Homebrew installation"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $NO_AUTOMATION -eq 0 ]]; then
|
||||||
|
utils::interactive::confirm "Install Homebrew packages?" || return 0
|
||||||
|
fi
|
||||||
|
|
||||||
lib::log "Installing Homebrew..."
|
lib::log "Installing Homebrew..."
|
||||||
# implement Homebrew installation
|
if ! utils::is_installed brew; then
|
||||||
|
lib::log "Homebrew not found, installing..."
|
||||||
|
|
||||||
|
local installer="$TEMP_DIR/homebrew-install.sh"
|
||||||
|
utils::retry "$DFM_MAX_RETRIES" \
|
||||||
|
curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh \
|
||||||
|
-o "$installer"
|
||||||
|
|
||||||
|
NONINTERACTIVE=1 bash "$installer"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if utils::is_installed brew; then
|
||||||
|
brew bundle install --file="$BREWFILE" --force --quiet
|
||||||
|
else
|
||||||
|
lib::error "Homebrew installation failed"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Installs Rust and cargo packages.
|
# Installs Rust and cargo packages.
|
||||||
@@ -86,6 +172,33 @@ function brew()
|
|||||||
# cargo
|
# cargo
|
||||||
function cargo()
|
function cargo()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
if [[ $SKIP_CARGO -eq 1 ]]; then
|
||||||
|
lib::log "Skipping Rust and cargo installation"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $NO_AUTOMATION -eq 0 ]]; then
|
||||||
|
utils::interactive::confirm "Install Rust and cargo packages?" || return 0
|
||||||
|
fi
|
||||||
|
|
||||||
lib::log "Installing Rust and cargo packages..."
|
lib::log "Installing Rust and cargo packages..."
|
||||||
# implement Rust and cargo packages installation
|
if ! utils::is_installed cargo; then
|
||||||
|
lib::log "Rust not found, installing rustup..."
|
||||||
|
|
||||||
|
local installer="$TEMP_DIR/rustup-init.sh"
|
||||||
|
utils::retry "$DFM_MAX_RETRIES" \
|
||||||
|
curl https://sh.rustup.rs -sSf -o "$installer"
|
||||||
|
sh "$installer" -y
|
||||||
|
source "$HOME/.cargo/env"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local script="${DOTFILES}/scripts/install-cargo-packages.sh"
|
||||||
|
if [[ -x "$script" ]]; then
|
||||||
|
bash "$script"
|
||||||
|
else
|
||||||
|
lib::error "Cargo packages script not found: $script"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user