i3 + termite + custom themes = <3
I love the sun – especially in Spring when temperatures are not too hot and taking a sunbath is a real pleasure. And I love working in the sun, which is often a challenge because of the poor contrast - especially if, like me, you like to use dark themes.
Since I recently changed to i3 as my window manager, I use termite as my default terminal which has by default no simple way to switch themes – at least not to my knowledge. But working in the sun requires a light theme, so I decided to work on a simple theme changer that is also integrated in i3.
So let's get to work.
First we need custom color themes. I have taken the two themes from this GitHub repository and put them in ~/.config/termite/themes
.
Of course you can also define custom themes and put them there. The theme files should have the following format:
[colors]
foreground = #000000
background = #ffffff
# and so on
Then copy your current ~/.config/termite/config
to ~/.config/termite/config.base
and remove the colors
section.
We will now need a way to append a theme file to the config.base
file. I've created a simple script that does this job:
#!/usr/bin/env bash
USAGE="$0 light|dark"
TERMITE_CONF_FOLDER=~/.config/termite
THEME=$1
change_theme() {
echo "# THIS FILE HAS BEEN AUTOGENERATED. DO NOT CHANGE MANUALLY!" | \
cat - /tmp/termite-switch-theme.hint $TERMITE_CONF_FOLDER/config.base $TERMITE_CONF_FOLDER/themes/$1 > $TERMITE_CONF_FOLDER/config
killall -USR1 termite || true
}
case $THEME in
light|solarized-light) change_theme solarized-light ;;
dark|solarized-dark) change_theme solarized-dark ;;
*) echo $USAGE ;;
esac
Put this script somewhere and make it executable. In my case I've saved the file in ~/.local/scripts/termite-switch-theme.sh
. You should be able to switch themes now by calling the script, e.g. ~/.local/scripts/termite-switch-theme.sh
light.
This is already great, but for a perfect integration with i3 put these lines into your ~/.config/i3/config
:
set $mode_term_theme Terminal theme (l) light, (d) dark
mode "$mode_term_theme" {
# choose which theme should be applied by pressing l (light) or d (dark)
bindsym l exec --no-startup-id "~/.local/scripts/termite-switch-theme.sh light", mode "default"
bindsym d exec --no-startup-id "~/.local/scripts/termite-switch-theme.sh dark", mode "default"
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+t mode "$mode_term_theme"
Finally reload the i3 config with mod+shift+c
. Now you can change themes with mod+t
and choose which theme should be applied (light or dark). All running terminals will immediately reflect your theme changes. Have fun!
# Base16 Themes
If you want to have even more themes to choose from take a look at the wonderful repository khamer/base16-termite. Those themes are working out-of-the-box just as described above.
# Acknowledgements
- Thanks to @BarbUk for helping me find the correct signal to send to running termite instances.
- Thanks to @nils-braun for reviewing this article.