#!/bin/sh # Triggered by 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"