diff --git a/hypr/.config/hypr/hyprland.conf b/hypr/.config/hypr/hyprland.conf index 5b64274..f007f36 100755 --- a/hypr/.config/hypr/hyprland.conf +++ b/hypr/.config/hypr/hyprland.conf @@ -66,8 +66,9 @@ exec-once = swaync & exec-once = hypridle & exec-once = nextcloud & exec-once = sh ~/.config/hypr/scripts/portal-host-override.sh -exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE -exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE +exec-once = sh ~/.config/hypr/scripts/ensure-mime-defaults.sh +exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE XDG_MENU_PREFIX +exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE XDG_MENU_PREFIX # exec = gsettings set org.gnome.desktop.interface gtk-theme "Breeze-Dark" # for GTK3 apps # exec = gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" # for GTK4 apps @@ -86,6 +87,7 @@ env = HYPRCURSOR_SIZE,24 env = XDG_CURRENT_DESKTOP,Hyprland env = XDG_SESSION_DESKTOP,Hyprland env = XDG_SESSION_TYPE,wayland +env = XDG_MENU_PREFIX,plasma- env = GTK_USE_PORTAL,1 env = GTK_THEME,Adwaita:dark env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 diff --git a/hypr/.config/hypr/scripts/ensure-mime-defaults.sh b/hypr/.config/hypr/scripts/ensure-mime-defaults.sh new file mode 100644 index 0000000..fb87ead --- /dev/null +++ b/hypr/.config/hypr/scripts/ensure-mime-defaults.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +has_desktop() { + [ -f "$HOME/.local/share/applications/$1" ] || [ -f "/usr/share/applications/$1" ] +} + +set_default_if_available() { + desktop_id="$1" + mime_type="$2" + + if has_desktop "$desktop_id"; then + xdg-mime default "$desktop_id" "$mime_type" >/dev/null 2>&1 || true + fi +} + +set_default_if_available org.kde.gwenview.desktop image/jpeg +set_default_if_available org.kde.gwenview.desktop image/png +set_default_if_available org.kde.gwenview.desktop image/webp +set_default_if_available org.kde.gwenview.desktop image/gif + +set_default_if_available org.gnome.Papers.desktop application/pdf +set_default_if_available io.github.celluloid_player.Celluloid.desktop video/mp4 +set_default_if_available io.github.celluloid_player.Celluloid.desktop video/webm +set_default_if_available io.github.celluloid_player.Celluloid.desktop video/mpeg +set_default_if_available celluloid.desktop video/x-matroska + +set_default_if_available userapp-Thunderbird-MTXOJ3.desktop x-scheme-handler/mailto +set_default_if_available userapp-Thunderbird-MTXOJ3.desktop x-scheme-handler/mid +set_default_if_available lmstudio.desktop x-scheme-handler/lmstudio diff --git a/hypr/.config/systemd/user/ensure-mime-defaults.path b/hypr/.config/systemd/user/ensure-mime-defaults.path new file mode 100644 index 0000000..7db9c6b --- /dev/null +++ b/hypr/.config/systemd/user/ensure-mime-defaults.path @@ -0,0 +1,10 @@ +[Unit] +Description=Re-apply MIME defaults when mimeapps files change + +[Path] +PathChanged=%h/.config/mimeapps.list +PathChanged=%h/.local/share/applications/mimeapps.list +Unit=ensure-mime-defaults.service + +[Install] +WantedBy=default.target diff --git a/hypr/.config/systemd/user/ensure-mime-defaults.service b/hypr/.config/systemd/user/ensure-mime-defaults.service new file mode 100644 index 0000000..93b343a --- /dev/null +++ b/hypr/.config/systemd/user/ensure-mime-defaults.service @@ -0,0 +1,10 @@ +[Unit] +Description=Ensure preferred MIME defaults are set +After=graphical-session.target + +[Service] +Type=oneshot +ExecStart=/bin/sh %h/.config/hypr/scripts/ensure-mime-defaults.sh + +[Install] +WantedBy=default.target diff --git a/hypr/README.md b/hypr/README.md index 7e698c2..c136bd2 100644 --- a/hypr/README.md +++ b/hypr/README.md @@ -1,30 +1,77 @@ -# Hyprland Dotfiles (portable portal setup) +# Hyprland Dotfiles (Portal + MIME Stabilisierung) -Diese Konfiguration ist für den Einsatz via `stow` auf unterschiedlichen Systemen vorbereitet. +Diese Konfiguration ist für Nutzung via `stow` ausgelegt und enthält zusätzliche Stabilisierung für Dateizuordnungen (MIME) unter Hyprland. -## Portal-Backends +## WICHTIG: Primärer Fix für MIME-Probleme -Die Portal-Priorität steht in `.config/xdg-desktop-portal/portals.conf` auf: +Wenn Dateizuordnungen in Dolphin verschwinden oder Doppelklicks unzuverlässig sind, ist dies die erste und wichtigste Referenz: -- `hyprland` für Hyprland-spezifische Portale -- `gtk` als primärer, host-unabhängiger Backend für OpenURI/FileChooser/Settings -- `kde` als Fallback +- https://github.com/n4zz/Fix-Dolphin-File-Associations -Damit funktioniert der Dateizuordnungs-Dialog auch ohne komplette GNOME- oder KDE-Session. +Der dort beschriebene Ansatz ist die primäre Lösung. -## Host-Override +Die lokalen `ensure-mime-defaults`-Skripte in diesen Dotfiles sind nur als Zusatz/Notfall-Fallback gedacht, falls trotz primärem Fix weiterhin nichts zuverlässig funktioniert. -`.config/hypr/scripts/portal-host-override.sh` setzt `XDG_MENU_PREFIX=plasma-` nur dann, -wenn KDE-Portal + Plasma-Menüdatei vorhanden sind. Ohne diese Voraussetzungen wird nichts erzwungen. +## Aktiver Stand -## Pakete auf Zielsystemen +### Portal-Backends -Empfohlen (mindestens): +Die Priorität in `.config/xdg-desktop-portal/portals.conf` ist: + +- `hyprland` (Hyprland-spezifische Portale) +- `gtk` (primär für `OpenURI`, `FileChooser`, `Settings`) +- `kde` (Fallback) + +### Session-Umgebung + +In `.config/hypr/hyprland.conf` werden diese Variablen gesetzt und an systemd/DBus exportiert: + +- `XDG_CURRENT_DESKTOP=Hyprland` +- `XDG_SESSION_DESKTOP=Hyprland` +- `XDG_SESSION_TYPE=wayland` +- `XDG_MENU_PREFIX=plasma-` +- `GTK_USE_PORTAL=1` + +### MIME-Selbstheilung + +Hinweis: Dieser Block ist bewusst nur Fallback und nicht die Hauptlösung. + +Dateien: + +- `.config/hypr/scripts/ensure-mime-defaults.sh` +- `.config/systemd/user/ensure-mime-defaults.service` +- `.config/systemd/user/ensure-mime-defaults.path` + +Verhalten: + +- setzt bevorzugte MIME-Defaults beim Login +- setzt sie erneut, wenn `~/.config/mimeapps.list` oder `~/.local/share/applications/mimeapps.list` geändert werden + +## Deployment / Reload + +Nach Änderungen an den Dotfiles: + +1. `stow hypr` (falls Symlinks noch nicht gesetzt sind) +2. `hyprctl reload` +3. `systemctl --user daemon-reload` +4. `systemctl --user restart xdg-desktop-portal.service xdg-desktop-portal-hyprland.service xdg-desktop-portal-gtk.service plasma-xdg-desktop-portal-kde.service` +5. `systemctl --user restart ensure-mime-defaults.service` + +## Verifikation + +- `xdg-mime query default image/jpeg` +- `xdg-mime query default application/pdf` +- `systemctl --user status ensure-mime-defaults.path ensure-mime-defaults.service` +- `systemctl --user status xdg-desktop-portal.service xdg-desktop-portal-hyprland.service xdg-desktop-portal-gtk.service plasma-xdg-desktop-portal-kde.service` + +## Paketvoraussetzungen + +Mindestens empfohlen: - `xdg-desktop-portal` - `xdg-desktop-portal-hyprland` - `xdg-desktop-portal-gtk` -Optional (Fallback): +Optional (Fallback, aktuell genutzt): - `xdg-desktop-portal-kde`