Skip to content

Instantly share code, notes, and snippets.

@dequbed
Last active January 22, 2024 13:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dequbed/02da334cb40bf59aeb4dbd5d163a0559 to your computer and use it in GitHub Desktop.
Save dequbed/02da334cb40bf59aeb4dbd5d163a0559 to your computer and use it in GitHub Desktop.
Manage your genders using eselect.
# -*-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
}
@dequbed
Copy link
Author

dequbed commented Jan 22, 2024

To use this:

  1. Save this file as /usr/share/eselect/modules/genders.eselect
  2. Create the directory /usr/share/genders
  3. Create files under /usr/share/genders for each of your genders (e.g. /usr/share/genders/female)
  4. Run eselect gender list to check that everything works.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment