aboutsummaryrefslogtreecommitdiff
path: root/.local/share
diff options
context:
space:
mode:
authorlonkaars <loek@pipeframe.xyz>2024-03-08 18:29:41 +0100
committerlonkaars <loek@pipeframe.xyz>2024-03-08 18:29:41 +0100
commitdce8fe36eb7f550f648cb83ab890ce638ca819d0 (patch)
tree474071a3975d205f71f2303d3dc6c08a9d7e229c /.local/share
parentd11179e429f69340bafad5a66edbb6f89b78b5b7 (diff)
clean up + modularize `mode` source code
Diffstat (limited to '.local/share')
-rwxr-xr-x.local/share/bin/mode342
1 files changed, 25 insertions, 317 deletions
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