Введение в проблему:
С некоторых пор, уже не помню с каких, из gnome-shell убрали поддержку xdg-menu категорий по кнопке "Показать приложения>все" (Show Applications>all). Сама по себе поддержка осталась, например можно получить автоматические категории с помощью стандартного расширения Applications Menu, которое замещает кнопку "Обзор" раскрывающимся списком, в котором приложения рассортированы по xdg-категориям, в соответствии с записями в desktop-файлах. Но в списке всех приложений по-прежнему останется свалка.
Это не доставляет особых неудобств из-за удобного поиска и возможности вынести избранные приложения в отдельную панель, для быстрого доступа, но заставляет грустить по тем временам, когда программы сразу после установки автоматически аккуратно группировались по категориям.

Работа над решением:
Когда я первый раз столкнулся с этой ситуацией, я стал искать решение, пытался понять зачем поломали и что с этим теперь делать, так как, например, мои родственники в возрасте предпочитают пользоваться именно этим меню для поиска приложений.
В процессе выяснения я установил, что можно решить проблему создав записи о категориях, и распределив вручную приложения через редактирование гномовского "реестра". Такое дружелюбие серьезно пошатнуло мою веру в человечество, но я стал искать дальше, в надежде найти удобный инструмент. На тот момент на роль удобного инструмента смог пригодиться только shell-скрипт aur/gnome-catgen. Он работает следующим образом:

This will create (if it doesn't already exist) and open (with the editor set by $EDITOR, or vi if nothing is set) the .category file in ~/.local/share/applications-categories for the provided category name. In this file, you can now add one application's '.desktop' filename per line. After all the desired applications have been added, you can then run: gnome-catgen -s to apply your configuration.

То-есть, приводит всю процедуру разделения по категориям к простой процедуре записи списка desktop-файлов в файл ~/.local/share/applications-categories/имя_категории.category и последующего запуска gnome-catgen -s. И все бы хорошо, но вручную набивать файл category для gnome-catgen не в ходило в мои планы, благо я изначально всего лишь хотел вернуть xdg-menu.
Поэтому я написал для себя еще один скрипт, который "автоматизирует автоматизатор" и "упрощает упрощатор" gnome-catgen. Этим скриптом я и хотел бы поделиться, возможно кому-то он окажется полезен.

Автоматизатор автоматизатора gnomenu.sh
Скрипт требует для своей работы gnome-catgen, лежащий где-либо на пути, его можно получить, например, установив из aur; запускается от пользователя, для которого генерируются категории. Далее идет сам скрипт, я постарался сделать его более-менее читаемым, насколько позволяет мой скилл в bash и кривое знание английского, поправки приветствуются, хотелось бы набраться ума разума от сообщества:


#!/usr/bin/env bash
##
## name:    gnomenu.sh
## version: 0.0.1
##
## usage:
## gnomenu.sh OPTION [LANG]
## options:
##   -i create gnome-menu categories.
##      option requires an argument,
##      example:
##          en  - for english
##          sys - for system locale
##   -u delete gnome-menu categories
##   -h print this message
##

SysCategoryDir=/usr/share/desktop-directories
LocalCategoryDir=~/.local/share/applications-categories
SysAppDir=/usr/share/applications
LocalAppDir=~/.local/share/applications

USAGE() {
	echo
	awk '/^## usage:$/,/^##$/' $0 | sed 's/^##//;s/^ //;/^$/d'
	echo
}

GET_NAME_ENG() {
	if [[ `echo "$1" | grep X-GNOME` ]];then
		echo "$(grep '^Name=' ${1}.directory | cut -d= -f2 )"
	elif [[ `echo "$1" | grep System` ]];then
		echo "System"
	else
		echo "$(echo "$1" | sed 's/\.desktop$//')"
	fi
}

GET_NAME_LOCAL() {
	if [[ -z $2 ]]||[[ "$2" == "en" ]];then
		local NameLocal=$(GET_NAME_ENG $1)
	else
		local NameLocal="$(grep -P "^Name\[$2\]=" ${1}.directory | cut -d= -f2 )"
	fi

	if [[ "$NameLocal" ]];then
		echo "$NameLocal"
	else
		echo $(GET_NAME_ENG $1)
	fi
}

UNINSTALL() {
	echo "Removing gnome-menu categories..."
	gnome-catgen -x
	rm -rf $LocalCategoryDir
	exit $?
}

INSTALL() {
	echo "Using $LocalLang language..."

	mkdir -p $LocalCategoryDir
	mkdir -p $LocalAppDir

	for CategoryFile in $(ls -1 | sed 's/\.directory$//'| grep -v "X-GNOME-Menu-Applications\|X-GNOME-Other\|xfce"); do
		CategoryNameEng=$(GET_NAME_ENG $CategoryFile)
		CategoryNameLocal=$(GET_NAME_LOCAL $CategoryFile $LocalLang)

		touch "$LocalCategoryDir/${CategoryNameLocal}.category"

		grep -iH "\<$CategoryNameEng\>" $SysAppDir/*.desktop |\
			grep "desktop:Categories=" |\
			cut -d: -f1 |\
			xargs -I{} basename {} >> "$LocalCategoryDir/${CategoryNameLocal}.category"
		grep -iH "\<$CategoryNameEng\>" $LocalAppDir/*.desktop |\
			grep "Categories=" |\
			cut -d: -f1 |\
			xargs -I{} basename {} >> "$LocalCategoryDir/${CategoryNameLocal}.category"
	done

	CategoryOtherLocal=$(GET_NAME_LOCAL X-GNOME-Other $LocalLang)
	gnome-catgen -r | tr ' ' '\n' >> "$LocalCategoryDir/${CategoryOtherLocal}.category"

	gnome-catgen -s
	exit $?
}

while getopts "i:uh" opt; do
	case $opt in
	u)
		uninstall=1
		;;
	i)
		if [[ $(echo $OPTARG | grep -P "\-?[uh]\b") ]];then
			echo "$0: option requires an argument -- i"
			USAGE
			exit 1
		fi
		if [[ $OPTARG == sys ]];then
			LocalLang=$(echo $LANG | cut -d_ -f1)
		else
			LocalLang=$OPTARG
		fi
		install=1
		;;
	h)
		USAGE
		exit 0
		;;
	?)
		USAGE
		exit 1
	esac
done

if [[ $install ]]&&[[ $uninstall ]];then
	echo "$0: you can not use -i and -u actions together"
	USAGE
	exit 1
	elif [[ $install ]];then
	cd $SysCategoryDir && INSTALL
	elif [[ $uninstall ]];then
	UNINSTALL
	else
	echo "$0: you must choose an action"
	USAGE
	exit 1
fi

Использование скрипта сводится к указанию опции -i с аргументом в виде языка, это влияет на то, на каком языке будут созданы категории, пример того что именно ждет скрипт можно посмотреть в desktop-файлах, можно указать в качестве аргумента "sys", тогда будет сделана попытка использовать системную переменную $LANG. В документации xdg сказано, что параметр локализации берется из LC_MESSAGES, но там содержится что-то вида "ru_RU.utf-8", а в файлах directory присутствует только общий "[ru]", поэтому в нехорошем стиле пришлось закостылить для "sys" вот такую гадость:
echo $LANG | cut -d_ -f1
Чтобы обойти несчастья, которые она могла породить скрипт работает таким образом, что в случае получения негодного аргумента для "-i" сработает выбор стандартного англоязычного варианта.
Вернуть все в дефолтное гномовское состояние можно вызовом скрипта с аргументом gnomenu.sh -u, будте внимательны(!), если сами создавали категории в g(d)conf или category-файлы для gnome-catgen, скрипт выполняет gnome-catgen -x и удаляет всю папку с категориями.
Надеюсь, что опус окажется кому-то полезным, ну и жду критики в том числе английского, если не затруднит:)