356 lines
12 KiB
Bash
Executable File
356 lines
12 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
## Copyright (C) 2020-2024 Aditya Shakya <adi1090x@gmail.com>
|
|
##
|
|
## Script To Apply Themes
|
|
|
|
## Theme ------------------------------------
|
|
TDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
|
THEME="${TDIR##*/}"
|
|
|
|
source "$HOME"/.config/openbox/themes/"$THEME"/theme.bash
|
|
altbackground="`pastel color $background | pastel lighten $light_value | pastel format hex`"
|
|
altforeground="`pastel color $foreground | pastel darken $dark_value | pastel format hex`"
|
|
|
|
## Directories ------------------------------
|
|
PATH_CONF="$HOME/.config"
|
|
PATH_TERM="$PATH_CONF/alacritty"
|
|
PATH_DUNST="$PATH_CONF/dunst"
|
|
PATH_GEANY="$PATH_CONF/geany"
|
|
PATH_OBOX="$PATH_CONF/openbox"
|
|
PATH_PBAR="$PATH_OBOX/themes/$THEME/polybar"
|
|
PATH_ROFI="$PATH_OBOX/themes/$THEME/rofi"
|
|
PATH_XFCE="$PATH_CONF/xfce4/terminal"
|
|
|
|
## Wallpaper ---------------------------------
|
|
apply_wallpaper() {
|
|
for head in {0..10}; do
|
|
nitrogen --head=$head --save --set-zoom-fill "$wallpaper" &>/dev/null
|
|
done
|
|
}
|
|
|
|
## Polybar -----------------------------------
|
|
apply_polybar() {
|
|
# modify polybar launch script
|
|
sed -i -e "s/STYLE=.*/STYLE=\"$THEME\"/g" ${PATH_OBOX}/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 = ${background}
|
|
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}
|
|
EOF
|
|
}
|
|
|
|
## Tint2 -----------------------------------
|
|
apply_tint2() {
|
|
# modify tint2 launch script
|
|
sed -i -e "s/STYLE=.*/STYLE=\"$THEME\"/g" ${PATH_OBOX}/themes/tint2.sh
|
|
}
|
|
|
|
# Rofi --------------------------------------
|
|
apply_rofi() {
|
|
# modify rofi scripts
|
|
sed -i -e "s/STYLE=.*/STYLE=\"$THEME\"/g" \
|
|
${PATH_OBOX}/scripts/rofi-askpass \
|
|
${PATH_OBOX}/scripts/rofi-bluetooth \
|
|
${PATH_OBOX}/scripts/rofi-launcher \
|
|
${PATH_OBOX}/scripts/rofi-music \
|
|
${PATH_OBOX}/scripts/rofi-powermenu \
|
|
${PATH_OBOX}/scripts/rofi-runner \
|
|
${PATH_OBOX}/scripts/rofi-screenshot
|
|
|
|
# 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: ${background};
|
|
background-alt: ${altbackground};
|
|
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_CONF"/networkmanager-dmenu/config.ini ]]; then
|
|
sed -i -e "s#dmenu_command = .*#dmenu_command = rofi -dmenu -theme $PATH_ROFI/networkmenu.rasi#g" ${PATH_CONF}/networkmanager-dmenu/config.ini
|
|
fi
|
|
}
|
|
|
|
# Terminal ----------------------------------
|
|
apply_terminal() {
|
|
# alacritty : fonts
|
|
sed -i ${PATH_TERM}/fonts.toml \
|
|
-e "s/family = .*/family = \"$terminal_font_name\"/g" \
|
|
-e "s/size = .*/size = $terminal_font_size/g"
|
|
|
|
# alacritty : colors
|
|
cat > ${PATH_TERM}/colors.toml <<- _EOF_
|
|
## Colors configuration
|
|
[colors.primary]
|
|
background = "${background}"
|
|
foreground = "${foreground}"
|
|
|
|
[colors.normal]
|
|
black = "${color0}"
|
|
red = "${color1}"
|
|
green = "${color2}"
|
|
yellow = "${color3}"
|
|
blue = "${color4}"
|
|
magenta = "${color5}"
|
|
cyan = "${color6}"
|
|
white = "${color7}"
|
|
|
|
[colors.bright]
|
|
black = "${color8}"
|
|
red = "${color9}"
|
|
green = "${color10}"
|
|
yellow = "${color11}"
|
|
blue = "${color12}"
|
|
magenta = "${color13}"
|
|
cyan = "${color14}"
|
|
white = "${color15}"
|
|
_EOF_
|
|
|
|
# xfce terminal : fonts & colors
|
|
sed -i ${PATH_XFCE}/terminalrc \
|
|
-e "s/FontName=.*/FontName=$terminal_font_name $terminal_font_size/g" \
|
|
-e "s/ColorBackground=.*/ColorBackground=${background}/g" \
|
|
-e "s/ColorForeground=.*/ColorForeground=${foreground}/g" \
|
|
-e "s/ColorCursor=.*/ColorCursor=${foreground}/g" \
|
|
-e "s/ColorPalette=.*/ColorPalette=${color0};${color1};${color2};${color3};${color4};${color5};${color6};${color7};${color8};${color9};${color10};${color11};${color12};${color13};${color14};${color15}/g"
|
|
}
|
|
|
|
# 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() {
|
|
# apply gtk theme, icons, cursor & fonts
|
|
xfconf-query -c xsettings -p /Gtk/FontName -s "$gtk_font"
|
|
xfconf-query -c xsettings -p /Net/ThemeName -s "$gtk_theme"
|
|
xfconf-query -c xsettings -p /Net/IconThemeName -s "$icon_theme"
|
|
xfconf-query -c xsettings -p /Gtk/CursorThemeName -s "$cursor_theme"
|
|
|
|
# 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
|
|
}
|
|
|
|
# Openbox -----------------------------------
|
|
apply_obconfig () {
|
|
namespace="http://openbox.org/3.4/rc"
|
|
config="$PATH_OBOX/rc.xml"
|
|
|
|
# Theme
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:name' -v "$ob_theme" "$config"
|
|
|
|
# Title
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:titleLayout' -v "$ob_layout" "$config"
|
|
|
|
# Fonts
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:name' -v "$ob_font" "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:size' -v "$ob_font_size" "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:weight' -v Bold "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:slant' -v Normal "$config"
|
|
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:name' -v "$ob_font" "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:size' -v "$ob_font_size" "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:weight' -v Normal "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:slant' -v Normal "$config"
|
|
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="MenuHeader"]/a:name' -v "$ob_font" "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="MenuHeader"]/a:size' -v "$ob_font_size" "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="MenuHeader"]/a:weight' -v Bold "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="MenuHeader"]/a:slant' -v Normal "$config"
|
|
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="MenuItem"]/a:name' -v "$ob_font" "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="MenuItem"]/a:size' -v "$ob_font_size" "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="MenuItem"]/a:weight' -v Normal "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="MenuItem"]/a:slant' -v Normal "$config"
|
|
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveOnScreenDisplay"]/a:name' -v "$ob_font" "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveOnScreenDisplay"]/a:size' -v "$ob_font_size" "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveOnScreenDisplay"]/a:weight' -v Bold "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveOnScreenDisplay"]/a:slant' -v Normal "$config"
|
|
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveOnScreenDisplay"]/a:name' -v "$ob_font" "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveOnScreenDisplay"]/a:size' -v "$ob_font_size" "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveOnScreenDisplay"]/a:weight' -v Normal "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveOnScreenDisplay"]/a:slant' -v Normal "$config"
|
|
|
|
# Openbox Menu Style
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:menu/a:file' -v "$ob_menu" "$config"
|
|
|
|
# Margins
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:margins/a:top' -v ${ob_margin_t} "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:margins/a:bottom' -v ${ob_margin_b} "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:margins/a:left' -v ${ob_margin_l} "$config"
|
|
xmlstarlet ed -L -N a="$namespace" -u '/a:openbox_config/a:margins/a:right' -v ${ob_margin_r} "$config"
|
|
|
|
# Reload Openbox Config
|
|
openbox --reconfigure
|
|
}
|
|
|
|
# Dunst -------------------------------------
|
|
apply_dunst() {
|
|
# modify dunst config
|
|
sed -i ${PATH_DUNST}/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_DUNST}/dunstrc
|
|
cat >> ${PATH_DUNST}/dunstrc <<- _EOF_
|
|
[urgency_low]
|
|
timeout = 2
|
|
background = "${background}"
|
|
foreground = "${foreground}"
|
|
frame_color = "${altbackground}"
|
|
|
|
[urgency_normal]
|
|
timeout = 5
|
|
background = "${background}"
|
|
foreground = "${foreground}"
|
|
frame_color = "${altbackground}"
|
|
|
|
[urgency_critical]
|
|
timeout = 0
|
|
background = "${background}"
|
|
foreground = "${color1}"
|
|
frame_color = "${color1}"
|
|
_EOF_
|
|
|
|
# restart dunst
|
|
pkill dunst && dunst &
|
|
}
|
|
|
|
# Plank -------------------------------------
|
|
apply_plank() {
|
|
# create temporary config file
|
|
cat > "$HOME"/.cache/plank.conf <<- _EOF_
|
|
[dock1]
|
|
alignment='center'
|
|
auto-pinning=true
|
|
current-workspace-only=false
|
|
dock-items=['xfce-settings-manager.dockitem', 'Alacritty.dockitem', 'thunar.dockitem', 'firefox.dockitem', 'geany.dockitem']
|
|
hide-delay=0
|
|
hide-mode='$plank_hmode'
|
|
icon-size=$plank_icon_size
|
|
items-alignment='center'
|
|
lock-items=false
|
|
monitor=''
|
|
offset=$plank_offset
|
|
pinned-only=false
|
|
position='$plank_position'
|
|
pressure-reveal=false
|
|
show-dock-item=false
|
|
theme='$plank_theme'
|
|
tooltips-enabled=true
|
|
unhide-delay=0
|
|
zoom-enabled=true
|
|
zoom-percent=$plank_zoom_percent
|
|
_EOF_
|
|
|
|
# apply config and reload plank
|
|
cat "$HOME"/.cache/plank.conf | dconf load /net/launchpad/plank/docks/
|
|
}
|
|
|
|
# Compositor --------------------------------
|
|
apply_compositor() {
|
|
picom_cfg="$PATH_CONF/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"
|
|
}
|
|
|
|
# Create Theme File -------------------------
|
|
create_file() {
|
|
theme_file="$PATH_OBOX/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_tint2
|
|
apply_rofi
|
|
apply_netmenu
|
|
apply_terminal
|
|
apply_geany
|
|
apply_appearance
|
|
apply_obconfig
|
|
apply_dunst
|
|
apply_plank
|
|
apply_compositor
|
|
|
|
# launch polybar / tint2
|
|
bash ${PATH_OBOX}/themes/launch-bar.sh
|
|
|
|
# fix cursor theme (run it in the end)
|
|
xsetroot -cursor_name left_ptr
|