1
0
Fork 0
mirror of https://github.com/davatorium/rofi.git synced 2024-11-18 13:54:36 -05:00
rofi/script/rofi-theme-selector
2016-10-27 16:41:49 +02:00

126 lines
2.6 KiB
Bash
Executable file

#!/usr/bin/env bash
#
# This code is released in public domain by Dave Davenport <qball@gmpclient.org>
#
ROFI=rofi
ROFI_FLAGS=
TMP_CONFIG_FILE=$(mktemp)
declare -a themes
declare -a theme_names
function find_themes()
{
DIRS=${XDG_DATA_DIRS}
if [ -z "${XDG_DATA_DIRS}" ]
then
echo "XDG_DATA_DIRS needs to be set for this script to function."
fi
# Add user dir.
DIRS+="${HOME}/.local/share/"
OLDIFS=${IFS}
IFS=:
for p in ${DIRS}; do
TD=${p}rofi/themes/
if [ -d "${TD}" ]
then
for file in ${TD}/*.theme
do
themes+=(${file})
FN=$(basename ${file})
NAME=${FN%.*}
USER=$(sed -n 's/^! User: \(.*\)/\1/p' ${file} )
if [ -z "${USER}" ]
then
theme_names+=(${NAME})
else
theme_names+=("${NAME} by ${USER}")
fi
done
fi
done
IFS=${OLDIFS}
}
function create_config_copy()
{
${ROFI} -dump-xresources > ${TMP_CONFIG_FILE}
}
function create_theme_list()
{
OLDIFS=${IFS}
IFS="""
"""
for themen in ${theme_names[@]}
do
echo ${themen}
done
IFS=${OLDIFS}
}
declare -i SELECTED
CUR="default"
function select_theme ()
{
MORE_FLAGS=(-dmenu -format i -no-custom -p \"Theme\" -markup -config ${TMP_CONFIG_FILE})
MORE_FLAGS+=(-kb-custom-1 "Alt-a")
while true
do
MESG="""You can preview themes by hitting <b>Enter</b>.
<b>Alt-a</b> to accept the new theme.
<b>Escape</b> to cancel
Current theme: <b>${CUR}</b>"""
RES=$( create_theme_list | ${ROFI} ${MORE_FLAGS[@]} -mesg "${MESG}")
RTR=$?
if [ ${RTR} = 10 ]
then
return 0;
elif [ ${RTR} = 1 ]
then
return 1;
fi
sed -i '/#include .*/d' ${TMP_CONFIG_FILE}
echo "#include \"${themes[${RES}]}\"" >> ${TMP_CONFIG_FILE}
CUR=${theme_names[${RES}]}
SELECTED=${RES}
done
}
function set_theme()
{
CDIR="${HOME}/.config/rofi/"
if [ ! -d "${CDIR}" ]
then
mkdir -p ${CDIR}
fi
if [ -f "${CDIR}/config" ]
then
sed -i "/#include \".*\.theme\"$/d" "${CDIR}/config"
fi
echo "#include \"${1}\"" >> "${CDIR}/config"
}
##
# Find all themes
##
find_themes
##
# Do check if there are themes.
##
create_config_copy
##
# Show them to user.
##
if select_theme && [ -n "${SELECTED}" ]
then
echo "Selected: ${themes[${SELECTED}]}"
set_theme "${themes[${SELECTED}]}"
fi
rm ${TMP_CONFIG_FILE}