Add themeswitch script
This commit is contained in:
		
							parent
							
								
									1e3d2c12f9
								
							
						
					
					
						commit
						3af19028ce
					
				
					 3 changed files with 93 additions and 13 deletions
				
			
		
							
								
								
									
										80
									
								
								scripts/toggle-light-dark.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										80
									
								
								scripts/toggle-light-dark.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,80 @@ | |||
| #!/usr/bin/env bash | ||||
| # Toggle light- or dark-mode for your applications | ||||
| # Usage: toggle [-m light|dark] | ||||
| 
 | ||||
| ################# | ||||
| ### Variables ### | ||||
| ################# | ||||
| 
 | ||||
| THEME_LIGHT='tdpeuter-light' | ||||
| THEME_DARK='tdpeuter-dark' | ||||
| THEME_DEFAULT="${THEME_LIGHT}" | ||||
| 
 | ||||
| STATE_FILE="${HOME}/.local/state/sisyphus/theme" | ||||
| 
 | ||||
| declare -A theme_next | ||||
| theme_next[${THEME_LIGHT}]="${THEME_DARK}" | ||||
| theme_next[${THEME_DARK}]="${THEME_LIGHT}" | ||||
| 
 | ||||
| declare -A gsettings_alt | ||||
| gsettings_alt[${THEME_LIGHT}]='default' | ||||
| gsettings_alt[${THEME_DARK}]='prefer-dark' | ||||
| 
 | ||||
| ############# | ||||
| ### Logic ### | ||||
| ############# | ||||
| 
 | ||||
| # Parse options | ||||
| while getopts ":m:" option; do | ||||
|     case "${option}" in | ||||
|         m) | ||||
|             if [ "${OPTARG}" == 'light' ]; then | ||||
|                 theme="${THEME_LIGHT}" | ||||
|             elif [ "${OPTARG}" == 'dark' ]; then | ||||
|                 theme="${THEME_DARK}" | ||||
|             else | ||||
|                 >&2 printf "Error: Invalid mode: '%s'.\nShould be either 'light' or 'dark'\n" "${option}" | ||||
|                 exit 1 | ||||
|             fi | ||||
|             ;; | ||||
|         *) | ||||
|             >&2 printf "Error: Invalid option: '%s'.\n" "${option}" | ||||
|             exit 1 | ||||
|             ;; | ||||
|     esac | ||||
| done | ||||
| shift $(( OPTIND - 1 )) | ||||
| 
 | ||||
| # Check if the state file exists | ||||
| if ! [ -d "$(dirname ${STATE_FILE})" ]; then | ||||
|     mkdir -p "$(dirname ${STATE_FILE})" | ||||
| fi | ||||
| 
 | ||||
| # Choose next theme | ||||
| previous_theme="$(cat ${STATE_FILE})" | ||||
| if ! [[ -z "${previous_theme}" || "${theme}" ]]; then | ||||
|     theme="${theme_next[${previous_theme}]}" | ||||
| fi | ||||
| echo "${theme:=${THEME_DEFAULT}}" > "${STATE_FILE}" | ||||
| 
 | ||||
| ###################### | ||||
| ### Set all themes ### | ||||
| ###################### | ||||
| 
 | ||||
| # GNOME | ||||
| if [ "$(command -v gsettings)" ]; then | ||||
|     gsettings set org.gnome.desktop.interface color-scheme "${gsettings_alt[${theme}]}" | ||||
| fi | ||||
| 
 | ||||
| # Kitty | ||||
| if [ "$(command -v kitty)" ]; then | ||||
|     kitten themes --config-file-name theme.conf "${theme}" | ||||
| fi | ||||
| 
 | ||||
| # Vim | ||||
| # This does not reload the config, but will use it when you restart vim | ||||
| # Toggle an existing window using `:colorscheme ${theme}` | ||||
| if [ "$(command -v vim)" ]; then | ||||
|     echo "colorscheme ${theme}" > ~/.vim/theme.conf | ||||
| fi | ||||
| 
 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue