#!/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 "ему нужно перечитать базу (обычно достаточно перезапуска)."