# -*-eselect-*- vim: ft=eselect # Copyright 1999-2021 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 DESCRIPTION="Manage fontconfig /etc/fonts/conf.d symlinks" AUTHOR="cardoe@gentoo.org" MAINTAINER="fonts@gentoo.org" VERSION=20210701 find_targets() { local bc bcdirs=() for bc in /etc/fonts/conf.avail ${ES_FONTCONFIG_DIRS}; do bcdirs+=("${EROOT}${bc}/*.conf") done for bc in ${bcdirs[@]}; do [[ -e ${bc} ]] && echo "${bc##*/}" done | sort -u } is_enabled() { [[ -e ${EROOT}/etc/fonts/conf.d/${1} ]] } ### list action ### describe_list() { echo "List available fontconfig .conf files" } do_list() { local n targets=($(find_targets)) write_list_start \ "Available fontconfig .conf files ($(highlight '*') is enabled):" for (( n = 0; n < ${#targets[@]}; ++n )); do is_enabled "${targets[n]}" && targets[n]=$(highlight_marker "${targets[n]}") done write_numbered_list -m "(none found)" "${targets[@]}" } ### enable action ### describe_enable() { echo "Enable specified fontconfig .conf file(s)" } describe_enable_parameters() { echo "" } describe_enable_options() { echo " : Target name or number (from 'list' action)" } do_enable() { local bc bcdir="${EROOT}/etc/fonts/conf.d" x [[ -z ${1} ]] && die -q "You didn't specify any .conf files to enable" # create directory if necessary if [[ ! -d ${bcdir} && -w ${bcdir%/*} ]] ; then mkdir ${bcdir} || die -q "Failed to create ${bcdir}" elif [[ ! -d ${bcdir} ]] ; then die -q "You don't have permission to create ${bcdir}" fi # make sure we have proper permissions [[ -w ${bcdir} ]] || die -q "You don't have permission to write to ${bcdir}" local targets=($(find_targets)) for bc; do local file target=${bc} is_number "${target}" && target=${targets[${target} - 1]} [[ -z ${target} ]] && die -q "Target \"${bc}\" doesn't appear to be valid!" bc=${target} # ignore any unrecognized options [[ ${bc} == --* ]] && continue # what form is the argument in? case ${bc} in # absolute path /*) file="${EROOT}${bc}" ;; # relative path */*) file="${EROOT}${PWD}/${bc}" ;; # no path *) [[ -n ${ES_FONTCONFIG_DIRS} ]] && for x in ${ES_FONTCONFIG_DIRS}; do [[ -f ${EROOT}${x}/${bc} ]] && file="${EROOT}${x}/${bc}" && break done || file="${EROOT}/etc/fonts/conf.avail/${bc}" ;; esac # does it exist? if [[ ! -e ${file} ]]; then write_error_msg "${file} doesn't exist" continue fi # already installed? if [[ -e ${bcdir}/${bc##*/} ]]; then write_error_msg "${bc##*/} is already installed" continue fi # finally, create the symlink ln -rs "${file}" "${bcdir}" || die -q "Failed to create symlink from \"${file}\" to \"${bcdir}\"" done } ### disable action ### describe_disable() { echo "Disable specified fontconfig .conf file(s)" } describe_disable_parameters() { echo "" } describe_disable_options() { echo " : Target name or number (from 'list' action)" } do_disable() { local bc bcdir="${EROOT}/etc/fonts/conf.d" [[ -z ${1} ]] && die -q "You didn't specify any .conf files to disable" local targets=($(find_targets)) for bc; do local file target=${bc} is_number "${target}" && target=${targets[${target} - 1]} [[ -z ${target} ]] && die -q "Target \"${bc}\" doesn't appear to be valid!" bc=${target} file="${bcdir}/${bc}" # ignore any unrecognized options [[ ${bc} == --* ]] && continue # is in installed? if [[ ! -e ${file} ]]; then write_error_msg "${bc} is not installed" continue fi # remove it if we have permissions if [[ -w ${file%/*} ]]; then rm "${file}" || die -q "Failed to remove ${file}" else die -q "You don't have permission to remove ${file}" fi done }