Compare commits

..

5 commits

Author SHA1 Message Date
10cfc6b417
Update stylesheet 2022-03-25 12:35:56 +01:00
6e91749030
Update zathura to use drop-in colorscheme file
Zathura can use include directive to gather configuration from multiple
files, make use of that for less intrusive theming changes. Now only
needs to append include directive in main configuration file and the
colorscheme can just be put into a completely separate file.
2022-03-10 21:01:35 +01:00
b780cefea8
Update dunst to use drop-in configuration files
dunst theming now uses the newly introduced drop-in files for dunst
(v1.8.0) which allow less intrusive theming. Now simply drops a new
colorscheme file in the right location instead of meddling with the main
configuration file.
2022-03-10 20:28:40 +01:00
12474e85dd
Fix qutebrowser quoting and formatting 2022-01-16 14:51:05 +01:00
3d45d759d8
Add experimental kitty processor
Can set the theme for future kitty instances,
but will not theme the current kitty. For that
the ANSI processor is necessary to be invoked.
2022-01-16 13:01:48 +01:00
5 changed files with 199 additions and 148 deletions

View file

@ -1930,3 +1930,19 @@ table#hnmain {
#region-main { #region-main {
background-color: inherit; background-color: inherit;
} }
/* python docs */
div.document,
div.body {
background-color: inherit;
color: inherit;
}
span.highlighted,
div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6,
{
background-color: %base02% !important;
}

View file

@ -2,9 +2,13 @@
readonly dependency=("khamer/base16-dunst") readonly dependency=("khamer/base16-dunst")
readonly app="dunst" readonly app="dunst"
# #
# Alacritty does not support including other files into # This configuration requires dunst version at least 1.8.0!
# its configuration yet. As such, this processor needs to #
# change the user's configuration file *itself*. # Dunst now allows drop-in configuration files in a special
# `dunstrc.d/` directory in the usual configuration directory.
# That means we can drop in a specific `00-colorscheme.conf`
# file instead of operating directly on the main dunst
# configuration file.
# #
# This will generally not be a problem, though it can lead # This will generally not be a problem, though it can lead
# to corrupted configurations in exceptional circumstances # to corrupted configurations in exceptional circumstances
@ -13,9 +17,9 @@ readonly app="dunst"
# #
# In general, the processor looks for a specific line in the # In general, the processor looks for a specific line in the
# following format: # following format:
# '# Base16 [theme name] - alacritty color config' # '# Base16 [theme name] - dunst color config'
# from which it will delete everything until it finds a line: # from which it will delete everything until it finds a line:
# '# Base16End [theme name] - alacritty color config' # '# Base16End [theme name] - dunst color config'
# So, if you don't want to lose anything - # So, if you don't want to lose anything -
# Do NOT put anything important between those two lines. # Do NOT put anything important between those two lines.
@ -24,28 +28,25 @@ package="$2"
theme="$3" theme="$3"
permanent="$4" permanent="$4"
dunst_conf="$HOME/.config/dunst/dunstrc" dunst_conf_dir="$HOME/.config/dunst/dunstrc.d"
dunst_conf="$dunst_conf_dir/00-colorscheme.conf"
## Main Entrypoint ## Main Entrypoint
# #
# Finds the right theme template file and starts theme # Finds the right theme template file and starts theme
# switching and, if necessary, permanent setting processes. # switching and, if necessary, permanent setting processes.
main() { main() {
dbg_msg $app "Starting Processor" dbg_msg $app "Starting Processor"
tfile="$path/$package/themes/base16-$theme.dunstrc" tfile="$path/$package/themes/base16-$theme.dunstrc"
if ! file_exists "$tfile"; then if ! file_exists "$tfile"; then
dbg_msg $app "error" "Theme template $theme not found in package $package" dbg_msg $app "error" "Theme template $theme not found in package $package"
exit 1 exit 1
fi fi
if [ ! -f "$dunst_conf" ]; then if [[ "$permanent" == "true" ]]; then save; fi
dbg_msg $app "error" "$app config file not found. Please make sure file exists: $dunst_conf"
fi
if [[ "$permanent" == "true" ]]; then save; fi dbg_msg $app "Processor Done"
dbg_msg $app "Processor Done"
} }
## Theme setter ## Theme setter
@ -53,51 +54,26 @@ main() {
# Takes care of permanently writing the desired # Takes care of permanently writing the desired
# base16 theme into application settings. # base16 theme into application settings.
save() { save() {
dbg_msg $app "Saving theme" dbg_msg $app "Saving theme"
startline="$(grep -ne '^# Base16 .*- dunst color config$' "$dunst_conf" | cut -f1 -d:)" if [ ! -f "$dunst_conf" ]; then
endline="$(grep -ne '^# Base16End .*- dunst color config$' "$dunst_conf" | cut -f1 -d:)" mkdir -p "$dunst_conf_dir"
dbg_msg $app "$app colorscheme file not found. Creating new colorscheme file: $dunst_conf"
fi
tmpfile="$dunst_conf.tmp" # fix template theme name key for easier inclusion
tmptheme="$dunst_conf.thm.tmp" echo "# Base16 $theme - dunst color config" >"$dunst_conf"
echo "" >"$tmpfile" cat "$tfile" >>"$dunst_conf" || exit 1
echo "" >"$tmptheme" echo "# Base16End $theme - dunst color config" >>"$dunst_conf"
if [[ -n "$startline" && -z "$endline" ]] || [[ -z "$startline" && -n "$endline" ]] || [[ "$startline" -gt "$endline" ]]; then dbg_msg $app "Saved theme to $dunst_conf"
dbg_msg $app "error" "Base 16 Pattern not correctly recognized in file: $dunst_conf. Please make sure pattern begins with # Base16 and ends with # Base16End and only exists once in the file. No changes to file made."
cat "$dunst_conf" >"$tmpfile" || exit 1
elif [[ -z "$startline" && -z "$endline" ]]; then save_post
dbg_msg $app "warn" "No previous Base16 pattern found in file: $dunst_conf. If this is your first time running the processor, ignore this warning."
cat "$dunst_conf" >"$tmpfile" || exit 1
else
# remove old lines of any base16 theme
sed -e "$startline,$endline d" "$dunst_conf" >"$tmpfile" || exit 1
fi
# fix template theme name key for easier inclusion
echo "# Base16 $theme - dunst color config" >"$tmptheme"
cat "$tfile" >>"$tmptheme" || exit 1
echo "# Base16End $theme - dunst color config" >>"$tmptheme"
# combine both into final config file
# replace original file with new colorscheme-added version
cat "$tmpfile" "$tmptheme" >"$dunst_conf"
[ -f "$tmptheme" ] && rm "$tmptheme"
[ -f "$tmpfile" ] && rm "$tmpfile"
dbg_msg $app "Saved theme to $dunst_conf"
save_post
} }
save_post() { save_post() {
pkill dunst pkill dunst
dunst & dunst &
} }
# Safe sourcing: https://stackoverflow.com/a/12694189 # Safe sourcing: https://stackoverflow.com/a/12694189
@ -110,7 +86,7 @@ if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi
# Makes sure the processor is called for the correct # Makes sure the processor is called for the correct
# base16 package, or refuses to run if it is not. # base16 package, or refuses to run if it is not.
if printf '%s\n' "${dependency[@]}" | grep -q -P "^$package$"; then if printf '%s\n' "${dependency[@]}" | grep -q -P "^$package$"; then
main main
else else
dbg_msg $app "error" "Processor does not work for package $package" dbg_msg $app "error" "Processor does not work for package $package"
fi fi

82
theme_kitty Executable file
View file

@ -0,0 +1,82 @@
#!/usr/bin/env bash
readonly dependency=("kdrag0n/base16-kitty")
readonly app="kitty"
#
# Kitty reads its theme from the `current-theme.conf` file
# in its .config directory.
path="$1"
package="$2"
theme="$3"
permanent="$4"
kitty_conf="$HOME/.config/kitty/kitty.conf"
include_conf="$HOME/.config/kitty/current-theme.conf"
## Main Entrypoint
#
# Finds the right theme template file and starts theme
# switching and, if necessary, permanent setting processes.
main() {
dbg_msg $app "Starting Processor"
tfile="$path/$package/colors/base16-$theme.conf"
if ! file_exists "$tfile"; then
dbg_msg $app "error" "Theme template $theme not found in package $package"
exit 1
fi
if [ ! -f "$kitty_conf" ]; then
dbg_msg $app "error" "Alacritty config file not found. Please make sure file exists: $kitty_conf"
fi
if [[ $permanent == "true" ]]; then save; fi
theme
dbg_msg $app "Processor Done"
}
## Theme switcher
#
# Makes sure that if any application instance is
# currently running, it switches to new theme.
theme() {
:
# currently needs to be done through ANSI theme processor.
# May be doable with some invocation of kitty loading config files.
# Probably needs kitty to run with remote execution enabled.
}
## Theme setter
#
# Takes care of permanently writing the desired
# base16 theme into application settings.
save() {
dbg_msg $app "Saving theme"
# replace colorscheme.yml content with new one
cp "$tfile" "$include_conf"
dbg_msg $app "Wrote theme file to $include_conf"
# find import line in alacritty conf
if ! grep -qe "^include ${include_conf##*/}" "${kitty_conf}"; then
printf "\ninclude %s\n" "${include_conf##*/}" >>"$kitty_conf"
dbg_msg $app "Including theme file in imports"
fi
}
# Safe sourcing: https://stackoverflow.com/a/12694189
DIR="${BASH_SOURCE%/*}"
if [[ ! -d $DIR ]]; then DIR="$PWD"; fi
# shellcheck source=utilities.sh
. "$DIR/utilities.sh"
## Dependency Checker
#
# Makes sure the processor is called for the correct
# base16 package, or refuses to run if it is not.
if printf '%s\n' "${dependency[@]}" | grep -q -P "^$package$"; then
main
else
dbg_msg $app "error" "Processor does not work for package $package"
fi

View file

@ -12,18 +12,18 @@ readonly permanent="$4"
# Finds the right theme template file and starts theme # Finds the right theme template file and starts theme
# switching and, if necessary, permanent setting processes. # switching and, if necessary, permanent setting processes.
main() { main() {
dbg_msg $app "Starting Processor" dbg_msg $app "Starting Processor"
tfile="$path/$package/themes/default/base16-$theme.config.py" tfile="$path/$package/themes/default/base16-$theme.config.py"
if ! file_exists "$tfile"; then if ! file_exists "$tfile"; then
dbg_msg $app "error" "Theme template $theme not found in package $package" dbg_msg $app "error" "Theme template $theme not found in package $package"
exit 1 exit 1
fi fi
if [[ "$permanent" == "true" ]]; then save; fi if [[ $permanent == "true" ]]; then save; fi
theme theme
dbg_msg $app "Processor Done" dbg_msg $app "Processor Done"
} }
## Theme switcher ## Theme switcher
@ -31,14 +31,14 @@ main() {
# Makes sure that if any application instance is # Makes sure that if any application instance is
# currently running, it switches to new theme. # currently running, it switches to new theme.
theme() { theme() {
dbg_msg $app "Switching theme" dbg_msg $app "Switching theme"
# make sure qutebrowser is running # make sure qutebrowser is running
pgrep qutebrowser >/dev/null || { pgrep qutebrowser >/dev/null || {
dbg_msg $app "warn" "No instance running, not switching theme" dbg_msg $app "warn" "No instance running, not switching theme"
return return
} }
qutebrowser --loglevel error ":config-source $tfile" qutebrowser --loglevel error ":config-source $tfile"
dbg_msg $app "Successfully switched theme" dbg_msg $app "Successfully switched theme"
} }
## Theme setter ## Theme setter
@ -46,17 +46,17 @@ theme() {
# Takes care of permanently writing the desired # Takes care of permanently writing the desired
# base16 theme into application settings. # base16 theme into application settings.
save() { save() {
dbg_msg $app "Saving theme" dbg_msg $app "Saving theme"
local qt_dir="${XDG_CONFIG_HOME:-/$HOME/.config}/qutebrowser" local qt_dir="${XDG_CONFIG_HOME:-/$HOME/.config}/qutebrowser"
if [[ -d "$qt_dir" ]]; then if [[ -d $qt_dir ]]; then
cat "$tfile" >"$qt_dir/colorscheme.py" cat "$tfile" >"$qt_dir/colorscheme.py"
dbg_msg $app "Saved theme to $qt_dir/colorscheme.py" dbg_msg $app "Saved theme to $qt_dir/colorscheme.py"
include "$qt_dir" include "$qt_dir"
else else
dbg_msg $app "warn" "No qutebrowser configuration directory found" dbg_msg $app "warn" "No qutebrowser configuration directory found"
fi fi
} }
## Theme includer ## Theme includer
@ -66,20 +66,20 @@ save() {
# This is the most invasive step of theming since it # This is the most invasive step of theming since it
# rewrites within existing configuration files. # rewrites within existing configuration files.
include() { include() {
local qt_dir="$1" local qt_dir="$1"
dbg_msg $app "Including theme in configuration" dbg_msg $app "Including theme in configuration"
if file_exists "$qt_dir/config.py"; then if file_exists "$qt_dir/config.py"; then
line_exists_or_append "$qt_dir/config.py" "config.source('colorscheme.py')" line_exists_or_append "$qt_dir/config.py" 'config.source("colorscheme.py")'
dbg_msg $app "Successfully included theme in configuration" dbg_msg $app "Successfully included theme in configuration"
else else
dbg_msg $app "warn" "No default configuration file found" dbg_msg $app "warn" "No default configuration file found"
fi fi
} }
# Safe sourcing: https://stackoverflow.com/a/12694189 # Safe sourcing: https://stackoverflow.com/a/12694189
DIR="${BASH_SOURCE%/*}" DIR="${BASH_SOURCE%/*}"
if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi if [[ ! -d $DIR ]]; then DIR="$PWD"; fi
# shellcheck source=utilities.sh # shellcheck source=utilities.sh
. "$DIR/utilities.sh" . "$DIR/utilities.sh"
## Dependency Checker ## Dependency Checker
@ -87,7 +87,7 @@ if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi
# Makes sure the processor is called for the correct # Makes sure the processor is called for the correct
# base16 package, or refuses to run if it is not. # base16 package, or refuses to run if it is not.
if printf '%s\n' "${dependency[@]}" | grep -q -P "^$package$"; then if printf '%s\n' "${dependency[@]}" | grep -q -P "^$package$"; then
main main
else else
dbg_msg $app "error" "Processor does not work for package $package" dbg_msg $app "error" "Processor does not work for package $package"
fi fi

View file

@ -2,14 +2,11 @@
readonly dependency=("nicodebo/base16-zathura") readonly dependency=("nicodebo/base16-zathura")
readonly app="zathura" readonly app="zathura"
# #
# zathura does not support including other files into # zathura now allows including other files into its
# its configuration yet. As such, this processor needs to # main configuration file. That means we can be less
# change the user's configuration file *itself*. # intrusive about the colorscheme changes and only insert
# # the include line, adding any colorscheme options
# This will generally not be a problem, though it can lead # in a completely different file.
# to corrupted configurations in exceptional circumstances
# (such as every line being preceded by the process control
# regex, for whatever reason).
# #
# In general, the processor looks for a specific line in the # In general, the processor looks for a specific line in the
# following format: # following format:
@ -24,28 +21,30 @@ package="$2"
theme="$3" theme="$3"
permanent="$4" permanent="$4"
zathuraconf="$HOME/.config/zathura/zathurarc" zathura_conf_dir="$HOME/.config/zathura"
zathuraconf="$zathura_conf_dir/zathurarc"
colorscheme_filename="colorscheme"
## Main Entrypoint ## Main Entrypoint
# #
# Finds the right theme template file and starts theme # Finds the right theme template file and starts theme
# switching and, if necessary, permanent setting processes. # switching and, if necessary, permanent setting processes.
main() { main() {
dbg_msg $app "Starting Processor" dbg_msg $app "Starting Processor"
tfile="$path/$package/build_schemes/base16-$theme.config" tfile="$path/$package/build_schemes/base16-$theme.config"
if ! file_exists "$tfile"; then if ! file_exists "$tfile"; then
dbg_msg $app "error" "Theme template $theme not found in package $package" dbg_msg $app "error" "Theme template $theme not found in package $package"
exit 1 exit 1
fi fi
if [ ! -f "$zathuraconf" ]; then if [ ! -f "$zathuraconf" ]; then
dbg_msg $app "error" "Zathura config file not found. Please make sure file exists: $zathuraconf" dbg_msg $app "error" "Zathura config file not found. Please make sure file exists: $zathuraconf"
fi fi
if [[ "$permanent" == "true" ]]; then save; fi if [[ "$permanent" == "true" ]]; then save; fi
dbg_msg $app "Processor Done" dbg_msg $app "Processor Done"
} }
## Theme setter ## Theme setter
@ -53,40 +52,18 @@ main() {
# Takes care of permanently writing the desired # Takes care of permanently writing the desired
# base16 theme into application settings. # base16 theme into application settings.
save() { save() {
dbg_msg $app "Saving theme" dbg_msg $app "Saving theme"
# following format: if ! $(grep -qe "^include $colorscheme_filename" "$zathuraconf"); then
# '# Base16 [theme name] - zathura color config' dbg_msg $app "No include directive for colorscheme file found in configuration file. Adding it now."
# from which it will delete everything until it finds a line: printf "\ninclude %s\n" "$colorscheme_filename" >>"$zathuraconf"
# '# Base16End [theme name] - zathura color config' else
startline="$(grep -ne '^# Base16 .*$' "$zathuraconf" | cut -f1 -d:)" dbg_msg $app "Found include directive for colorscheme file. No operation necessary."
endline="$(grep -ne '^# Base16End .*- zathura color config$' "$zathuraconf" | cut -f1 -d:)" fi
tmpfile="$zathuraconf.tmp" cat "$tfile" >"${zathura_conf_dir}/${colorscheme_filename}" || exit 1
tmptheme="$zathuraconf.thm.tmp"
if [[ -n "$startline" && -z "$endline" ]] || [[ -z "$startline" && -n "$endline" ]] || [[ "$startline" -gt "$endline" ]]; then dbg_msg $app "Saved theme to ${zathura_conf_dir}/${colorscheme_filename}"
dbg_msg $app "error" "Base 16 Pattern not correctly recognized in file: $zathuraconf. Please make sure pattern begins with # Base 16 and ends with # Base 16end and only exists once in the file. No changes to file made."
elif [[ -z "$startline" && -z "$endline" ]]; then
cat "$zathuraconf" >"$tmpfile" || exit 1
else
# remove old lines of any base16 theme
sed -e "$startline,$endline d" "$zathuraconf" >"$tmpfile" || exit 1
fi
# fix template theme name key for easier inclusion
sed -e "s/^colors:/$theme: \&colorscheme/" "$tfile" >"$tmptheme" || exit 1
echo "# Base16End $theme - zathura color config" >>"$tmptheme"
# combine both into final config file
# replace original file with new colorscheme-added version
cat "$tmptheme" "$tmpfile" >"$zathuraconf"
rm "$tmptheme" "$tmpfile"
dbg_msg $app "Saved theme to $zathuraconf"
} }
# Safe sourcing: https://stackoverflow.com/a/12694189 # Safe sourcing: https://stackoverflow.com/a/12694189
@ -99,7 +76,7 @@ if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi
# Makes sure the processor is called for the correct # Makes sure the processor is called for the correct
# base16 package, or refuses to run if it is not. # base16 package, or refuses to run if it is not.
if printf '%s\n' "${dependency[@]}" | grep -q -P "^$package$"; then if printf '%s\n' "${dependency[@]}" | grep -q -P "^$package$"; then
main main
else else
dbg_msg $app "error" "Processor does not work for package $package" dbg_msg $app "error" "Processor does not work for package $package"
fi fi