#!/usr/bin/env bash
#
# Script name: dtos-colorscheme
# Description: Change colorscheme in DTOS.
# Dependencies: dmenu, dmscripts
# GitLab: https://www.gitlab.com/dwt1/dtos
# License: https://www.gitlab.com/dwt1/dtos/LICENSE
# Contributors: Derek Taylor

# Set with the flags "-e", "-u","-o pipefail" cause the script to fail
# if certain things happen, which is a good thing.  Otherwise, we can
# get hidden bugs that are hard to discover.
set -euo pipefail

# shellcheck disable=SC1091
source "$HOME/.config/dmscripts/config"

options=("doom-one"
         "dracula"
         "gruvbox-dark"
         "monokai-pro"
         "nord"
         "oceanic-next"
         "palenight"
         "solarized-dark"
         "solarized-light"
         "tomorrow-night"
         "Quit this program")

main() {

    choice=$(printf '%s\n' "${options[@]}" | ${MENU} 'Choose color scheme:' "${@}")

    case "$choice" in
    'doom-one')

        ## ALACRITTY ##
        sed -i "s#^import = .*#import = [\"~/.config/alacritty/themes/themes/doom_one.toml\"]#" "$HOME"/.config/alacritty/alacritty.toml || echo "Error setting Alacritty colors"

        ## QTILE ##
        sed -i "s/^colors = colors.*/colors = colors.DoomOne/g" "$HOME"/.config/qtile/config.py || echo "Cannot find colors = colors."
        sed -i "s/^colors=colors.*/colors = colors.DoomOne/g" "$HOME"/.config/qtile/config.py  || echo "Cannot find colors=colors."
        sed -i "s/^COLORSCHEME=.*/COLORSCHEME=$choice/g" "$HOME"/.config/qtile/autostart.sh  || echo "Cannot find COLORSCHEME."
        qtile cmd-obj -o cmd -f restart && $HOME/.config/qtile/autostart.sh || echo "Qtile not running"

        ## CONKY ##
        sed -i "s#^myConky=.*#myConky=\"$HOME/.config/conky/qtile/01/$choice.conf\"#" "$HOME"/.local/bin/conky-toggle  || echo "Cannot change conky-toggle script."
        killall conky && conky -c $HOME/.config/conky/qtile/01/$choice.conf &

        ## EMACS ##
        sed -i "s/load-theme '.*/load-theme 'doom-one t)/g" "$HOME"/.config/emacs/config.org || echo "Cannot find config.org."
        emacsclient -e "(load-theme 'doom-one t)" || echo "Emacsclient not running."

        ## DUNST ##
        killall dunst
        dunst -conf "$HOME"/.config/dunst/"$choice"

        ;;
    'dracula')

        ## ALACRITTY ##
        sed -i "s#^import = .*#import = [\"~/.config/alacritty/themes/themes/dracula.toml\"]#" "$HOME"/.config/alacritty/alacritty.toml || echo "Error setting Alacritty colors"

        ## QTILE ##
        sed -i "s/^colors = colors.*/colors = colors.Dracula/g" "$HOME"/.config/qtile/config.py || echo "Cannot find colors = colors."
        sed -i "s/^colors=colors.*/colors = colors.Dracula/g" "$HOME"/.config/qtile/config.py  || echo "Cannot find colors=colors."
        sed -i "s/^COLORSCHEME=.*/COLORSCHEME=$choice/g" "$HOME"/.config/qtile/autostart.sh || echo "Cannot find COLORSCHEME."
        qtile cmd-obj -o cmd -f restart && $HOME/.config/qtile/autostart.sh || echo "Qtile not running"

        ## CONKY ##
        sed -i "s#^myConky=.*#myConky=\"$HOME/.config/conky/qtile/01/$choice.conf\"#" "$HOME"/.local/bin/conky-toggle  || echo "Cannot change conky-toggle script."
        killall conky && conky -c $HOME/.config/conky/qtile/01/$choice.conf &

        ## EMACS ##
        sed -i "s/load-theme '.*/load-theme 'doom-dracula t)/g" "$HOME"/.config/emacs/config.org || echo "Cannot find config.org."
        emacsclient -e "(load-theme 'doom-dracula t)" || echo "Emacsclient not running."

        ## DUNST ##
        killall dunst
        dunst -conf "$HOME"/.config/dunst/"$choice"

        ;;
     'gruvbox-dark')

        ## ALACRITTY ##
        sed -i "s#^import = .*#import = [\"~/.config/alacritty/themes/themes/gruvbox_dark.toml\"]#" "$HOME"/.config/alacritty/alacritty.toml || echo "Error setting Alacritty colors"

        ## QTILE ##
        sed -i "s/^colors = colors.*/colors = colors.GruvboxDark/g" "$HOME"/.config/qtile/config.py || echo "Cannot find colors = colors."
        sed -i "s/^colors=colors.*/colors = colors.GruvboxDark/g" "$HOME"/.config/qtile/config.py  || echo "Cannot find colors=colors."
        sed -i "s/^COLORSCHEME=.*/COLORSCHEME=$choice/g" "$HOME"/.config/qtile/autostart.sh || echo "Cannot find COLORSCHEME."
        qtile cmd-obj -o cmd -f restart && $HOME/.config/qtile/autostart.sh || echo "Qtile not running"

        ## CONKY ##
        sed -i "s#^myConky=.*#myConky=\"$HOME/.config/conky/qtile/01/$choice.conf\"#" "$HOME"/.local/bin/conky-toggle  || echo "Cannot change conky-toggle script."
        killall conky && conky -c $HOME/.config/conky/qtile/01/$choice.conf &

        ## EMACS ##
        sed -i "s/load-theme '.*/load-theme 'doom-gruvbox t)/g" "$HOME"/.config/emacs/config.org || echo "Cannot find config.org."
        emacsclient -e "(load-theme 'doom-gruvbox t)" || echo "Emacsclient not running."

        ## DUNST ##
        killall dunst
        dunst -conf "$HOME"/.config/dunst/"$choice"

        ;;
    'monokai-pro')

        ## ALACRITTY ##
        sed -i "s#^import = .*#import = [\"~/.config/alacritty/themes/themes/monokai_pro.toml\"]#" "$HOME"/.config/alacritty/alacritty.toml || echo "Error setting Alacritty colors"

        ## QTILE ##
        sed -i "s/^colors = colors.*/colors = colors.MonokaiPro/g" "$HOME"/.config/qtile/config.py || echo "Cannot find colors = colors."
        sed -i "s/^colors=colors.*/colors = colors.MonokaiPro/g" "$HOME"/.config/qtile/config.py  || echo "Cannot find colors=colors."
        sed -i "s/^COLORSCHEME=.*/COLORSCHEME=$choice/g" "$HOME"/.config/qtile/autostart.sh || echo "Cannot find COLORSCHEME."
        qtile cmd-obj -o cmd -f restart && $HOME/.config/qtile/autostart.sh || echo "Qtile not running"

        ## CONKY ##
        sed -i "s#^myConky=.*#myConky=\"$HOME/.config/conky/qtile/01/$choice.conf\"#" "$HOME"/.local/bin/conky-toggle  || echo "Cannot change conky-toggle script."
        killall conky && conky -c $HOME/.config/conky/qtile/01/$choice.conf &

        ## EMACS ##
        sed -i "s/load-theme '.*/load-theme 'doom-monokai-pro t)/g" "$HOME"/.config/emacs/config.org || echo "Cannot find config.org."
        emacsclient -e "(load-theme 'doom-monokai-pro t)" || echo "Emacsclient not running."

        ## DUNST ##
        killall dunst
        dunst -conf "$HOME"/.config/dunst/"$choice"

        ;;
    'nord')
 
        ## ALACRITTY ##
        sed -i "s#^import = .*#import = [\"~/.config/alacritty/themes/themes/nord.toml\"]#" "$HOME"/.config/alacritty/alacritty.toml || echo "Error setting Alacritty colors"

        ## QTILE ##
        sed -i "s/^colors = colors.*/colors = colors.Nord/g" "$HOME"/.config/qtile/config.py || echo "Cannot find colors = colors."
        sed -i "s/^colors=colors.*/colors = colors.Nord/g" "$HOME"/.config/qtile/config.py  || echo "Cannot find colors=colors."
        sed -i "s/^COLORSCHEME=.*/COLORSCHEME=$choice/g" "$HOME"/.config/qtile/autostart.sh || echo "Cannot find COLORSCHEME."
        qtile cmd-obj -o cmd -f restart && $HOME/.config/qtile/autostart.sh || echo "Qtile not running"

        ## CONKY ##
        sed -i "s#^myConky=.*#myConky=\"$HOME/.config/conky/qtile/01/$choice.conf\"#" "$HOME"/.local/bin/conky-toggle  || echo "Cannot change conky-toggle script."
        killall conky && conky -c $HOME/.config/conky/qtile/01/$choice.conf &

        ## EMACS ##
        sed -i "s/load-theme '.*/load-theme 'doom-nord t)/g" "$HOME"/.config/emacs/config.org || echo "Cannot find config.org."
        emacsclient -e "(load-theme 'doom-nord t)" || echo "Emacsclient not running."

        ## DUNST ##
        killall dunst
        dunst -conf "$HOME"/.config/dunst/"$choice"

        ;;
    'oceanic-next')

        ## ALACRITTY ##
        sed -i "s#^import = .*#import = [\"~/.config/alacritty/themes/themes/oceanic_next.toml\"]#" "$HOME"/.config/alacritty/alacritty.toml || echo "Error setting Alacritty colors"

        ## QTILE ##
        sed -i "s/^colors = colors.*/colors = colors.OceanicNext/g" "$HOME"/.config/qtile/config.py || echo "Cannot find colors = colors."
        sed -i "s/^colors=colors.*/colors = colors.OceanicNext/g" "$HOME"/.config/qtile/config.py  || echo "Cannot find colors=colors."
        sed -i "s/^COLORSCHEME=.*/COLORSCHEME=$choice/g" "$HOME"/.config/qtile/autostart.sh || echo "Cannot find COLORSCHEME."
        qtile cmd-obj -o cmd -f restart && $HOME/.config/qtile/autostart.sh || echo "Qtile not running"

        ## CONKY ##
        sed -i "s#^myConky=.*#myConky=\"$HOME/.config/conky/qtile/01/$choice.conf\"#" "$HOME"/.local/bin/conky-toggle  || echo "Cannot change conky-toggle script."
        killall conky && conky -c $HOME/.config/conky/qtile/01/$choice.conf &

        ## EMACS ##
        sed -i "s/load-theme '.*/load-theme 'doom-oceanic-next t)/g" "$HOME"/.config/emacs/config.org || echo "Cannot find config.org."
        emacsclient -e "(load-theme 'doom-oceanic-next t)" || echo "Emacsclient not running."

        ## DUNST ##
        killall dunst
        dunst -conf "$HOME"/.config/dunst/"$choice"

        ;;
    'palenight')

        ## ALACRITTY ##
        sed -i "s#^import = .*#import = [\"~/.config/alacritty/themes/themes/palenight.toml\"]#" "$HOME"/.config/alacritty/alacritty.toml || echo "Error setting Alacritty colors"

        ## QTILE ##
        sed -i "s/^colors = colors.*/colors = colors.Palenight/g" "$HOME"/.config/qtile/config.py || echo "Cannot find colors = colors."
        sed -i "s/^colors=colors.*/colors = colors.Palenight/g" "$HOME"/.config/qtile/config.py  || echo "Cannot find colors=colors."
        sed -i "s/^COLORSCHEME=.*/COLORSCHEME=$choice/g" "$HOME"/.config/qtile/autostart.sh || echo "Cannot find COLORSCHEME."
        qtile cmd-obj -o cmd -f restart && $HOME/.config/qtile/autostart.sh || echo "Qtile not running"

        ## CONKY ##
        sed -i "s#^myConky=.*#myConky=\"$HOME/.config/conky/qtile/01/$choice.conf\"#" "$HOME"/.local/bin/conky-toggle  || echo "Cannot change conky-toggle script."
        killall conky && conky -c $HOME/.config/conky/qtile/01/$choice.conf &

        ## EMACS ##
        sed -i "s/load-theme '.*/load-theme 'doom-palenight t)/g" "$HOME"/.config/emacs/config.org || echo "Cannot find config.org."
        emacsclient -e "(load-theme 'doom-palenight t)" || echo "Emacsclient not running."

        ## DUNST ##
        killall dunst
        dunst -conf "$HOME"/.config/dunst/"$choice"

        ;;
    'solarized-dark')

        ## ALACRITTY ##
        sed -i "s#^import = .*#import = [\"~/.config/alacritty/themes/themes/solarized_dark.toml\"]#" "$HOME"/.config/alacritty/alacritty.toml || echo "Error setting Alacritty colors"

        ## QTILE ##
        sed -i "s/^colors = colors.*/colors = colors.SolarizedDark/g" "$HOME"/.config/qtile/config.py || echo "Cannot find colors = colors."
        sed -i "s/^colors=colors.*/colors = colors.SolarizedDark/g" "$HOME"/.config/qtile/config.py  || echo "Cannot find colors=colors."
        sed -i "s/^COLORSCHEME=.*/COLORSCHEME=$choice/g" "$HOME"/.config/qtile/autostart.sh || echo "Cannot find COLORSCHEME."
        qtile cmd-obj -o cmd -f restart && $HOME/.config/qtile/autostart.sh || echo "Qtile not running"

        ## CONKY ##
        sed -i "s#^myConky=.*#myConky=\"$HOME/.config/conky/qtile/01/$choice.conf\"#" "$HOME"/.local/bin/conky-toggle  || echo "Cannot change conky-toggle script."
        killall conky && conky -c $HOME/.config/conky/qtile/01/$choice.conf &

        ## EMACS ##
        sed -i "s/load-theme '.*/load-theme 'doom-solarized-dark t)/g" "$HOME"/.config/emacs/config.org || echo "Cannot find config.org."
        emacsclient -e "(load-theme 'doom-solarized-dark t)" || echo "Emacsclient not running."

        ## DUNST ##
        killall dunst
        dunst -conf "$HOME"/.config/dunst/"$choice"

        ;;
    'solarized-light')

        ## ALACRITTY ##
        sed -i "s#^import = .*#import = [\"~/.config/alacritty/themes/themes/solarized_light.toml\"]#" "$HOME"/.config/alacritty/alacritty.toml || echo "Error setting Alacritty colors"

        ## QTILE ##
        sed -i "s/^colors = colors.*/colors = colors.SolarizedLight/g" "$HOME"/.config/qtile/config.py || echo "Cannot find colors = colors."
        sed -i "s/^colors=colors.*/colors = colors.SolarizedLight/g" "$HOME"/.config/qtile/config.py  || echo "Cannot find colors=colors."
        sed -i "s/^COLORSCHEME=.*/COLORSCHEME=$choice/g" "$HOME"/.config/qtile/autostart.sh || echo "Cannot find COLORSCHEME."
        qtile cmd-obj -o cmd -f restart && $HOME/.config/qtile/autostart.sh || echo "Qtile not running"

        ## CONKY ##
        sed -i "s#^myConky=.*#myConky=\"$HOME/.config/conky/qtile/01/$choice.conf\"#" "$HOME"/.local/bin/conky-toggle  || echo "Cannot change conky-toggle script."
        killall conky && conky -c $HOME/.config/conky/qtile/01/$choice.conf &

        ## EMACS ##
        sed -i "s/load-theme '.*/load-theme 'doom-solarized-light t)/g" "$HOME"/.config/emacs/config.org || echo "Cannot find config.org."
        emacsclient -e "(load-theme 'doom-solarized-light t)" || echo "Emacsclient not running."

        ## DUNST ##
        killall dunst
        dunst -conf "$HOME"/.config/dunst/"$choice"

        ;;
    'tomorrow-night')

        ## ALACRITTY ##
        sed -i "s#^import = .*#import = [\"~/.config/alacritty/themes/themes/tomorrow_night.toml\"]#" "$HOME"/.config/alacritty/alacritty.toml || echo "Error setting Alacritty colors"

        ## QTILE ##
        sed -i "s/^colors = colors.*/colors = colors.TomorrowNight/g" "$HOME"/.config/qtile/config.py || echo "Cannot find colors = colors."
        sed -i "s/^colors=colors.*/colors = colors.TomorrowNight/g" "$HOME"/.config/qtile/config.py  || echo "Cannot find colors=colors."
        sed -i "s/^COLORSCHEME=.*/COLORSCHEME=$choice/g" "$HOME"/.config/qtile/autostart.sh || echo "Cannot find COLORSCHEME."
        qtile cmd-obj -o cmd -f restart && $HOME/.config/qtile/autostart.sh || echo "Qtile not running"

        ## CONKY ##
        sed -i "s#^myConky=.*#myConky=\"$HOME/.config/conky/qtile/01/$choice.conf\"#" "$HOME"/.local/bin/conky-toggle  || echo "Cannot change conky-toggle script."
        killall conky && conky -c $HOME/.config/conky/qtile/01/$choice.conf &

        ## EMACS ##
        sed -i "s/load-theme '.*/load-theme 'doom-tomorrow-night t)/g" "$HOME"/.config/emacs/config.org || echo "Cannot find config.org."
        emacsclient -e "(load-theme 'doom-tomorrow-night t)" || echo "Emacsclient not running."
 
        ## DUNST ##
        killall dunst
        dunst -conf "$HOME"/.config/dunst/"$choice"

        ;;
    'Quit this program')
        echo "Program terminated." && exit 0
        ;;
    *)
        exit 0
        ;;
    esac
}

no_opt=1
# If script is run with '-d', it will use 'dmenu'
# If script is run with '-f', it will use 'fzf'
# If script is run with '-d', it will use 'rofi'
while getopts "dfrh" arg 2>/dev/null; do
    case "${arg}" in
    d) # shellcheck disable=SC2153
        MENU=${DMENU}
        [[ "${BASH_SOURCE[0]}" == "${0}" ]] && main
        ;;
    f) # shellcheck disable=SC2153
        MENU=${FMENU}
        [[ "${BASH_SOURCE[0]}" == "${0}" ]] && main
        ;;
    r) # shellcheck disable=SC2153
        MENU=${RMENU}
        [[ "${BASH_SOURCE[0]}" == "${0}" ]] && main
        ;;
    h) help ;;
    *) printf '%s\n' "Error: invalid option" "Type $(basename "$0") -h for help" ;;
    esac
    no_opt=0
done

# If script is run with NO argument, it will use 'dmenu'
[ $no_opt = 1 ] && MENU=${DMENU} && [[ "${BASH_SOURCE[0]}" == "${0}" ]] && main "$@"
