dotfiles/.local/bin/dark-scheme-toggle

52 lines
1.5 KiB
Shell
Executable file

#!/bin/sh
# Triggered by <Super><Alt>d
# as defined in [org/gnome/settings-daemon/plugins/media-keys]
# in ~/.config/gnome-settings/key-bindings.ini
set -eu
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
Forge=org.gnome.shell.extensions.forge
Interface=org.gnome.desktop.interface
if [ "$(gsettings get $Interface color-scheme)" = "'prefer-dark'" ]; then
new_theme="light"
else
new_theme="dark"
fi
# Render and apply the palette for the target scheme before flipping,
# so that the visible switch happens in one step
"$HOME/.local/bin/color-palette" --write --scheme "$new_theme"
dconf load / < "$XDG_CONFIG_HOME/gnome-settings/local/palette.ini"
# Set the "color-scheme" explicitly here to be on the safe side
# (although it is also contained in the palette.ini file)
#
# See comments for "color-scheme" under [org/gnome/desktop/interface]
# in ~/.config/gnome-settings/misc.ini
gsettings set $Interface color-scheme "prefer-$new_theme"
# `forge` only re-reads its stylesheet on a restart;
# however, it takes about one second to do so
# gnome-extensions disable forge@jmmaranan.com
# gnome-extensions enable forge@jmmaranan.com
# As a hack, we make `forge` re-read its stylesheet by poking a watched setting
if gnome-extensions list --enabled 2>/dev/null | grep -qxF "forge@jmmaranan.com"; then
_gap=$(gsettings get $Forge window-gap-size | awk '{print $2}')
gsettings set $Forge window-gap-size "uint32 $((_gap + 1))"
gsettings set $Forge window-gap-size "uint32 $_gap"
fi
echo "Switched the color theme to $new_theme"