#!/usr/bin/env bash read -r -d '' _HELP < m4_ignore([ ### START OF CODE GENERATED BY Argbash v2.10.0 one line above ### # Argbash is a bash code generator used to get arguments parsing right. # Argbash is FREE SOFTWARE, see https://argbash.io for more info die() { local _ret="${2:-1}" test "${_PRINT_HELP:-no}" = yes && print_help >&2 echo "$1" >&2 exit "${_ret}" } begins_with_short_option() { local first_option all_short_options='fh' first_option="${1:0:1}" test "${all_short_options}" = "${all_short_options/${first_option}/}" && return 1 || return 0 } # THE DEFAULTS INITIALIZATION - POSITIONALS _positionals=() _arg_display_name="Alternative" # THE DEFAULTS INITIALIZATION - OPTIONALS _arg_force="off" print_help() { printf 'Usage: %s [-f|--(no-)force] [-h|--help] []\n' "$0" printf '\t%s\n' ": The name which will be displayed in the app launcher (default: 'Alternative')" printf '\t%s\n' "-f, --force, --no-force: Do not ask for confirmation (off by default)" printf '\t%s\n' "-h, --help: Prints help" printf '\n%s\n' "${_HELP} " } parse_commandline() { _positionals_count=0 while test $# -gt 0; do _key="$1" case "${_key}" in -f | --no-force | --force) _arg_force="on" test "${1:0:5}" = "--no-" && _arg_force="off" ;; -f*) _arg_force="on" _next="${_key##-f}" if test -n "${_next}" -a "${_next}" != "${_key}"; then { begins_with_short_option "${_next}" && shift && set -- "-f" "-${_next}" "$@"; } || die "The short option '${_key}' can't be decomposed to ${_key:0:2} and -${_key:2}, because ${_key:0:2} doesn't accept value and '-${_key:2:1}' doesn't correspond to a short option." fi ;; -h | --help) print_help exit 0 ;; -h*) print_help exit 0 ;; *) _last_positional="$1" _positionals+=("${_last_positional}") _positionals_count=$((_positionals_count + 1)) ;; esac shift done } handle_passed_args_count() { test "${_positionals_count}" -le 1 || _PRINT_HELP=yes die "FATAL ERROR: There were spurious positional arguments --- we expect between 0 and 1, but got ${_positionals_count} (the last one was: '${_last_positional}')." 1 } assign_positional_args() { local _positional_name _shift_for=$1 _positional_names="_arg_display_name " shift "${_shift_for}" for _positional_name in ${_positional_names}; do test $# -gt 0 || break eval "${_positional_name}=\${1}" || die "Error during argument parsing, possibly an Argbash bug." 1 shift done } parse_commandline "$@" handle_passed_args_count assign_positional_args 1 "${_positionals[@]}" # OTHER STUFF GENERATED BY Argbash ### END OF CODE GENERATED BY Argbash (sortof) ### ]) # [ <-- needed because of Argbash set -euo pipefail display_name=${_arg_display_name} force=${_arg_force} default_chrome_desktop=/usr/share/applications/google-chrome.desktop if [[ ! -f "${default_chrome_desktop}" ]]; then echo "Could not find the file ${default_chrome_desktop}. Are you sure that Google Chrome is installed?" exit 1 fi safe_display_name=${display_name,,} # Make lowercase safe_display_name=${safe_display_name// /-} # Replace spaces with dashes user_data_dir_name="google-chrome-${safe_display_name}" user_data_dir="${HOME}/.config/${user_data_dir_name}" shortcut="${HOME}/.local/share/applications/${user_data_dir_name}.desktop" echo echo "We will:" echo " - Create the file '${shortcut}'" echo " - Use '${display_name}' as the display name" echo " - Use '${user_data_dir}' as the user data directory" echo if [[ "${force}" = off ]]; then read -p "Do you confirm? (Yy)" -n 1 -r echo if [[ ! ${REPLY} =~ ^[Yy]$ ]]; then exit 1 fi fi ## Create the shortcut cp -f "${default_chrome_desktop}" "${shortcut}" chrome_name="Google Chrome" sed -i "s:Name=${chrome_name}:Name=${chrome_name} (${display_name}):g" "${shortcut}" chrome_binary="/usr/bin/google-chrome-stable" sed -i "s:Exec=${chrome_binary}:Exec=${chrome_binary} --class=${user_data_dir_name} --user-data-dir=${user_data_dir}:g" "${shortcut}" echo echo "All done. To uninstall, run:" echo " $ rm -f ${shortcut}" echo echo "If you also want to delete the user data directory, run:" echo " $ rm -rf ${user_data_dir}" echo # ] <-- needed because of Argbash