#!/usr/bin/env bash # # A script to create Telegram palettes that use colors generated by pywal/wal. # Requires pywal or wal, bash and cat. # shellcheck source=/dev/null . "${HOME}/.cache/wal/colors.sh" # Prepare the conditions for the other functions. prepare() { pre="${HOME}/.cache/wal-telegram" mkdir -p "$pre" rm -f "${pre}/background".* rm -f "${pre}/colors.tdesktop-palette" wal_path="$(<"${HOME}/.cache/wal/wal")" wal_ext="${wal_path##*.}" cp "$wal_path" "${pre}/background.${wal_ext}" } # Lighten/darken by 20%, 30%, 40%, 50%, 60% some colors using only pure bash. create_colors() { colors=(0 1 2 7) for i in "${colors[@]}"; do color="color${i}" c_rgb_12d="$(( 0x"${!color:1:2}" ))" c_rgb_34d="$(( 0x"${!color:3:2}" ))" c_rgb_56d="$(( 0x"${!color:5:2}" ))" c_rgb_12d_20l="$(( c_rgb_12d + "$((c_rgb_12d / 5))" ))" c_rgb_34d_20l="$(( c_rgb_34d + "$((c_rgb_34d / 5))" ))" c_rgb_56d_20l="$(( c_rgb_56d + "$((c_rgb_56d / 5))" ))" [[ "${c_rgb_12d_20l}" -ge 255 ]] && c_rgb_12d_20l=255 [[ "${c_rgb_34d_20l}" -ge 255 ]] && c_rgb_34d_20l=255 [[ "${c_rgb_56d_20l}" -ge 255 ]] && c_rgb_56d_20l=255 printf -v c_hex_12d_20l '%x' "$c_rgb_12d_20l" printf -v c_hex_34d_20l '%x' "$c_rgb_34d_20l" printf -v c_hex_56d_20l '%x' "$c_rgb_56d_20l" [[ "${#c_hex_12d_20l}" -eq 1 ]] && c_hex_12d_20l="0${c_hex_12d_20l}" [[ "${#c_hex_34d_20l}" -eq 1 ]] && c_hex_34d_20l="0${c_hex_34d_20l}" [[ "${#c_hex_56d_20l}" -eq 1 ]] && c_hex_56d_20l="0${c_hex_56d_20l}" c_hex_20l="#${c_hex_12d_20l}${c_hex_34d_20l}${c_hex_56d_20l}" declare -g color"${i}"_lighter_20="$c_hex_20l" c_rgb_12d_30l="$(( c_rgb_12d + "$((c_rgb_12d * 3 / 10))" ))" c_rgb_34d_30l="$(( c_rgb_34d + "$((c_rgb_34d * 3 / 10))" ))" c_rgb_56d_30l="$(( c_rgb_56d + "$((c_rgb_56d * 3 / 10))" ))" [[ "${c_rgb_12d_30l}" -ge 255 ]] && c_rgb_12d_30l=255 [[ "${c_rgb_34d_30l}" -ge 255 ]] && c_rgb_34d_30l=255 [[ "${c_rgb_56d_30l}" -ge 255 ]] && c_rgb_56d_30l=255 printf -v c_hex_12d_30l '%x' "$c_rgb_12d_30l" printf -v c_hex_34d_30l '%x' "$c_rgb_34d_30l" printf -v c_hex_56d_30l '%x' "$c_rgb_56d_30l" [[ "${#c_hex_12d_30l}" -eq 1 ]] && c_hex_12d_30l="0${c_hex_12d_30l}" [[ "${#c_hex_34d_30l}" -eq 1 ]] && c_hex_34d_30l="0${c_hex_34d_30l}" [[ "${#c_hex_56d_30l}" -eq 1 ]] && c_hex_56d_30l="0${c_hex_56d_30l}" c_hex_30l="#${c_hex_12d_30l}${c_hex_34d_30l}${c_hex_56d_30l}" declare -g color"${i}"_lighter_30="$c_hex_30l" c_rgb_12d_40l="$(( c_rgb_12d + "$((c_rgb_12d * 2 / 5))" ))" c_rgb_34d_40l="$(( c_rgb_34d + "$((c_rgb_34d * 2 / 5))" ))" c_rgb_56d_40l="$(( c_rgb_56d + "$((c_rgb_56d * 2 / 5))" ))" [[ "${c_rgb_12d_40l}" -ge 255 ]] && c_rgb_12d_40l=255 [[ "${c_rgb_34d_40l}" -ge 255 ]] && c_rgb_34d_40l=255 [[ "${c_rgb_56d_40l}" -ge 255 ]] && c_rgb_56d_40l=255 printf -v c_hex_12d_40l '%x' "$c_rgb_12d_40l" printf -v c_hex_34d_40l '%x' "$c_rgb_34d_40l" printf -v c_hex_56d_40l '%x' "$c_rgb_56d_40l" [[ "${#c_hex_12d_40l}" -eq 1 ]] && c_hex_12d_40l="0${c_hex_12d_40l}" [[ "${#c_hex_34d_40l}" -eq 1 ]] && c_hex_34d_40l="0${c_hex_34d_40l}" [[ "${#c_hex_56d_40l}" -eq 1 ]] && c_hex_56d_40l="0${c_hex_56d_40l}" c_hex_40l="#${c_hex_12d_40l}${c_hex_34d_40l}${c_hex_56d_40l}" declare -g color"${i}"_lighter_40="$c_hex_40l" c_rgb_12d_50l="$(( c_rgb_12d + "$((c_rgb_12d / 2))" ))" c_rgb_34d_50l="$(( c_rgb_34d + "$((c_rgb_34d / 2))" ))" c_rgb_56d_50l="$(( c_rgb_56d + "$((c_rgb_56d / 2))" ))" [[ "${c_rgb_12d_50l}" -ge 255 ]] && c_rgb_12d_50l=255 [[ "${c_rgb_34d_50l}" -ge 255 ]] && c_rgb_34d_50l=255 [[ "${c_rgb_56d_50l}" -ge 255 ]] && c_rgb_56d_50l=255 printf -v c_hex_12d_50l '%x' "$c_rgb_12d_50l" printf -v c_hex_34d_50l '%x' "$c_rgb_34d_50l" printf -v c_hex_56d_50l '%x' "$c_rgb_56d_50l" [[ "${#c_hex_12d_50l}" -eq 1 ]] && c_hex_12d_50l="0${c_hex_12d_50l}" [[ "${#c_hex_34d_50l}" -eq 1 ]] && c_hex_34d_50l="0${c_hex_34d_50l}" [[ "${#c_hex_56d_50l}" -eq 1 ]] && c_hex_56d_50l="0${c_hex_56d_50l}" c_hex_50l="#${c_hex_12d_50l}${c_hex_34d_50l}${c_hex_56d_50l}" declare -g color"${i}"_lighter_50="$c_hex_50l" c_rgb_12d_60l="$(( c_rgb_12d + "$((c_rgb_12d * 3 / 5))" ))" c_rgb_34d_60l="$(( c_rgb_34d + "$((c_rgb_34d * 3 / 5))" ))" c_rgb_56d_60l="$(( c_rgb_56d + "$((c_rgb_56d * 3 / 5))" ))" [[ "${c_rgb_12d_60l}" -ge 255 ]] && c_rgb_12d_60l=255 [[ "${c_rgb_34d_60l}" -ge 255 ]] && c_rgb_34d_60l=255 [[ "${c_rgb_56d_60l}" -ge 255 ]] && c_rgb_56d_60l=255 printf -v c_hex_12d_60l '%x' "$c_rgb_12d_60l" printf -v c_hex_34d_60l '%x' "$c_rgb_34d_60l" printf -v c_hex_56d_60l '%x' "$c_rgb_56d_60l" [[ "${#c_hex_12d_60l}" -eq 1 ]] && c_hex_12d_60l="0${c_hex_12d_60l}" [[ "${#c_hex_34d_60l}" -eq 1 ]] && c_hex_34d_60l="0${c_hex_34d_60l}" [[ "${#c_hex_56d_60l}" -eq 1 ]] && c_hex_56d_60l="0${c_hex_56d_60l}" c_hex_60l="#${c_hex_12d_60l}${c_hex_34d_60l}${c_hex_56d_60l}" declare -g color"${i}"_lighter_60="$c_hex_60l" c_rgb_12d_20d="$(( c_rgb_12d - "$((c_rgb_12d / 5))" ))" c_rgb_34d_20d="$(( c_rgb_34d - "$((c_rgb_34d / 5))" ))" c_rgb_56d_20d="$(( c_rgb_56d - "$((c_rgb_56d / 5))" ))" printf -v c_hex_12d_20d '%x' "$c_rgb_12d_20d" printf -v c_hex_34d_20d '%x' "$c_rgb_34d_20d" printf -v c_hex_56d_20d '%x' "$c_rgb_56d_20d" [[ "${#c_hex_12d_20d}" -eq 1 ]] && c_hex_12d_20d="0${c_hex_12d_20d}" [[ "${#c_hex_34d_20d}" -eq 1 ]] && c_hex_34d_20d="0${c_hex_34d_20d}" [[ "${#c_hex_56d_20d}" -eq 1 ]] && c_hex_56d_20d="0${c_hex_56d_20d}" c_hex_20d="#${c_hex_12d_20d}${c_hex_34d_20d}${c_hex_56d_20d}" declare -g color"${i}"_darker_20="$c_hex_20d" c_rgb_12d_30d="$(( c_rgb_12d - "$((c_rgb_12d * 3 / 10))" ))" c_rgb_34d_30d="$(( c_rgb_34d - "$((c_rgb_34d * 3 / 10))" ))" c_rgb_56d_30d="$(( c_rgb_56d - "$((c_rgb_56d * 3 / 10))" ))" printf -v c_hex_12d_30d '%x' "$c_rgb_12d_30d" printf -v c_hex_34d_30d '%x' "$c_rgb_34d_30d" printf -v c_hex_56d_30d '%x' "$c_rgb_56d_30d" [[ "${#c_hex_12d_30d}" -eq 1 ]] && c_hex_12d_30d="0${c_hex_12d_30d}" [[ "${#c_hex_34d_30d}" -eq 1 ]] && c_hex_34d_30d="0${c_hex_34d_30d}" [[ "${#c_hex_56d_30d}" -eq 1 ]] && c_hex_56d_30d="0${c_hex_56d_30d}" c_hex_30d="#${c_hex_12d_30d}${c_hex_34d_30d}${c_hex_56d_30d}" declare -g color"${i}"_darker_30="$c_hex_30d" c_rgb_12d_40d="$(( c_rgb_12d - "$((c_rgb_12d * 2 / 5))" ))" c_rgb_34d_40d="$(( c_rgb_34d - "$((c_rgb_34d * 2 / 5))" ))" c_rgb_56d_40d="$(( c_rgb_56d - "$((c_rgb_56d * 2 / 5))" ))" printf -v c_hex_12d_40d '%x' "$c_rgb_12d_40d" printf -v c_hex_34d_40d '%x' "$c_rgb_34d_40d" printf -v c_hex_56d_40d '%x' "$c_rgb_56d_40d" [[ "${#c_hex_12d_40d}" -eq 1 ]] && c_hex_12d_40d="0${c_hex_12d_40d}" [[ "${#c_hex_34d_40d}" -eq 1 ]] && c_hex_34d_40d="0${c_hex_34d_40d}" [[ "${#c_hex_56d_40d}" -eq 1 ]] && c_hex_56d_40d="0${c_hex_56d_40d}" c_hex_40d="#${c_hex_12d_40d}${c_hex_34d_40d}${c_hex_56d_40d}" declare -g color"${i}"_darker_40="$c_hex_40d" c_rgb_12d_50d="$(( c_rgb_12d - "$((c_rgb_12d / 2))" ))" c_rgb_34d_50d="$(( c_rgb_34d - "$((c_rgb_34d / 2))" ))" c_rgb_56d_50d="$(( c_rgb_56d - "$((c_rgb_56d / 2))" ))" printf -v c_hex_12d_50d '%x' "$c_rgb_12d_50d" printf -v c_hex_34d_50d '%x' "$c_rgb_34d_50d" printf -v c_hex_56d_50d '%x' "$c_rgb_56d_50d" [[ "${#c_hex_12d_50d}" -eq 1 ]] && c_hex_12d_50d="0${c_hex_12d_50d}" [[ "${#c_hex_34d_50d}" -eq 1 ]] && c_hex_34d_50d="0${c_hex_34d_50d}" [[ "${#c_hex_56d_50d}" -eq 1 ]] && c_hex_56d_50d="0${c_hex_56d_50d}" c_hex_50d="#${c_hex_12d_50d}${c_hex_34d_50d}${c_hex_56d_50d}" declare -g color"${i}"_darker_50="$c_hex_50d" c_rgb_12d_60d="$(( c_rgb_12d - "$((c_rgb_12d * 3 / 5))" ))" c_rgb_34d_60d="$(( c_rgb_34d - "$((c_rgb_34d * 3 / 5))" ))" c_rgb_56d_60d="$(( c_rgb_56d - "$((c_rgb_56d * 3 / 5))" ))" printf -v c_hex_12d_60d '%x' "$c_rgb_12d_60d" printf -v c_hex_34d_60d '%x' "$c_rgb_34d_60d" printf -v c_hex_56d_60d '%x' "$c_rgb_56d_60d" [[ "${#c_hex_12d_60d}" -eq 1 ]] && c_hex_12d_60d="0${c_hex_12d_60d}" [[ "${#c_hex_34d_60d}" -eq 1 ]] && c_hex_34d_60d="0${c_hex_34d_60d}" [[ "${#c_hex_56d_60d}" -eq 1 ]] && c_hex_56d_60d="0${c_hex_56d_60d}" c_hex_60d="#${c_hex_12d_60d}${c_hex_34d_60d}${c_hex_56d_60d}" declare -g color"${i}"_darker_60="$c_hex_60d" done } # Create colors.tdesktop-palette using the colors generated by create_colors() # and the colors.wal-constants file. create_palette() { cat < "${pre}/colors.tdesktop-palette" // Colors imported from wal by init.sh. color0: $color0; color1: $color1; color2: $color2; color3: $color3; color4: $color4; color5: $color5; color6: $color6; color7: $color7; color8: $color8; // Lighter and darker variants of wal's colors. colorLighter0_20: $color0_lighter_20; colorLighter0_30: $color0_lighter_30; colorLighter0_40: $color0_lighter_40; colorLighter0_50: $color0_lighter_50; colorLighter0_60: $color0_lighter_60; colorDarker0_20: $color0_darker_20; colorDarker0_30: $color0_darker_30; colorDarker0_40: $color0_darker_40; colorDarker0_50: $color0_darker_50; colorDarker0_60: $color0_darker_60; colorLighter1_20: $color1_lighter_20; colorLighter1_30: $color1_lighter_30; colorLighter1_40: $color1_lighter_40; colorLighter1_50: $color1_lighter_50; colorLighter1_60: $color1_lighter_60; colorDarker1_20: $color1_darker_20; colorDarker1_30: $color1_darker_30; colorDarker1_40: $color1_darker_40; colorDarker1_50: $color1_darker_50; colorDarker1_60: $color1_darker_60; colorLighter2_20: $color2_lighter_20; colorLighter2_30: $color2_lighter_30; colorLighter2_40: $color2_lighter_40; colorLighter2_50: $color2_lighter_50; colorLighter2_60: $color2_lighter_60; colorDarker2_20: $color2_darker_20; colorDarker2_30: $color2_darker_30; colorDarker2_40: $color2_darker_40; colorDarker2_50: $color2_darker_50; colorDarker2_60: $color2_darker_60; colorLighter7_20: $color7_lighter_20; colorLighter7_30: $color7_lighter_30; colorLighter7_40: $color7_lighter_40; colorLighter7_50: $color7_lighter_50; colorLighter7_60: $color7_lighter_60; colorDarker7_20: $color7_darker_20; colorDarker7_30: $color7_darker_30; colorDarker7_40: $color7_darker_40; colorDarker7_50: $color7_darker_50; colorDarker7_60: $color7_darker_60; // Alpha colors. colorAlpha0_18: ${color0}18; colorAlpha0_3c: ${color0}3c; colorAlpha0_03: ${color0}03; colorAlpha0_7f: ${color0}7f; colorAlpha0_b0: ${color0}b0; colorAlpha0_cc: ${color0}cc; colorAlpha0_00: ${color0}00; colorAlpha0_54: ${color0}54; colorAlpha0_56: ${color0}56; colorAlpha0_74: ${color0}74; colorAlpha0_40: ${color0}40; colorAlpha0_4c: ${color0}4c; colorAlpha0_b2: ${color0}b2; colorAlpha0_40: ${color0}40; colorAlpha1_10: ${color1}10; colorAlpha1_33: ${color1}33; colorAlpha2_c8: ${color2}c8; colorAlpha2_4c: ${color2}4c; colorAlpha2_7f: ${color2}7f; colorAlpha2_00: ${color2}00; colorAlpha2_87: ${color2}87; colorAlpha3_64: ${color3}64; colorAlpha7_53: ${color7}53; colorAlpha7_7a: ${color7}7a; colorAlpha7_1a: ${color7}1a; colorAlpha7_2c: ${color7}2c; colorAlpha7_7f: ${color7}7f; colorAlpha7_bc: ${color7}bc; colorAlpha7_4c: ${color7}4c; colorAlpha7_6b: ${color7}6b; colorAlpha7_14: ${color7}14; EOF const="$(<".local/usr/wal-telegram/colors.wal-constants")" printf '%s' "$const" >> "${pre}/colors.tdesktop-palette" } main() { prepare create_colors create_palette printf '%s\n' "Theme created succesfully." } main