nlve/tools/install-desktop.sh
4aiman fb6b60bc3f Свой тип файла для проектов: *.nlve больше не текст
Внутри проект — обычный JSON, и система считала его просто текстом:
открывала редактором и рисовала значок текстового файла.

Теперь у него свой тип application/x-nlve-project, свой значок (лист с
загнутым углом и знаком программы) и открытие двойным щелчком. Тип
объявлен наследником application/json, но не простого текста — иначе
редактор снова оказался бы программой по умолчанию.

Всё, что нужно для встраивания в рабочий стол, лежит в packaging и
ставится скриптом tools/install-desktop.sh в домашний каталог, без прав
администратора. Раньше пункт меню и значки существовали только на одной
машине и нигде не были записаны.
2026-08-31 00:13:50 +03:00

75 lines
3.2 KiB
Bash
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Встраивание в рабочий стол: пункт меню, значки и тип файла проекта.
#
# Что делает:
# - кладёт значок программы и значок файла проекта в ~/.local/share/icons
# - описывает тип application/x-nlve-project, чтобы *.nlve перестали
# считаться просто текстом
# - кладёт пункт меню, который открывает такие файлы нашей программой
#
# Всё в домашнем каталоге: прав администратора не нужно, другим
# пользователям системы ничего не меняется.
#
# Запуск: tools/install-desktop.sh [путь к программе]
# По умолчанию берётся nlve рядом с этим репозиторием.
set -u
HERE=$(cd "$(dirname "$0")/.." && pwd)
BIN=${1:-$HERE/nlve}
PKG=$HERE/packaging
DATA=${XDG_DATA_HOME:-$HOME/.local/share}
APPS=$DATA/applications
MIME=$DATA/mime/packages
ICONS=$DATA/icons/hicolor
note() { echo "== $*"; }
fail() { echo "$*" >&2; exit 1; }
[ -x "$BIN" ] || fail "программы нет или она не запускается: $BIN"
[ -d "$PKG" ] || fail "нет каталога $PKG"
note "Значки"
for SIZE in 32 48 64 128; do
mkdir -p "$ICONS/${SIZE}x${SIZE}/apps" "$ICONS/${SIZE}x${SIZE}/mimetypes"
# convert есть не у всех; без него кладём один размер как есть.
if command -v convert >/dev/null 2>&1; then
convert "$PKG/nlve.png" -resize ${SIZE}x${SIZE} \
"$ICONS/${SIZE}x${SIZE}/apps/nlve.png"
convert "$PKG/application-x-nlve-project.png" -resize ${SIZE}x${SIZE} \
"$ICONS/${SIZE}x${SIZE}/mimetypes/application-x-nlve-project.png"
elif [ "$SIZE" = 128 ]; then
cp -f "$PKG/nlve.png" "$ICONS/128x128/apps/nlve.png"
cp -f "$PKG/application-x-nlve-project.png" \
"$ICONS/128x128/mimetypes/application-x-nlve-project.png"
fi
done
note "Тип файла проекта"
mkdir -p "$MIME"
cp -f "$PKG/application-x-nlve-project.xml" "$MIME/nlve.xml"
if command -v update-mime-database >/dev/null 2>&1; then
update-mime-database "$DATA/mime"
else
echo "update-mime-database не найдена: тип не зарегистрируется" >&2
fi
note "Пункт меню"
mkdir -p "$APPS"
sed -e "s|@BIN@|$BIN|g" -e "s|@DIR@|$(dirname "$BIN")|g" \
"$PKG/nlve.desktop.in" > "$APPS/nlve.desktop"
chmod 644 "$APPS/nlve.desktop"
command -v update-desktop-database >/dev/null 2>&1 &&
update-desktop-database "$APPS"
note "Программа по умолчанию для *.nlve"
command -v xdg-mime >/dev/null 2>&1 &&
xdg-mime default nlve.desktop application/x-nlve-project
command -v gtk-update-icon-cache >/dev/null 2>&1 &&
gtk-update-icon-cache -f -t "$ICONS" >/dev/null 2>&1
echo
echo "готово. Проверить: xdg-mime query filetype <файл>.nlve"
echo "Файловый менеджер может показать новый значок не сразу:"
echo "ему нужно перечитать базу (обычно достаточно перезапуска)."