317 lines
10 KiB
Bash
Executable File
317 lines
10 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
## Copyright (C) 2020-2023 Aditya Shakya <adi1090x@gmail.com>
|
|
##
|
|
## Script To Apply Themes
|
|
|
|
## Theme ------------------------------------
|
|
IDIR="$HOME/.config/i3"
|
|
TDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
|
THEME="${TDIR##*/}"
|
|
|
|
source "$IDIR"/themes/"$THEME"/theme.bash
|
|
altbackground="`pastel color $elements_bg | pastel lighten $light_value | pastel format hex`"
|
|
altforeground="`pastel color $foreground | pastel darken $dark_value | pastel format hex`"
|
|
modbackground=(`pastel gradient -n 7 $elements_bg $altbackground | pastel format hex`)
|
|
|
|
## Directories ------------------------------
|
|
PATH_CONF="$HOME/.config"
|
|
PATH_GEANY="$PATH_CONF/geany"
|
|
PATH_I3WM="$PATH_CONF/i3"
|
|
PATH_TERM="$PATH_I3WM/alacritty"
|
|
PATH_PBAR="$PATH_I3WM/themes/$THEME/polybar"
|
|
PATH_ROFI="$PATH_I3WM/themes/$THEME/rofi"
|
|
|
|
## Wallpaper ---------------------------------
|
|
apply_wallpaper() {
|
|
sed -i -e "s#WALLPAPER=.*#WALLPAPER='$wallpaper'#g" ${PATH_I3WM}/themes/wallpaper.sh
|
|
}
|
|
|
|
## Polybar -----------------------------------
|
|
apply_polybar() {
|
|
# modify polybar launch script
|
|
sed -i -e "s/STYLE=.*/STYLE=\"$THEME\"/g" ${PATH_I3WM}/themes/polybar.sh
|
|
|
|
# apply default theme fonts
|
|
sed -i -e "s/font-0 = .*/font-0 = \"$polybar_font\"/g" ${PATH_PBAR}/config.ini
|
|
|
|
# rewrite colors file
|
|
cat > ${PATH_PBAR}/colors.ini <<- EOF
|
|
[color]
|
|
|
|
BACKGROUND = ${elements_bg}
|
|
FOREGROUND = ${foreground}
|
|
ALTBACKGROUND = ${altbackground}
|
|
ALTFOREGROUND = ${altforeground}
|
|
ACCENT = ${accent}
|
|
|
|
BLACK = ${color0}
|
|
RED = ${color1}
|
|
GREEN = ${color2}
|
|
YELLOW = ${color3}
|
|
BLUE = ${color4}
|
|
MAGENTA = ${color5}
|
|
CYAN = ${color6}
|
|
WHITE = ${color7}
|
|
ALTBLACK = ${color8}
|
|
ALTRED = ${color9}
|
|
ALTGREEN = ${color10}
|
|
ALTYELLOW = ${color11}
|
|
ALTBLUE = ${color12}
|
|
ALTMAGENTA = ${color13}
|
|
ALTCYAN = ${color14}
|
|
ALTWHITE = ${color15}
|
|
|
|
BACKGROUND1 = ${modbackground[1]}
|
|
BACKGROUND2 = ${modbackground[2]}
|
|
BACKGROUND3 = ${modbackground[3]}
|
|
BACKGROUND4 = ${modbackground[4]}
|
|
BACKGROUND5 = ${modbackground[5]}
|
|
BACKGROUND6 = ${modbackground[6]}
|
|
EOF
|
|
}
|
|
|
|
# Rofi --------------------------------------
|
|
apply_rofi() {
|
|
# modify rofi scripts
|
|
sed -i -e "s/STYLE=.*/STYLE=\"$THEME\"/g" \
|
|
${PATH_I3WM}/scripts/rofi_askpass \
|
|
${PATH_I3WM}/scripts/rofi_asroot \
|
|
${PATH_I3WM}/scripts/rofi_launcher \
|
|
${PATH_I3WM}/scripts/rofi_music \
|
|
${PATH_I3WM}/scripts/rofi_powermenu \
|
|
${PATH_I3WM}/scripts/rofi_runner \
|
|
${PATH_I3WM}/scripts/rofi_screenshot \
|
|
${PATH_I3WM}/scripts/rofi_themes \
|
|
${PATH_I3WM}/scripts/rofi_windows
|
|
|
|
# apply default theme fonts
|
|
sed -i -e "s/font:.*/font: \"$rofi_font\";/g" ${PATH_ROFI}/shared/fonts.rasi
|
|
|
|
# rewrite colors file
|
|
cat > ${PATH_ROFI}/shared/colors.rasi <<- EOF
|
|
* {
|
|
background: ${elements_bg};
|
|
background-alt: ${modbackground[1]};
|
|
foreground: ${foreground};
|
|
selected: ${accent};
|
|
active: ${color2};
|
|
urgent: ${color1};
|
|
}
|
|
EOF
|
|
|
|
# modify icon theme
|
|
if [[ -f "$PATH_CONF"/rofi/config.rasi ]]; then
|
|
sed -i -e "s/icon-theme:.*/icon-theme: \"$rofi_icon\";/g" ${PATH_CONF}/rofi/config.rasi
|
|
fi
|
|
}
|
|
|
|
# Network Menu ------------------------------
|
|
apply_netmenu() {
|
|
if [[ -f "$PATH_I3WM"/themes/networkmenu_config.ini ]]; then
|
|
sed -i -e "s#dmenu_command = .*#dmenu_command = rofi -dmenu -theme $PATH_ROFI/networkmenu.rasi#g" ${PATH_I3WM}/themes/networkmenu_config.ini
|
|
fi
|
|
}
|
|
|
|
# Terminal ----------------------------------
|
|
apply_terminal() {
|
|
# alacritty : fonts
|
|
sed -i ${PATH_TERM}/fonts.yml \
|
|
-e "s/family: .*/family: \"$terminal_font_name\"/g" \
|
|
-e "s/size: .*/size: $terminal_font_size/g"
|
|
|
|
# alacritty : colors
|
|
cat > ${PATH_TERM}/colors.yml <<- _EOF_
|
|
## Colors configuration
|
|
colors:
|
|
# Default colors
|
|
primary:
|
|
background: '${background}'
|
|
foreground: '${foreground}'
|
|
|
|
# Normal colors
|
|
normal:
|
|
black: '${color0}'
|
|
red: '${color1}'
|
|
green: '${color2}'
|
|
yellow: '${color3}'
|
|
blue: '${color4}'
|
|
magenta: '${color5}'
|
|
cyan: '${color6}'
|
|
white: '${color7}'
|
|
|
|
# Bright colors
|
|
bright:
|
|
black: '${color8}'
|
|
red: '${color9}'
|
|
green: '${color10}'
|
|
yellow: '${color11}'
|
|
blue: '${color12}'
|
|
magenta: '${color13}'
|
|
cyan: '${color14}'
|
|
white: '${color15}'
|
|
_EOF_
|
|
}
|
|
|
|
# Geany -------------------------------------
|
|
apply_geany() {
|
|
sed -i ${PATH_GEANY}/geany.conf \
|
|
-e "s/color_scheme=.*/color_scheme=$geany_colors/g" \
|
|
-e "s/editor_font=.*/editor_font=$geany_font/g"
|
|
}
|
|
|
|
# Appearance --------------------------------
|
|
apply_appearance() {
|
|
XFILE="$PATH_I3WM/xsettingsd"
|
|
GTK2FILE="$HOME/.gtkrc-2.0"
|
|
GTK3FILE="$PATH_CONF/gtk-3.0/settings.ini"
|
|
|
|
# apply gtk theme, icons, cursor & fonts
|
|
if [[ `pidof xsettingsd` ]]; then
|
|
sed -i -e "s|Net/ThemeName .*|Net/ThemeName \"$gtk_theme\"|g" ${XFILE}
|
|
sed -i -e "s|Net/IconThemeName .*|Net/IconThemeName \"$icon_theme\"|g" ${XFILE}
|
|
sed -i -e "s|Gtk/CursorThemeName .*|Gtk/CursorThemeName \"$cursor_theme\"|g" ${XFILE}
|
|
else
|
|
sed -i -e "s/gtk-font-name=.*/gtk-font-name=\"$gtk_font\"/g" ${GTK2FILE}
|
|
sed -i -e "s/gtk-theme-name=.*/gtk-theme-name=\"$gtk_theme\"/g" ${GTK2FILE}
|
|
sed -i -e "s/gtk-icon-theme-name=.*/gtk-icon-theme-name=\"$icon_theme\"/g" ${GTK2FILE}
|
|
sed -i -e "s/gtk-cursor-theme-name=.*/gtk-cursor-theme-name=\"$cursor_theme\"/g" ${GTK2FILE}
|
|
|
|
sed -i -e "s/gtk-font-name=.*/gtk-font-name=$gtk_font/g" ${GTK3FILE}
|
|
sed -i -e "s/gtk-theme-name=.*/gtk-theme-name=$gtk_theme/g" ${GTK3FILE}
|
|
sed -i -e "s/gtk-icon-theme-name=.*/gtk-icon-theme-name=$icon_theme/g" ${GTK3FILE}
|
|
sed -i -e "s/gtk-cursor-theme-name=.*/gtk-cursor-theme-name=$cursor_theme/g" ${GTK3FILE}
|
|
fi
|
|
|
|
# inherit cursor theme
|
|
if [[ -f "$HOME"/.icons/default/index.theme ]]; then
|
|
sed -i -e "s/Inherits=.*/Inherits=$cursor_theme/g" "$HOME"/.icons/default/index.theme
|
|
fi
|
|
}
|
|
|
|
# Dunst -------------------------------------
|
|
apply_dunst() {
|
|
# modify dunst config
|
|
sed -i ${PATH_I3WM}/dunstrc \
|
|
-e "s/width = .*/width = $dunst_width/g" \
|
|
-e "s/height = .*/height = $dunst_height/g" \
|
|
-e "s/offset = .*/offset = $dunst_offset/g" \
|
|
-e "s/origin = .*/origin = $dunst_origin/g" \
|
|
-e "s/font = .*/font = $dunst_font/g" \
|
|
-e "s/frame_width = .*/frame_width = $dunst_border/g" \
|
|
-e "s/separator_height = .*/separator_height = $dunst_separator/g" \
|
|
-e "s/line_height = .*/line_height = $dunst_separator/g"
|
|
|
|
# modify colors
|
|
sed -i '/urgency_low/Q' ${PATH_I3WM}/dunstrc
|
|
cat >> ${PATH_I3WM}/dunstrc <<- _EOF_
|
|
[urgency_low]
|
|
timeout = 2
|
|
background = "${elements_bg}"
|
|
foreground = "${foreground}"
|
|
frame_color = "${altbackground}"
|
|
|
|
[urgency_normal]
|
|
timeout = 5
|
|
background = "${elements_bg}"
|
|
foreground = "${foreground}"
|
|
frame_color = "${altbackground}"
|
|
|
|
[urgency_critical]
|
|
timeout = 0
|
|
background = "${elements_bg}"
|
|
foreground = "${color1}"
|
|
frame_color = "${color1}"
|
|
_EOF_
|
|
}
|
|
|
|
# Compositor --------------------------------
|
|
apply_compositor() {
|
|
picom_cfg="$PATH_I3WM/picom.conf"
|
|
|
|
# modify picom config
|
|
sed -i "$picom_cfg" \
|
|
-e "s/backend = .*/backend = \"$picom_backend\";/g" \
|
|
-e "s/corner-radius = .*/corner-radius = $picom_corner;/g" \
|
|
-e "s/shadow-radius = .*/shadow-radius = $picom_shadow_r;/g" \
|
|
-e "s/shadow-opacity = .*/shadow-opacity = $picom_shadow_o;/g" \
|
|
-e "s/shadow-offset-x = .*/shadow-offset-x = $picom_shadow_x;/g" \
|
|
-e "s/shadow-offset-y = .*/shadow-offset-y = $picom_shadow_y;/g" \
|
|
-e "s/method = .*/method = \"$picom_blur_method\";/g" \
|
|
-e "s/strength = .*/strength = $picom_blur_strength;/g"
|
|
}
|
|
|
|
# I3WM -------------------------------------
|
|
apply_i3wm() {
|
|
# modify i3theme file
|
|
sed -i ${PATH_I3WM}/config.d/01_theme.conf \
|
|
-e "s/set \$i3_fonts.*/set \$i3_fonts $i3wm_fonts/g" \
|
|
\
|
|
-e "s/set \$i3_border_size.*/set \$i3_border_size $i3wm_border_size/g" \
|
|
-e "s/set \$i3_border_style.*/set \$i3_border_style $i3wm_border_style/g" \
|
|
\
|
|
-e "s/set \$i3_gaps_inner.*/set \$i3_gaps_inner $i3wm_gaps_inner/g" \
|
|
-e "s/set \$i3_gaps_outer.*/set \$i3_gaps_outer $i3wm_gaps_outer/g" \
|
|
-e "s/set \$i3_gaps_smart.*/set \$i3_gaps_smart $i3wm_gaps_smart/g" \
|
|
\
|
|
-e "s/set \$i3_cl_col_bg.*/set \$i3_cl_col_bg $background/g" \
|
|
-e "s/set \$i3_cl_col_fg.*/set \$i3_cl_col_fg $foreground/g" \
|
|
-e "s/set \$i3_cl_col_in.*/set \$i3_cl_col_in $color2/g" \
|
|
-e "s/set \$i3_cl_col_afoc.*/set \$i3_cl_col_afoc $accent/g" \
|
|
-e "s/set \$i3_cl_col_ifoc.*/set \$i3_cl_col_ifoc $color4/g" \
|
|
-e "s/set \$i3_cl_col_ufoc.*/set \$i3_cl_col_ufoc $altbackground/g" \
|
|
-e "s/set \$i3_cl_col_urgt.*/set \$i3_cl_col_urgt $color5/g" \
|
|
-e "s/set \$i3_cl_col_phol.*/set \$i3_cl_col_phol $background/g"
|
|
|
|
# modify i3bar file
|
|
sed -i ${PATH_I3WM}/i3status/statusbar.conf \
|
|
-e "s/set \$i3_bar_fonts.*/set \$i3_bar_fonts $i3wm_fonts/g" \
|
|
\
|
|
-e "s/set \$i3_bar_bg.*/set \$i3_bar_bg $background/g" \
|
|
-e "s/set \$i3_bar_fg.*/set \$i3_bar_fg $foreground/g" \
|
|
-e "s/set \$i3_bar_sep.*/set \$i3_bar_sep $altbackground/g" \
|
|
-e "s/set \$i3_bar_foc.*/set \$i3_bar_foc $accent/g" \
|
|
-e "s/set \$i3_bar_act.*/set \$i3_bar_act $color4/g" \
|
|
-e "s/set \$i3_bar_ina.*/set \$i3_bar_ina $altbackground/g" \
|
|
-e "s/set \$i3_bar_urg.*/set \$i3_bar_urg $color5/g" \
|
|
-e "s/set \$i3_bar_mod.*/set \$i3_bar_mod $color2/g"
|
|
|
|
# modify i3status file
|
|
sed -i ${PATH_I3WM}/i3status/config \
|
|
-e "s/color_good =.*/color_good = \"$color2\"/g" \
|
|
-e "s/color_degraded =.*/color_degraded = \"$color3\"/g" \
|
|
-e "s/color_bad =.*/color_bad = \"$color1\"/g" \
|
|
-e "s/color_separator =.*/color_separator = \"$altbackground\"/g"
|
|
|
|
# restart i3wm
|
|
i3-msg restart
|
|
}
|
|
|
|
# Create Theme File -------------------------
|
|
create_file() {
|
|
theme_file="$PATH_I3WM/themes/.current"
|
|
if [[ ! -f "$theme_file" ]]; then
|
|
touch ${theme_file}
|
|
fi
|
|
echo "$THEME" > ${theme_file}
|
|
}
|
|
|
|
# Notify User -------------------------------
|
|
notify_user() {
|
|
dunstify -u normal -h string:x-dunst-stack-tag:applytheme -i /usr/share/archcraft/icons/dunst/themes.png "Applying Style : $THEME"
|
|
}
|
|
|
|
## Execute Script ---------------------------
|
|
notify_user
|
|
create_file
|
|
apply_wallpaper
|
|
apply_polybar
|
|
apply_rofi
|
|
apply_netmenu
|
|
apply_terminal
|
|
apply_geany
|
|
apply_appearance
|
|
apply_dunst
|
|
apply_compositor
|
|
apply_i3wm
|