1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-10 07:25:37 -05:00
Files
DankMaterialShell/scripts/linux_env_diagnostics.sh
purian23 1355a77fd0 Implement icon for niri screenshots
- Fixed debug icon warning logic
- Add linux os environment script
2025-07-18 21:13:50 -04:00

234 lines
7.9 KiB
Bash
Executable File
Raw 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
# Diagnostic script for Qt/QML environment differences
echo "==== Qt Version ===="
qmake --version 2>/dev/null || qtpaths --qt-version 2>/dev/null || echo "qmake/qtpaths not found"
echo "\n==== Qt Platform Theme ===="
echo "QT_QPA_PLATFORMTHEME: $QT_QPA_PLATFORMTHEME"
echo "\n==== Qt Scale/Font DPI ===="
echo "QT_SCALE_FACTOR: $QT_SCALE_FACTOR"
echo "QT_FONT_DPI: $QT_FONT_DPI"
echo "GDK_SCALE: $GDK_SCALE"
echo "GDK_DPI_SCALE: $GDK_DPI_SCALE"
if command -v xrdb >/dev/null; then
echo "\n==== X11 DPI (xrdb) ===="
xrdb -query | grep dpi
fi
echo "\n==== Icon Font Availability (for cross-distro compatibility) ===="
echo "Checking icon fonts used by Quickshell Icon component..."
# Check Material Design Icons
echo -n "Material Symbols Rounded: "
if fc-list | grep -q "Material Symbols Rounded"; then
echo "✓ FOUND"
MATERIAL_SYMBOLS_FOUND=1
else
echo "✗ NOT FOUND"
MATERIAL_SYMBOLS_FOUND=0
fi
echo -n "Material Icons Round: "
if fc-list | grep -q "Material Icons Round"; then
echo "✓ FOUND"
MATERIAL_ICONS_FOUND=1
else
echo "✗ NOT FOUND"
MATERIAL_ICONS_FOUND=0
fi
# Check FontAwesome 6
echo -n "Font Awesome 6 Free: "
if fc-list | grep -q "Font Awesome 6 Free"; then
echo "✓ FOUND"
FONTAWESOME_FOUND=1
else
echo "✗ NOT FOUND"
FONTAWESOME_FOUND=0
fi
# Check JetBrains Mono Nerd Font
echo -n "JetBrainsMono Nerd Font: "
if fc-list | grep -q "JetBrainsMono Nerd Font"; then
echo "✓ FOUND"
JETBRAINS_NERD_FOUND=1
else
echo -n "✗ NOT FOUND, checking JetBrains Mono: "
if fc-list | grep -q "JetBrains Mono"; then
echo "✓ FOUND (fallback available)"
JETBRAINS_FALLBACK_FOUND=1
else
echo "✗ NOT FOUND"
JETBRAINS_FALLBACK_FOUND=0
fi
fi
echo "\n==== Icon System Recommendation ===="
if [ $MATERIAL_SYMBOLS_FOUND -eq 1 ]; then
echo "✓ OPTIMAL: Material Symbols Rounded found - best icon experience"
elif [ $MATERIAL_ICONS_FOUND -eq 1 ]; then
echo "✓ GOOD: Material Icons Round found - good icon experience"
elif [ $FONTAWESOME_FOUND -eq 1 ]; then
echo "⚠ FAIR: FontAwesome 6 found - acceptable icon experience"
elif [ $JETBRAINS_NERD_FOUND -eq 1 ] || [ $JETBRAINS_FALLBACK_FOUND -eq 1 ]; then
echo "⚠ BASIC: JetBrains Mono found - basic icon experience"
else
echo "⚠ FALLBACK: No icon fonts found - will use emoji fallback"
fi
echo "\n==== Font Installation Recommendations ===="
if [ $MATERIAL_SYMBOLS_FOUND -eq 0 ] && [ $MATERIAL_ICONS_FOUND -eq 0 ]; then
echo "📦 Install Material Design Icons for best experience:"
echo " • Ubuntu/Debian: sudo apt install fonts-material-design-icons-iconfont"
echo " • Fedora: sudo dnf install google-material-design-icons-fonts"
echo " • Arch: sudo pacman -S ttf-material-design-icons"
echo " • Or download from: https://fonts.google.com/icons"
fi
if [ $FONTAWESOME_FOUND -eq 0 ]; then
echo "📦 Install FontAwesome 6 for broader compatibility:"
echo " • Ubuntu/Debian: sudo apt install fonts-font-awesome"
echo " • Fedora: sudo dnf install fontawesome-fonts"
echo " • Arch: sudo pacman -S ttf-font-awesome"
fi
if [ "${JETBRAINS_NERD_FOUND:-0}" -eq 0 ]; then
echo "📦 Install JetBrains Mono Nerd Font for developer icons:"
echo " • Download from: https://github.com/ryanoasis/nerd-fonts/releases"
echo " • Or install via package manager if available"
fi
echo "\n==== Quickshell Icon Component Test ===="
if command -v qs >/dev/null 2>&1; then
echo "Testing Icon component fallback system..."
# Create a temporary test QML file
cat > /tmp/icon_test.qml << 'EOF'
import QtQuick
import "../Common"
Item {
Component.onCompleted: {
var icon = Qt.createQmlObject('import QtQuick; import "../Common"; Icon { name: "battery"; level: 75; charging: false; available: true }', parent)
console.log("Icon system detected:", icon.iconSystem)
console.log("Font family:", icon.font.family)
console.log("Battery icon:", icon.text)
Qt.quit()
}
}
EOF
# Test if we can run the icon test
if [ -f "../Common/Icon.qml" ]; then
echo "Running Icon component test..."
timeout 5s qs -c /tmp/icon_test.qml 2>&1 | grep -E "(Icon system|Font family|Battery icon)" || echo "Icon test failed or timed out"
else
echo "Icon.qml not found - make sure you're running from the quickshell directory"
fi
rm -f /tmp/icon_test.qml
else
echo "Quickshell (qs) not found - cannot test Icon component"
fi
echo "\n==== All Available Fonts ===="
fc-list : family | sort | uniq | grep -E 'Material|Sans|Serif|Mono|Noto|DejaVu|Roboto|Symbols|Awesome|Nerd' || echo "fc-list not found or no relevant fonts"
echo "\n==== Qt Plugins ===="
QT_DEBUG_PLUGINS=1 qtpaths --plugin-dir 2>&1 | head -20 || echo "qtpaths not found or no plugin info"
echo "\n==== QML Import Paths ===="
qtpaths --qml-imports 2>/dev/null || echo "qtpaths not found"
echo "\n==== System Info ===="
uname -a
cat /etc/os-release
echo "\n==== Graphics Drivers ===="
lspci | grep -i vga || echo "lspci not found"
echo "\n==== Wayland/X11 Session ===="
echo "XDG_SESSION_TYPE: ${XDG_SESSION_TYPE:-not set}"
echo "WAYLAND_DISPLAY: ${WAYLAND_DISPLAY:-not set}"
echo "DISPLAY: ${DISPLAY:-not set}"
if [ "$XDG_SESSION_TYPE" = "wayland" ]; then
echo "✓ Running on Wayland"
else
echo "✓ Running on X11"
fi
echo "\n==== Qt Environment Variables ===="
echo "QT_QPA_PLATFORM: ${QT_QPA_PLATFORM:-not set}"
echo "QT_WAYLAND_DECORATION: ${QT_WAYLAND_DECORATION:-not set}"
echo "QT_AUTO_SCREEN_SCALE_FACTOR: ${QT_AUTO_SCREEN_SCALE_FACTOR:-not set}"
echo "QT_ENABLE_HIGHDPI_SCALING: ${QT_ENABLE_HIGHDPI_SCALING:-not set}"
echo "\n==== Cross-Distro Compatibility Issues ===="
echo "Checking for common cross-distro problems..."
# Check for common Qt issues
if [ -z "$QT_QPA_PLATFORMTHEME" ]; then
echo "⚠ QT_QPA_PLATFORMTHEME not set - may cause theme inconsistencies"
fi
# Check for font rendering issues
if [ -z "$FONTCONFIG_PATH" ]; then
echo " FONTCONFIG_PATH not set - using system defaults"
fi
# Check for missing libraries that might cause QML issues
echo -n "Checking for essential libraries: "
MISSING_LIBS=""
for lib in libQt6Core.so.6 libQt6Gui.so.6 libQt6Qml.so.6 libQt6Quick.so.6; do
if ! ldconfig -p | grep -q "$lib"; then
MISSING_LIBS="$MISSING_LIBS $lib"
fi
done
if [ -z "$MISSING_LIBS" ]; then
echo "✓ All essential Qt6 libraries found"
else
echo "⚠ Missing libraries:$MISSING_LIBS"
echo " Install Qt6 development packages for your distro"
fi
echo "\n==== Notification System Check ===="
echo "Checking for common notification issues..."
# Check if notification daemon is running
if pgrep -x "mako" > /dev/null; then
echo "✓ Mako notification daemon running"
elif pgrep -x "dunst" > /dev/null; then
echo "✓ Dunst notification daemon running"
elif pgrep -x "swaync" > /dev/null; then
echo "✓ SwayNC notification daemon running"
else
echo "⚠ No common notification daemon detected"
fi
# Check D-Bus notification service
if busctl --user status org.freedesktop.Notifications >/dev/null 2>&1; then
echo "✓ D-Bus notification service available"
else
echo "⚠ D-Bus notification service not available"
fi
# Check for notification image format issues
echo " Common notification warnings to expect:"
echo " - 'Unable to parse pixmap as rowstride is incorrect' - Discord/Telegram images"
echo " - This is a known issue with some applications sending malformed image data"
echo " - Does not affect notification functionality, only image display"
echo "\n==== Diagnostic Summary ===="
echo "Run this script on different distros to compare environments."
echo "Save output with: ./qt_env_diagnostics.sh > my_system_info.txt"
echo "Share with developers for troubleshooting cross-distro issues."
echo ""
echo "If you see pixmap rowstride warnings, this is normal for some applications."
echo "The notification system will fall back to app icons or default icons."
# End of diagnostics