From dce8fe36eb7f550f648cb83ab890ce638ca819d0 Mon Sep 17 00:00:00 2001 From: lonkaars Date: Fri, 8 Mar 2024 18:29:41 +0100 Subject: clean up + modularize `mode` source code --- .local/share/bin/mode | 342 ++++---------------------------------------------- 1 file changed, 25 insertions(+), 317 deletions(-) (limited to '.local/share') diff --git a/.local/share/bin/mode b/.local/share/bin/mode index 1662525..6589b32 100755 --- a/.local/share/bin/mode +++ b/.local/share/bin/mode @@ -30,13 +30,12 @@ examples: EOF } - get_color() { xrdb -get "$1" | tr -d '\n'; } hex_to_rgb_array() { pastel format rgb "$1" | cut -c4- | tr '()' '[]' ; } mix_rgb() { pastel mix --colorspace=RGB --fraction="$3" "$1" "$2" | pastel format hex ; } switch_xrdb() { - xrdb -override "$XDG_CONFIG_HOME/X11/$1" + xrdb -override "$XDG_CONFIG_HOME/X11/$mode" bg="$(get_color background)" fg="$(get_color foreground)" color0="$(get_color color0)" @@ -55,336 +54,38 @@ switch_xrdb() { color13="$(get_color color13)" color14="$(get_color color14)" color15="$(get_color color15)" - [ "$1" == "light" ] && { + [ "$mode" == "light" ] && { accent="$color15" accent_text="$color0" } - [ "$1" == "dark" ] && { + [ "$mode" == "dark" ] && { accent="$(mix_rgb $bg $color0 0.5)" accent_text="$fg" } } -switch_dunst() { - cat "$XDG_CONFIG_HOME/dunst/base" - << EOF > "$XDG_CONFIG_HOME/dunst/dunstrc" -frame_color = "$color0" - -[urgency_low] -background = "$bg" -foreground = "$fg" -timeout = 10 - -[urgency_normal] -background = "$bg" -foreground = "$fg" -timeout = 10 - -[urgency_critical] -background = "$color1" -foreground = "$bg" -frame_color = "$color1" -timeout = 0 -EOF -} - -switch_zathura() { - cat << EOF > "$XDG_CONFIG_HOME/zathura/colors" -set default-bg "$bg" -set statusbar-bg "$bg" -set inputbar-bg "$bg" -set completion-highlight-fg "$bg" -set completion-bg "$bg" -set notification-error-fg "$bg" -set notification-warning-fg "$bg" -set notification-fg "$bg" -set recolor-lightcolor "$bg" - -set default-fg "$fg" -set inputbar-fg "$fg" -set completion-fg "$fg" -set statusbar-fg "$fg" -set recolor-darkcolor "$fg" - -set notification-error-bg "$color9" -set notification-warning-bg "$color9" -set completion-highlight-bg "$color9" -set highlight-color "$color9" - -set highlight-active-color "$color13" -set notification-bg "$color13" -EOF -} - -switch_gtk() { - GTK_3_SETTINGS_INI="$XDG_CONFIG_HOME/gtk-3.0/settings.ini" - GTK_4_SETTINGS_ENV="$XDG_CONFIG_HOME/gtk-4.0/env" - if [ $1 = "light" ]; then - sed 's/^\(export\s\+GTK_THEME=.\+\)-Dark\(.*\)$/\1-Light\2/g' -i "$GTK_4_SETTINGS_ENV" - sed "s/-Dark/-Light/" -i "$GTK_3_SETTINGS_INI" - sed "s/gtk-application-prefer-dark-theme.*/gtk-application-prefer-dark-theme=false/" -i "$GTK_3_SETTINGS_INI" - else - sed 's/^\(export\s\+GTK_THEME=.\+\)-Light\(.*\)$/\1-Dark\2/g' -i "$GTK_4_SETTINGS_ENV" - sed "s/-Light/-Dark/" -i "$GTK_3_SETTINGS_INI" - sed "s/gtk-application-prefer-dark-theme.*/gtk-application-prefer-dark-theme=true/" -i "$GTK_3_SETTINGS_INI" - fi - grep gtk-theme-name "$GTK_3_SETTINGS_INI" | cut -f2 -d= | xargs xfconf-query -c xsettings -p /Net/ThemeName -s -} - -switch_fcitx5() { - cat "$XDG_DATA_HOME/fcitx5/themes/loek/base.conf" - << EOF > "$XDG_DATA_HOME/fcitx5/themes/loek/theme.conf" -[InputPanel] -NormalColor=$fg -HighlightCandidateColor=$accent_text -HighlightColor=$color13 -HighlightBackgroundColor=$bg - -[InputPanel/Background] -Color=$bg -BorderColor=$accent - -[InputPanel/Highlight] -Color=$accent - -[Menu/Background] -Color=$bg - -[Menu] -NormalColor=$fg - -[Menu/Highlight] -Color=$accent - -[Menu/Separator] -Color=$color7 -EOF -} - -switch_chrome() ( - cd ~/.cache/wal/chromium - rm -f 'Cached Theme.pak' 'bg.png' 'manifest.json' - convert -size 100x100 "xc:$bg" bg.png - bg_alt=$(mix_rgb $color7 $bg 0.20) - fg_alt=$(mix_rgb $color15 $fg 0.60) - bg="$(hex_to_rgb_array "$bg")" - fg="$(hex_to_rgb_array "$fg")" - bg_alt="$(hex_to_rgb_array "$bg_alt")" - fg_alt="$(hex_to_rgb_array "$fg_alt")" - cat << EOF > manifest.json -{ - "description": "colorscheme generated by mode", - "manifest_version": 2, - "name": "mode theme", - "theme": { - "images": { "theme_frame": "bg.png" }, - "colors": { - "frame": $bg, - "button_background": $fg, - "ntp_background": $bg, - "ntp_text": $bg, - "toolbar": $bg_alt, - "toolbar_button_icon": $fg, - "tab_background_text": $fg_alt, - "tab_background_text_inactive": $fg_alt, - "tab_background_text_incognito": $fg_alt, - "tab_background_text_incognito_inactive": $fg_alt, - "bookmark_text": $fg, - "tab_text": $fg - }, - "tints": { - "buttons": [ -1, -1, -1 ], - "frame_inactive": [ -1, -1, -1 ], - "frame_incognito": [ -1, -1, -1 ], - "frame_incognito_inactive": [ -1, -1, -1 ] - } - }, - "version": "2" -} -EOF -) - -switch_polybar() { - cat << EOF > "$XDG_CONFIG_HOME/polybar/colors.ini" -[color] -bg = \${xrdb:background:$bg} -fg = \${xrdb:foreground:$fg} -fg-alt = \${xrdb:background:$bg} -fg-half = \${xrdb:color8:$color8} - -alpha = #00000000 - -; vim:ft=dosini -EOF -} - -switch_vim_lightline() { - cat - "$XDG_CONFIG_HOME/nvim/lightline-base.vim" << EOF > "$XDG_CONFIG_HOME/nvim/lightline.vim" -let s:bg = [ '$bg', 'NONE' ] -let s:fg = [ '$fg', 'NONE' ] -let s:mode = [ '$color0', 'NONE' ] -let s:faint = [ '$color8', 'NONE' ] -let s:none = [ 'NONE', 'NONE' ] -let s:test = [ '#ff00ff', 'NONE' ] -EOF -} - -switch_vim_terminal() { - cat << EOF > "$XDG_CONFIG_HOME/nvim/termcolors.vim" -let g:terminal_color_0 = '$color0' -let g:terminal_color_1 = '$color1' -let g:terminal_color_2 = '$color2' -let g:terminal_color_3 = '$color3' -let g:terminal_color_4 = '$color4' -let g:terminal_color_5 = '$color5' -let g:terminal_color_6 = '$color6' -let g:terminal_color_7 = '$color7' -let g:terminal_color_8 = '$color8' -let g:terminal_color_9 = '$color9' -let g:terminal_color_10 = '$color10' -let g:terminal_color_11 = '$color11' -let g:terminal_color_12 = '$color12' -let g:terminal_color_13 = '$color13' -let g:terminal_color_14 = '$color14' -let g:terminal_color_15 = '$color15' -EOF -} - -switch_discord() { - cat << EOF > "$XDG_CONFIG_HOME/BetterDiscord/themes/mode.theme.css" -/** - * @name mode - * @author mode - * @version 0 -*/ - -/* AUTOMATICALLY GENERATED, DO NOT EDIT */ - -.theme-dark, .theme-light { - --background-primary: $bg; - --background-secondary: $bg; - --background-secondary-alt: $bg; - --text-primary: $fg; - --text-secondary: $color15; - --accent: $color4; - --accent-alt: $color12; - --error: $color1; - --error-alt: $color9; -} - -.theme-dark { - --background-tertiary: $(mix_rgb $bg '#000000' 0.7); -} - -.theme-light { - --background-tertiary: $bg; -} -EOF -} - -reload_terms() { - escape_msgs="$(cat << EOF | tr -d '\n' -\033]11;$bg\007 -\033]10;$fg\007 -\033]12;$fg\007 -\033]14;$bg\007 -\033]13;$fg\007 -\033]17;$color8\007 -\033]708;$bg\007 -\033]4;0;$color0\007 -\033]4;1;$color1\007 -\033]4;2;$color2\007 -\033]4;3;$color3\007 -\033]4;4;$color4\007 -\033]4;5;$color5\007 -\033]4;6;$color6\007 -\033]4;7;$color7\007 -\033]4;8;$color8\007 -\033]4;9;$color9\007 -\033]4;10;$color10\007 -\033]4;11;$color11\007 -\033]4;12;$color12\007 -\033]4;13;$color13\007 -\033]4;14;$color14\007 -\033]4;15;$color15\007 -EOF -)" - find /dev/pts -exec sh -c "printf \"$escape_msgs\" > {}" \; 2> /dev/null -} - -switch_rofi() { - cat << EOF > "$XDG_CONFIG_HOME/rofi/colors" -export background="$bg" -export foreground="$fg" -export accent="$accent" -export accent_text="$accent_text" -EOF -} - -reload_dunst() { - killall dunst - fork dunst -} - -reload_polybar() { - fork polybar-msg cmd restart -} - -reload_fcitx5() { - fork fcitx5 -rd -} - -reload_gtk() { - # this is max jank but xfsettingsd does other things besides live gtk theme - # reloading, and i don't like having it running constantly because it fucks - # up fcitx5 and xbindkeys - ( - fork xfsettingsd - sleep 1 - killall xfsettingsd - ) -} - -reload_nvim() { - nvr --serverlist | while read -r nvim_socket ; do - fork nvr --nostart --servername "$nvim_socket" -c 'source $XDG_CONFIG_HOME/nvim/mode.vim' - done -} - -generate_cfgs() { - echo "updating configuration files to $1 mode..." +switch() { + echo "updating configuration files to $mode mode..." # xrdb needs to complete first, as the rest of the color schemes are derived # from querying xrdb for colors - switch_xrdb $1 + switch_xrdb $mode - switch_dunst $1 & - switch_zathura $1 & - switch_gtk $1 & - switch_fcitx5 $1 & - switch_chrome $1 & - switch_polybar $1 & - switch_vim_lightline $1 & - switch_discord $1 & - switch_vim_terminal $1 & - switch_rofi $1 & - - mkdir -p "$XDG_DATA_HOME/mode" - echo $1 > "$XDG_DATA_HOME/mode/active" - rm -f "$XDG_DATA_HOME/mode/dark" "$XDG_DATA_HOME/mode/light" - touch "$XDG_DATA_HOME/mode/$1" + for switch_function in "$XDG_CONFIG_HOME"/mode/switch.d/* ; do + ! [ -x "$switch_function" ] && continue + . "$switch_function" & + done wait $(jobs -rp) } -reload_apps() { +reload() { echo "reloading programs..." - reload_polybar & - reload_dunst & - reload_terms & - reload_fcitx5 & - reload_gtk & - reload_nvim & - rwall & + for reload_function in "$XDG_CONFIG_HOME"/mode/reload.d/* ; do + ! [ -x "$reload_function" ] && continue + . "$reload_function" & + done wait $(jobs -rp) } @@ -413,7 +114,14 @@ if [ $run_cfggen -eq 1 ] && [ -z "$mode" ] ; then echo "error: no action provided" >&2 stupid && exit 1 fi - -[ $run_cfggen -eq 1 ] && generate_cfgs $mode -[ $run_reload -eq 1 ] && reload_apps +case "$mode" in + dark|light) break ;; + *) + echo "error: $mode is not a valid mode" >&2 + stupid && exit 1 + ;; +esac + +[ $run_cfggen -eq 1 ] && switch $mode +[ $run_reload -eq 1 ] && reload -- cgit v1.2.3