Skip to content

Instantly share code, notes, and snippets.

@pnposch
Created January 17, 2026 13:35
Show Gist options
  • Select an option

  • Save pnposch/e9de659eb301c0ed84ff83eaa1927c01 to your computer and use it in GitHub Desktop.

Select an option

Save pnposch/e9de659eb301c0ed84ff83eaa1927c01 to your computer and use it in GitHub Desktop.
#!/bin/bash
# Define paths for Fedora 43 desktop and icon standards
APPS_DIR="$HOME/.local/share/applications"
ICON_DIR="$HOME/.local/share/icons/appimages"
mkdir -p "$APPS_DIR" "$ICON_DIR"
for app_file in *.AppImage *.appimage; do
[ -e "$app_file" ] || continue
chmod +x "$app_file"
FULL_PATH=$(realpath "$app_file")
APP_BASE=$(basename "$app_file" .AppImage)
APP_BASE=$(basename "$APP_BASE" .appimage)
FINAL_DESKTOP="$APPS_DIR/SCRIPT_${APP_BASE,,}.desktop"
if [[ -f "$FINAL_DESKTOP" ]]; then
echo "Skipping: '$APP_BASE' already integrated."
continue
fi
echo "Processing $APP_BASE..."
# 1. Extract internal metadata
./"$app_file" --appimage-extract > /dev/null 2>&1
# 2. Extract and move the correct icon
TARGET_ICON="$ICON_DIR/${APP_BASE,,}.png"
if [ -L "squashfs-root/.DirIcon" ]; then
# .DirIcon is a symlink, copy the actual file it points to
cp -L "squashfs-root/.DirIcon" "$TARGET_ICON"
elif [ -f "squashfs-root/.DirIcon" ]; then
# .DirIcon is a regular file, move it
mv "squashfs-root/.DirIcon" "$TARGET_ICON"
fi
# 3. Find and modify the internal desktop file
INTERNAL_DESKTOP=$(find squashfs-root -name "*.desktop" | head -n 1)
if [ -f "$INTERNAL_DESKTOP" ]; then
# Copy the internal file but fix the Exec and Icon paths
grep -vE "^(Exec|Icon|TryExec)=" "$INTERNAL_DESKTOP" > "$FINAL_DESKTOP"
echo "Exec=$FULL_PATH" >> "$FINAL_DESKTOP"
echo "Icon=$TARGET_ICON" >> "$FINAL_DESKTOP"
echo "Comment=Integrated AppImage" >> "$FINAL_DESKTOP"
# Ensure StartupWMClass exists; if not, use the internal Name
if ! grep -q "StartupWMClass" "$FINAL_DESKTOP"; then
WM_CLASS=$(grep "^Name=" "$FINAL_DESKTOP" | head -n 1 | cut -d'=' -f2)
echo "StartupWMClass=$WM_CLASS" >> "$FINAL_DESKTOP"
fi
else
# Fallback if no internal desktop file is found
cat <<EOF > "$FINAL_DESKTOP"
[Desktop Entry]
Type=Application
Name=$APP_BASE
Exec=$FULL_PATH
Icon=utilities-terminal
StartupWMClass=$APP_BASE
EOF
fi
# Cleanup
rm -rf squashfs-root
echo "Successfully integrated: $APP_BASE"
done
update-desktop-database "$APPS_DIR"
@pnposch
Copy link
Author

pnposch commented Jan 17, 2026

Add appimages to fedora (and possibly other linux distribution) menu

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