Title: Change Between Light and Dark Themes in tmux Tags: tmux
How to toggle between light-background and dark-background themes in tmux.
tmux's `window-style` setting changes the default foreground and background colours for windows, and you can use it to toggle your terminal between light-on-dark and dark-on-light themes: ```console $ # Change the current window (all panes) to light background. $ tmux set window-style 'fg=#171421,bg=#ffffff' $ # Change back to dark background. $ tmux set window-style 'fg=#d0cfcc,bg=#171421' ``` Here's a shell script to toggle between light and dark: ```sh #!/usr/bin/env sh # # Toggle the current window (all panes) between light and dark themes. set -e default_window_style='fg=#d0cfcc,bg=#171421' alternate_window_style='fg=#171421,bg=#ffffff' current_window_style=$(tmux show -Av window-style) case $current_window_style in $default_window_style|'default') # Change to the alternate window style. tmux set window-style $alternate_window_style ;; *) # Change back to the default window style. tmux set window-style $default_window_style ;; esac ``` Save this script as `~/.tmux/bin/toggle-theme` and mark it executable (`chmod u+x ~/.tmux/bin/toggle-theme`) and you can toggle between dark and light mode with a single command: ```console $ ~/.tmux/bin/toggle-theme ``` You can bind a keyboard shortcut to toggle the theme. For example add this to your `~/.tmux.conf` file: ``` bind T run-shell ~/.tmux/bin/toggle-theme ``` Reload the file: ```console $ tmux source ~/.tmux.conf ``` Now Ctrl + b Shift + t toggles between light and dark mode. You might want to add more lines to the script to change other options like `pane-border-style` and `pane-active-border-style` (the colours of the pane borders) between light and dark mode. See [the full version of the script](https://github.com/seanh/tmux/blob/master/bin/toggle-theme) in my tmux config for an example. The script changes the default foreground and background colours of the **current window** (all panes). You'll want your status line colours to be ones that work well against either a dark or a light background, since the same session might contain both light and dark windows at the same time. I'm using these (in my `~/.tmux.conf`): ``` set -g status-style 'fg=#d0cfcc,bg=#171421' set -g window-status-current-style 'bg=default,reverse' ``` You can also use `-g` to change the colours of all windows across all sessions or `-p` to change the colours of the current pane only: ```console $ # Change the colours of all windows across all sessions. $ tmux set -g window-style 'fg=#171421,bg=#ffffff' $ # Change the colours of the current pane only. $ tmux set -p window-style 'fg=#171421,bg=#ffffff' ``` There's also a `window-active-style` setting that you can use to highlight the active pane by giving it a different background colour than the other panes. This all requires your terminal emulator to have a colour palette that works on either a light or a dark background. I'm using the default colour palette from GNOME Terminal (as of GNOME 3.38):Palette entry 0 | #171421 |
Palette entry 1 | #C01C28 |
Palette entry 2 | #26A269 |
Palette entry 3 | #A2734C |
Palette entry 4 | #12488B |
Palette entry 5 | #A347BA |
Palette entry 6 | #2AA1B3 |
Palette entry 7 | #D0CFCC |
Palette entry 8 | #5E5C64 |
Palette entry 9 | #F66151 |
Palette entry 10 | #33DA7A |
Palette entry 11 | #E9AD0C |
Palette entry 12 | #2A7BDE |
Palette entry 13 | #C061CB |
Palette entry 14 | #33C7DE |
Palette entry 15 | #FFFFFF |
Cursor and highlight background | #D0CFCC |
Cursor and highlight foreground | #171421 |
#D0CFCC on #171421
and light mode is
#171421 on #FFFFFF
.