dotfiles/themes/gnome-terminal/install.sh

193 lines
5.0 KiB
Bash
Executable File

#!/usr/bin/env bash
dir=$(dirname "$0")
declare -a schemes
schemes=($(cd $dir/colors && echo * && cd - > /dev/null))
source $dir/src/tools.sh
source $dir/src/profiles.sh
source $dir/src/dircolors.sh
show_help() {
echo "Usage: install.sh [-h] [-s <scheme>] [-p <profile>]"
echo
echo "Options"
echo " -h, --help"
echo " Show this information"
echo " -s scheme, --scheme scheme, --scheme=scheme"
echo " Color scheme to be used (will be asked otherwise)"
echo " -p profile, --profile profile, --profile profile"
echo " Gnome Terminal profile to overwrite (will be asked otherwise)"
echo " --install-dircolors, --skip-dircolors"
echo " Do or skip the dircolors installation in a non interactive mode"
}
validate_scheme() {
local profile=$1
in_array $scheme "${schemes[@]}" || die "$scheme is not a valid scheme" 2
}
set_profile_colors() {
local profile=$1
local scheme=$2
local scheme_dir=$dir/colors/$scheme
local bg_color_file=$scheme_dir/bg_color
local fg_color_file=$scheme_dir/fg_color
local bd_color_file=$scheme_dir/bd_color
if [ "$newGnome" = "1" ]
then local profile_path=$dconfdir/$profile
# set color palette
dconf write $profile_path/palette "$(to_dconf < $scheme_dir/palette)"
# set foreground, background and highlight color
dconf write $profile_path/bold-color "'$(cat $bd_color_file)'"
dconf write $profile_path/background-color "'$(cat $bg_color_file)'"
dconf write $profile_path/foreground-color "'$(cat $fg_color_file)'"
# make sure the profile is set to not use theme colors
dconf write $profile_path/use-theme-colors "false"
# set highlighted color to be different from foreground color
dconf write $profile_path/bold-color-same-as-fg "false"
else
local profile_path=$gconfdir/$profile
# set color palette
gconftool-2 -s -t string $profile_path/palette "$(to_gconf < $scheme_dir/palette)"
# set foreground, background and highlight color
gconftool-2 -s -t string $profile_path/bold_color $(cat $bd_color_file)
gconftool-2 -s -t string $profile_path/background_color \
$(cat $bg_color_file)
gconftool-2 -s -t string $profile_path/foreground_color \
$(cat $fg_color_file)
# make sure the profile is set to not use theme colors
gconftool-2 -s -t bool $profile_path/use_theme_colors false
# set highlighted color to be different from foreground color
gconftool-2 -s -t bool $profile_path/bold_color_same_as_fg false
fi
}
interactive_help() {
echo
echo -en "This script will ask you which color scheme you want, and which "
echo -en "Gnome Terminal profile to overwrite.\n"
echo
echo -en "Please note that there is no uninstall option yet. If you do not "
echo -en "wish to overwrite any of your profiles, you should create a new "
echo -en "profile before you run this script. However, you can reset your "
echo -en "colors to the Gnome default, by running:\n"
echo
echo " Gnome >= 3.8 dconf reset -f /org/gnome/terminal/legacy/profiles:/"
echo " Gnome < 3.8 gconftool-2 --recursive-unset /apps/gnome-terminal"
echo
echo -en "By default, it runs in the interactive mode, but it also can be "
echo -en "run non-interactively, just feed it with the necessary options, "
echo -en "see 'install.sh --help' for details.\n"
echo
}
interactive_select_scheme() {
echo "Please select a color scheme:"
select scheme
do
if [[ -z $scheme ]]
then
die "ERROR: Invalid selection -- ABORTING!" 2
fi
break
done
echo
}
interactive_confirm() {
local confirmation
echo "You have selected:"
echo
echo " Scheme: $scheme"
echo " Profile: $(get_profile_name $profile) ($profile)"
echo
echo "Are you sure you want to overwrite the selected profile?"
echo -n "(YES to continue) "
read confirmation
if [[ $(echo $confirmation | tr '[:lower:]' '[:upper:]') != YES ]]
then
die "ERROR: Confirmation failed -- ABORTING!"
fi
echo "Confirmation received -- applying settings"
}
while [ $# -gt 0 ]
do
case $1 in
-h | --help )
show_help
exit 0
;;
--scheme=* )
scheme=${1#*=}
;;
-s | --scheme )
scheme=$2
shift
;;
--profile=* )
profile=${1#*=}
;;
-p | --profile )
profile=$2
shift
;;
--install-dircolors )
install_dircolors=true
;;
--skip-dircolors )
install_dircolors=false
;;
esac
shift
done
if [[ -z "$scheme" ]] || [[ -z "$profile" ]]
then
interactive_help
fi
if [[ -n "$scheme" ]]
then validate_scheme $scheme
else
interactive_select_scheme "${schemes[@]}"
fi
if [[ -n "$profile" ]]
then if [ "$newGnome" = "1" ]
then profile="$(get_uuid "$profile")"
fi
validate_profile $profile
else
if [ "$newGnome" = "1" ]
then check_empty_profile
fi
interactive_select_profile "${profiles[@]}"
interactive_confirm
fi
set_profile_colors $profile $scheme
if [ -n "$install_dircolors" ]
then if "$install_dircolors"
then copy_dircolors
fi
else
check_dircolors || warning_message_dircolors
fi