81 lines
2 KiB
Bash
81 lines
2 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
# Toggle light- or dark-mode for your applications
|
||
|
# Usage: toggle [-m light|dark]
|
||
|
|
||
|
#################
|
||
|
### Variables ###
|
||
|
#################
|
||
|
|
||
|
THEME_LIGHT='tdpeuter-light'
|
||
|
THEME_DARK='tdpeuter-dark'
|
||
|
THEME_DEFAULT="${THEME_LIGHT}"
|
||
|
|
||
|
STATE_FILE="${HOME}/.local/state/sisyphus/theme"
|
||
|
|
||
|
declare -A theme_next
|
||
|
theme_next[${THEME_LIGHT}]="${THEME_DARK}"
|
||
|
theme_next[${THEME_DARK}]="${THEME_LIGHT}"
|
||
|
|
||
|
declare -A gsettings_alt
|
||
|
gsettings_alt[${THEME_LIGHT}]='default'
|
||
|
gsettings_alt[${THEME_DARK}]='prefer-dark'
|
||
|
|
||
|
#############
|
||
|
### Logic ###
|
||
|
#############
|
||
|
|
||
|
# Parse options
|
||
|
while getopts ":m:" option; do
|
||
|
case "${option}" in
|
||
|
m)
|
||
|
if [ "${OPTARG}" == 'light' ]; then
|
||
|
theme="${THEME_LIGHT}"
|
||
|
elif [ "${OPTARG}" == 'dark' ]; then
|
||
|
theme="${THEME_DARK}"
|
||
|
else
|
||
|
>&2 printf "Error: Invalid mode: '%s'.\nShould be either 'light' or 'dark'\n" "${option}"
|
||
|
exit 1
|
||
|
fi
|
||
|
;;
|
||
|
*)
|
||
|
>&2 printf "Error: Invalid option: '%s'.\n" "${option}"
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
shift $(( OPTIND - 1 ))
|
||
|
|
||
|
# Check if the state file exists
|
||
|
if ! [ -d "$(dirname ${STATE_FILE})" ]; then
|
||
|
mkdir -p "$(dirname ${STATE_FILE})"
|
||
|
fi
|
||
|
|
||
|
# Choose next theme
|
||
|
previous_theme="$(cat ${STATE_FILE})"
|
||
|
if ! [[ -z "${previous_theme}" || "${theme}" ]]; then
|
||
|
theme="${theme_next[${previous_theme}]}"
|
||
|
fi
|
||
|
echo "${theme:=${THEME_DEFAULT}}" > "${STATE_FILE}"
|
||
|
|
||
|
######################
|
||
|
### Set all themes ###
|
||
|
######################
|
||
|
|
||
|
# GNOME
|
||
|
if [ "$(command -v gsettings)" ]; then
|
||
|
gsettings set org.gnome.desktop.interface color-scheme "${gsettings_alt[${theme}]}"
|
||
|
fi
|
||
|
|
||
|
# Kitty
|
||
|
if [ "$(command -v kitty)" ]; then
|
||
|
kitten themes --config-file-name theme.conf "${theme}"
|
||
|
fi
|
||
|
|
||
|
# Vim
|
||
|
# This does not reload the config, but will use it when you restart vim
|
||
|
# Toggle an existing window using `:colorscheme ${theme}`
|
||
|
if [ "$(command -v vim)" ]; then
|
||
|
echo "colorscheme ${theme}" > ~/.vim/theme.conf
|
||
|
fi
|
||
|
|