.dotfiles/configs/waybar/scripts/set-theme
2022-05-13 19:19:05 +02:00

216 lines
6.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# https://gitlab.com/wef/dotfiles/-/blob/master/bin/dark-mode
TIME_STAMP="20220227.144601"
# dark-mode [light|dark|refresh]
# sets dark mode on or off
# Copyright (C) 2021 Bob Hepple < bob dot hepple at gmail dot com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# I like to have this called by my
# ~/.config/i3blocks/i3blocks/weather script which runs every 10m and
# knows about sunset and sunrise times.
PROG=$( basename $0 )
KITTY_ONLY=""
[[ "$1" == "--kitty-only" ]] && {
KITTY_ONLY="true"
shift
}
CMD="$1"
DARK_MODE_STATUS_FILE=~/.cache/dark-mode
CURRENT_DARK_MODE=$( cat $DARK_MODE_STATUS_FILE )
case $CMD in
-h|--help)
echo "Usage: $PROG <[on|start|dark]|refresh|[off|stop|light]>"
echo
echo "toggles or refreshes dark-mode for emacs, kitty, gtk and qt"
exit 0
;;
on|start|dark)
CMD="dark"
;;
re*)
CMD="refresh"
;;
*) # off|stop|light
CMD="light"
;;
esac
if [[ "$CMD" == "refresh" ]]; then
CMD="$CURRENT_DARK_MODE"
else
[[ "$CURRENT_DARK_MODE" == "$CMD" ]] && exit 0
fi
# for emacs, these themes can be chosen from the standard ones (in
# custom-theme-load-path) or they can be installed in
# custom-theme-directory (usually ~/.emacs.d)
# They must have a filename of $THEMENAME-theme.el
case "$CMD" in
light)
# light mode
# new_emacs_theme="dichromacy-bh"
# new_emacs_theme="modus-operandi"
#new_emacs_theme="Adwaita" # text background is #ededed !!!
#new_emacs_theme="solarized-light"
# new_emacs_modeline_theme="smart-mode-line-light"
# new_gtk_theme='WhiteSur'
new_gtk_theme='Pop'
#new_gtk_theme='Solarized-Light'
#new_gtk_theme='Crux'
new_icon_theme='WhiteSur'
new_cursor_theme='WhiteSur-cursors'
# new_kitty_theme="$HOME/.config/kitty/Adwaita.conf"
# new_nvim_theme="dayfox"
new_kitty_theme="Atom One Light"
# new_fg='black'
# new_fg='00/00/00'
# new_bg='white'
# new_bg='ff/ff/ff'
BRIGHTNESS=100
TERM_BACKGROUND=light
;;
*)
# dark mode
# new_emacs_theme="dichromacy-dark-bh"
# new_emacs_theme="modus-vivendi"
# new_emacs_theme="manoj-dark-bh"
# new_emacs_theme="solarized-dark"
# new_emacs_modeline_theme="smart-mode-line-dark"
new_gtk_theme='Pop-dark'
#new_gtk_theme='Solarized-Dark'
#new_gtk_theme='Crux-dark'
# 'Breeze' icons are too dark for Adwaita-dark:
new_icon_theme='WhiteSur-dark'
new_cursor_theme='WhiteSur-cursors'
#new_kitty_theme="$HOME/.config/kitty/Adwaita-dark.conf"
new_kitty_theme="Argonaut"
# new_nvim_theme="nightfox"
# new_fg='white'
# new_fg='ff/ff/ff'
# new_bg='#232729'
# new_bg='black'
# new_bg='00/00/00'
BRIGHTNESS=20
TERM_BACKGROUND=dark
;;
esac
(
[[ -z "$KITTY_ONLY" ]] && {
# brightnessctl set $BRIGHTNESS
## look for an emacs running as this user:
#emacs_pid=$(pgrep -u $USER emacs | head -n 1)
#[[ "$emacs_pid" ]] && emacsclient --eval "
# (progn
# (mapcar 'disable-theme custom-enabled-themes)
# (load-theme '$new_emacs_theme t))"
##(load-theme '$new_emacs_modeline_theme))"
f=~/.gtkrc-2.0
[[ -w $f ]] && {
sed -i "s/^gtk-theme-name=.*/gtk-theme-name=\"$new_gtk_theme\"/" $f
sed -i "s/^gtk-icon-theme-name=.*/gtk-icon-theme-name=\"$new_icon_theme\"/" $f
sed -i "s/^gtk-cursor-theme-name=.*/gtk-cursor-theme-name=\"$new_cursor_theme\"/" $f
}
# gtkreload # gtk2 only!
# if ! command -v nvr &> /dev/null
# then
# echo "nvr not installed"
# elif [ "$(pgrep nvim)" != "" ]; then
# echo "new theme $new_nvim_theme"
# nvr --nostart --remote-send ":colorscheme $new_nvim_theme<CR>"
# exit
# fi
f=~/.config/gtk-3.0/settings.ini
[[ -w $f ]] && {
sed -i "s/^gtk-theme-name=.*/gtk-theme-name=$new_gtk_theme/" $f
sed -i "s/^gtk-icon-theme-name=.*/gtk-icon-theme-name=$new_icon_theme/" $f
sed -i "s/^gtk-cursor-theme-name=.*/gtk-cursor-theme-name=$new_cursor_theme/" $f
}
# /usr/libexec/gsd-xsettings notifies gtk3 clients - start it in sway
# these two appear to be completely equivalent:
dconf write /org/gnome/desktop/interface/gtk-theme "'$new_gtk_theme'"
gsettings set org.gnome.desktop.interface gtk-theme $new_gtk_theme
dconf write /org/gnome/desktop/interface/icon-theme "'$new_icon_theme'"
dconf write /org/gnome/desktop/interface/cursor-theme "'$new_cursor_theme'"
f=~/.config/qt5ct/qt5ct.conf
[[ -w $f ]] && {
sed -i "s/^style=.*/style=$new_gtk_theme/" $f
sed -i "s/^icon-theme=.*/style=$new_icon_theme/" $f
# cursor?
}
}
# requires this in ~/.config/kitty/kitty.conf:
# allow_remote_control yes
# listen_on unix:/tmp/kitty-socket
kitty +kitten themes --reload-in=all $new_kitty_theme
# for SOCK in /tmp/kitty-socket-*; do
# if [[ -r $new_kitty_theme ]]; then
# else
# # this should work for all terms:
# for TERM in /dev/pts/[0-9]*; do
# if [[ -O $TERM ]]; then
# {
# printf "\\033]10;rgb:$new_fg\\033\\\\"
# printf "\\033]11;rgb:$new_bg\\033\\\\"
# } >$TERM
# fi
# done
# # kitty @ --to=unix:$SOCK set_colors --all foreground=$new_fg background=$new_bg
# fi
# done
# for 'low-power' script:
echo $TERM_BACKGROUND > $DARK_MODE_STATUS_FILE
) >/dev/null
# echo "TERM_BACKGROUND=$TERM_BACKGROUND; setup_prompt"
# Local Variables:
# mode: shell-script
# time-stamp-pattern: "4/TIME_STAMP=\"%:y%02m%02d.%02H%02M%02S\""
# eval: (add-hook 'before-save-hook 'time-stamp)
# End: