Last active
January 22, 2024 13:40
-
-
Save dequbed/02da334cb40bf59aeb4dbd5d163a0559 to your computer and use it in GitHub Desktop.
Manage your genders using eselect.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*-eselect-*- vim: ft=eselect | |
# Copyright 2005-2020 Gentoo Authors | |
# Distributed under the terms of the GNU GPL version 2 or later | |
DESCRIPTION="Manage available genders" | |
MAINTAINER="transagenda@gentoo.org" | |
VERSION="42" | |
find_genders() { | |
local f | |
for f in "${EROOT}"/usr/share/genders/*; do | |
[[ -f ${f} ]] && basename "${f}" | |
done | |
} | |
set_gender() { | |
local gender=$1 | |
if is_number "${gender}"; then | |
local genders=( $(find_genders) ) | |
[[ ${gender} -ge 1 && ${gender} -le ${#genders[@]} ]] \ | |
|| die -q "Number out of range: $1" | |
gender=${genders[gender-1]} | |
fi | |
if [[ "none" != ${gender} ]]; then | |
echo "${gender}" > "${EROOT}/etc/conf.d/gender" | |
fi | |
} | |
remove_gender() { | |
rm -f "${EROOT}/etc/conf.d/gender" | |
} | |
### show action ### | |
describe_show() { | |
echo "Show the current configured gender" | |
} | |
do_show() { | |
write_list_start "Current gender:" | |
if [[ -e ${EROOT}/etc/conf.d/gender ]]; then | |
local gender=$(< "${EROOT}/etc/conf.d/gender") | |
write_kv_list_entry "${gender%/}" "" | |
else | |
write_kv_list_entry "(none)" "" | |
fi | |
} | |
### list action ### | |
describe_list() { | |
echo "List available genders" | |
} | |
do_list() { | |
local i genders=( $(find_genders) ) | |
write_list_start "Available genders:" | |
for (( i = 0; i < ${#genders[@]}; i++ )); do | |
local gender=$(cat ${genders[i]}) | |
# highlight the target where the symlink is pointing to | |
[[ -e "${EROOT}/etc/conf.d/gender" && \ | |
${genders[i]} = $(< "${EROOT}/etc/conf.d/gender") ]] \ | |
&& genders[i]=$(highlight_marker "${genders[i]}") | |
done | |
write_numbered_list -m "(none found)" "${genders[@]}" | |
} | |
### set action ### | |
describe_set() { | |
echo "Set a new gender" | |
} | |
describe_set_parameters() { | |
echo "<gender>" | |
} | |
describe_set_options() { | |
echo "gender : Gender name or number (from 'list' action)" | |
} | |
do_set() { | |
[[ -z $1 ]] && die -q "You didn't tell me what your gender is" | |
[[ $# -gt 1 ]] && die -q "Too many parameters" | |
if [[ -e ${EROOT}/etc/conf.d/gender ]]; then | |
# existing gender | |
remove_gender || die -q "Couldn't remove existing gender" | |
set_gender "$1" || die -q "Couldn't set a new gender" | |
else | |
set_gender "$1" || die -q "Couldn't set a new gender" | |
fi | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
To use this:
/usr/share/eselect/modules/genders.eselect
/usr/share/genders
/usr/share/genders
for each of your genders (e.g./usr/share/genders/female
)eselect gender list
to check that everything works.