Add app icon (mic + waveform) and fix desktop categories

- share/icons/hicolor/: SVG source + PNG fallbacks (48-256 px); the
  desktop entry now uses Icon=meetrec instead of a stock theme icon
- install.sh installs the icon into the hicolor tree, refreshes the
  GTK icon cache, and cleans up on uninstall
- Categories fixed to AudioVideo;Audio per the menu spec (bare Audio
  is a subcategory requiring its main category); desktop-file-validate
  is clean now
This commit is contained in:
2026-09-07 11:09:00 +02:00
parent e14a6bfe9f
commit e5ec95a5fb
8 changed files with 40 additions and 4 deletions
+2 -1
View File
@@ -44,7 +44,7 @@ This:
1. copies the app to `~/.local/share/meetrec`, 1. copies the app to `~/.local/share/meetrec`,
2. creates a venv and installs all dependencies, 2. creates a venv and installs all dependencies,
3. installs the `meetrec` (GUI) and `meetrec-cli` launchers into `~/.local/bin`, 3. installs the `meetrec` (GUI) and `meetrec-cli` launchers into `~/.local/bin`,
4. installs the XDG desktop entry (`~/.local/share/applications/meetrec.desktop`), 4. installs the XDG desktop entry and icon (app menu shows **MeetRec** with its own red mic icon),
5. pre-downloads the `small` Whisper model (first run is otherwise slow). 5. pre-downloads the `small` Whisper model (first run is otherwise slow).
Options: Options:
@@ -139,6 +139,7 @@ install.sh install / uninstall into a local prefix
bin/meetrec GUI launcher (installed into ~/.local/bin) bin/meetrec GUI launcher (installed into ~/.local/bin)
bin/meetrec-cli CLI launcher (installed into ~/.local/bin) bin/meetrec-cli CLI launcher (installed into ~/.local/bin)
share/applications/meetrec.desktop XDG desktop entry share/applications/meetrec.desktop XDG desktop entry
share/icons/hicolor/ app icon (SVG + PNG fallbacks)
android/ native Android app (Kotlin + whisper.cpp JNI) android/ native Android app (Kotlin + whisper.cpp JNI)
``` ```
+10 -1
View File
@@ -58,6 +58,7 @@ if [ "$UNINSTALL" = 1 ]; then
rm -rf "$APP_DIR" rm -rf "$APP_DIR"
rm -f "$BIN_DIR/meetrec" "$BIN_DIR/meetrec-cli" rm -f "$BIN_DIR/meetrec" "$BIN_DIR/meetrec-cli"
rm -f "$DESKTOP_DIR/meetrec.desktop" rm -f "$DESKTOP_DIR/meetrec.desktop"
find "$PREFIX/share/icons/hicolor" -name 'meetrec.*' -type f -delete 2>/dev/null || true
if command -v update-desktop-database >/dev/null 2>&1; then if command -v update-desktop-database >/dev/null 2>&1; then
update-desktop-database "$DESKTOP_DIR" 2>/dev/null || true update-desktop-database "$DESKTOP_DIR" 2>/dev/null || true
fi fi
@@ -150,12 +151,20 @@ if [ -x "$PREFIX/share/meetrec/whisper-cpp/bin/whisper-cli" ]; then
echo " (whisper.cpp engine installed — select 'whisper-cpp' to use the GPU)" echo " (whisper.cpp engine installed — select 'whisper-cpp' to use the GPU)"
fi fi
echo "==> Installing XDG desktop entry" echo "==> Installing XDG desktop entry and icon"
install -m 0644 "$SCRIPT_DIR/share/applications/meetrec.desktop" \ install -m 0644 "$SCRIPT_DIR/share/applications/meetrec.desktop" \
"$DESKTOP_DIR/meetrec.desktop" "$DESKTOP_DIR/meetrec.desktop"
for f in "$SCRIPT_DIR"/share/icons/hicolor/*/apps/meetrec.* \
"$SCRIPT_DIR"/share/icons/hicolor/scalable/apps/meetrec.svg; do
rel="${f#"$SCRIPT_DIR"/share/icons/}"
install -Dm 0644 "$f" "$PREFIX/share/icons/$rel"
done
if command -v update-desktop-database >/dev/null 2>&1; then if command -v update-desktop-database >/dev/null 2>&1; then
update-desktop-database "$DESKTOP_DIR" 2>/dev/null || true update-desktop-database "$DESKTOP_DIR" 2>/dev/null || true
fi fi
if command -v gtk-update-icon-cache >/dev/null 2>&1; then
gtk-update-icon-cache -q -t -f "$PREFIX/share/icons/hicolor" 2>/dev/null || true
fi
if [ "$DOWNLOAD_MODEL" = 1 ]; then if [ "$DOWNLOAD_MODEL" = 1 ]; then
echo "==> Pre-downloading Whisper model '$MODEL' (first run only, can take a while)" echo "==> Pre-downloading Whisper model '$MODEL' (first run only, can take a while)"
+2 -2
View File
@@ -5,8 +5,8 @@ Name=MeetRec
GenericName=Meeting Recorder GenericName=Meeting Recorder
Comment=Record in-person meetings and transcribe them with Whisper Comment=Record in-person meetings and transcribe them with Whisper
Exec=meetrec Exec=meetrec
Icon=audio-microphone Icon=meetrec
Terminal=false Terminal=false
Categories=Audio; Categories=AudioVideo;Audio;
Keywords=meeting;recording;recorder;transcription;transcript;whisper;audio;microphone; Keywords=meeting;recording;recorder;transcription;transcript;whisper;audio;microphone;
StartupNotify=true StartupNotify=true
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
<title>MeetRec</title>
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#e74c3c"/>
<stop offset="1" stop-color="#922b21"/>
</linearGradient>
</defs>
<rect x="4" y="4" width="120" height="120" rx="28" fill="url(#bg)"/>
<!-- microphone: capsule + cradle -->
<rect x="50" y="18" width="28" height="42" rx="14" fill="#ffffff"/>
<path d="M 36 48 v 8 a 28 28 0 0 0 56 0 v -8"
fill="none" stroke="#ffffff" stroke-width="9" stroke-linecap="round"/>
<!-- waveform: voice becoming transcript -->
<g fill="#ffffff">
<rect x="32" y="96" width="8" height="14" rx="4"/>
<rect x="46" y="91" width="8" height="24" rx="4"/>
<rect x="60" y="95" width="8" height="16" rx="4"/>
<rect x="74" y="91" width="8" height="24" rx="4"/>
<rect x="88" y="96" width="8" height="14" rx="4"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1009 B