Add --force argument to install scripts

This overwrites the existing configuration
This commit is contained in:
Albert Armea 2026-01-09 22:14:15 -05:00
parent dc58817aea
commit b98fbc598f

View file

@ -127,9 +127,10 @@ EOF
install_config() { install_config() {
local user="${1:-}" local user="${1:-}"
local source_config="${2:-}" local source_config="${2:-}"
local force="${3:-false}"
if [[ -z "$user" ]]; then if [[ -z "$user" ]]; then
die "Usage: shepherd install config --user USER [--source CONFIG]" die "Usage: shepherd install config --user USER [--source CONFIG] [--force]"
fi fi
validate_user "$user" validate_user "$user"
@ -161,7 +162,15 @@ install_config() {
# Check if config already exists # Check if config already exists
if maybe_sudo test -f "$dst_config"; then if maybe_sudo test -f "$dst_config"; then
warn "Config file already exists at $dst_config, skipping" if [[ "$force" == "true" ]]; then
warn "Overwriting existing config at $dst_config"
maybe_sudo cp "$source_config" "$dst_config"
maybe_sudo chown "$user:$user" "$dst_config"
maybe_sudo chmod 0644 "$dst_config"
success "Overwrote user configuration for $user"
else
warn "Config file already exists at $dst_config, skipping (use --force to overwrite)"
fi
else else
# Copy config file # Copy config file
maybe_sudo cp "$source_config" "$dst_config" maybe_sudo cp "$source_config" "$dst_config"
@ -175,9 +184,10 @@ install_config() {
install_all() { install_all() {
local user="${1:-}" local user="${1:-}"
local prefix="${2:-$DEFAULT_PREFIX}" local prefix="${2:-$DEFAULT_PREFIX}"
local force="${3:-false}"
if [[ -z "$user" ]]; then if [[ -z "$user" ]]; then
die "Usage: shepherd install all --user USER [--prefix PREFIX]" die "Usage: shepherd install all --user USER [--prefix PREFIX] [--force]"
fi fi
require_root require_root
@ -188,7 +198,7 @@ install_all() {
install_bins "$prefix" install_bins "$prefix"
install_sway_config "$prefix" install_sway_config "$prefix"
install_desktop_entry "$prefix" install_desktop_entry "$prefix"
install_config "$user" install_config "$user" "" "$force"
success "Installation complete!" success "Installation complete!"
info "" info ""
@ -206,6 +216,7 @@ install_main() {
local user="" local user=""
local prefix="$DEFAULT_PREFIX" local prefix="$DEFAULT_PREFIX"
local source_config="" local source_config=""
local force="false"
# Parse remaining arguments # Parse remaining arguments
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
@ -222,6 +233,10 @@ install_main() {
source_config="$2" source_config="$2"
shift 2 shift 2
;; ;;
--force|-f)
force="true"
shift
;;
*) *)
die "Unknown option: $1" die "Unknown option: $1"
;; ;;
@ -233,7 +248,7 @@ install_main() {
install_bins "$prefix" install_bins "$prefix"
;; ;;
config) config)
install_config "$user" "$source_config" install_config "$user" "$source_config" "$force"
;; ;;
sway-config) sway-config)
install_sway_config "$prefix" install_sway_config "$prefix"
@ -242,7 +257,7 @@ install_main() {
install_desktop_entry "$prefix" install_desktop_entry "$prefix"
;; ;;
all) all)
install_all "$user" "$prefix" install_all "$user" "$prefix" "$force"
;; ;;
""|help|-h|--help) ""|help|-h|--help)
cat <<EOF cat <<EOF
@ -259,6 +274,7 @@ Options:
--user USER Target user for config deployment (required for config/all) --user USER Target user for config deployment (required for config/all)
--prefix PREFIX Installation prefix (default: $DEFAULT_PREFIX) --prefix PREFIX Installation prefix (default: $DEFAULT_PREFIX)
--source CONFIG Source config file (default: config.example.toml) --source CONFIG Source config file (default: config.example.toml)
--force, -f Overwrite existing configuration files
Environment: Environment:
DESTDIR Installation root for packaging (default: empty) DESTDIR Installation root for packaging (default: empty)
@ -266,6 +282,7 @@ Environment:
Examples: Examples:
shepherd install bins --prefix /usr/local shepherd install bins --prefix /usr/local
shepherd install config --user kiosk shepherd install config --user kiosk
shepherd install config --user kiosk --force
shepherd install all --user kiosk --prefix /usr shepherd install all --user kiosk --prefix /usr
EOF EOF
;; ;;