# Default applications (xdg mimeapps.list) — without this, "open a
# PDF/photo" falls to whatever GTK guesses first (GIMP for images).
# Every association is mkDefault AND degrades gracefully by design: an
# entry whose .desktop file isn't installed is skipped by GIO/xdg-open,
# which then falls through to whatever else claims the type — so
# deleting an app from the template suite (or never uncommenting the
# browser) leaves no broken "open" behaviour, just the old guessing.
{ config, lib, ... }:

lib.mkIf config.nomarchy.mime.enable {
  xdg.mimeApps = {
    enable = lib.mkDefault true;
    defaultApplications = lib.mapAttrs (_: v: lib.mkDefault v) {
      "application/pdf" = "org.pwmt.zathura.desktop";

      "image/png" = "imv.desktop";
      "image/jpeg" = "imv.desktop";
      "image/gif" = "imv.desktop";
      "image/webp" = "imv.desktop";
      "image/avif" = "imv.desktop";
      "image/bmp" = "imv.desktop";
      "image/tiff" = "imv.desktop";
      "image/svg+xml" = "imv.desktop";

      # Video → mpv (the template's media player).
      "video/mp4" = "mpv.desktop";
      "video/webm" = "mpv.desktop";
      "video/x-matroska" = "mpv.desktop";
      "video/quicktime" = "mpv.desktop";

      # Audio → Amberol (the template's GTK4 music player). Amberol
      # registers these types itself, so this only sets the preference over
      # mpv, which also claims them. Both x- and canonical names because
      # files report either. Degrades to mpv/whatever if Amberol is dropped.
      "audio/mpeg" = "io.bassi.Amberol.desktop";
      "audio/flac" = "io.bassi.Amberol.desktop";
      "audio/x-flac" = "io.bassi.Amberol.desktop";
      "audio/ogg" = "io.bassi.Amberol.desktop";
      "audio/x-vorbis+ogg" = "io.bassi.Amberol.desktop";
      "audio/opus" = "io.bassi.Amberol.desktop";
      "audio/wav" = "io.bassi.Amberol.desktop";
      "audio/x-wav" = "io.bassi.Amberol.desktop";
      "audio/mp4" = "io.bassi.Amberol.desktop";
      "audio/x-m4a" = "io.bassi.Amberol.desktop";
      "audio/aac" = "io.bassi.Amberol.desktop";

      # The template's active editor; degrades if you drop vscode.
      "text/plain" = "code.desktop";

      # The system-side Thunar (nomarchy.system.fileManager).
      "inode/directory" = "thunar.desktop";

      # The template ships no browser by default (open Decision) — these
      # are inert until one is installed; firefox is the template's first
      # suggestion. A different browser registers its own handler and
      # wins once these entries stay dead.
      "text/html" = "firefox.desktop";
      "x-scheme-handler/http" = "firefox.desktop";
      "x-scheme-handler/https" = "firefox.desktop";
    };
  };
}
