{ pkgs, config, lib, ... }: let cfg = config.grimmShared; browsers = [ "firefox-beta.desktop" "firefox.desktop" ]; text_editors = [ "nvim.desktop" "geany.desktop" "imhex.desktop" ]; image_viewers = [ "org.nomacs.ImageLounge.desktop" "org.kde.krita.desktop" "draw.desktop" ]; audio_players = [ "vlc.desktop" ]; video_viewers = [ "vlc.desktop" ]; document_viewers = [ "org.pwmt.zathura-pdf-mupdf.desktop" "com.github.jeromerobert.pdfarranger.desktop" ] ++ browsers; cad = [ "org.freecadweb.FreeCAD.desktop" "PrusaSlicer.desktop" "openscad.desktop" ]; tex_editors = [ ] ++ text_editors; in { config = with cfg; lib.mkIf (enable && portals && graphical) { xdg.mime.enable = true; xdg.mime.addedAssociations = { "application/java-vm" = [ "idea-community.desktop" "imhex.desktop" ]; "application/json" = text_editors ++ [ "firefox-beta.desktop" ]; "application/mp4" = video_viewers; "application/ogg" = audio_players; "application/octet-stream" = "imhex.desktop"; "application/pdf" = document_viewers; "application/rss+xml" = text_editors; "application/x-chess-pgn" = [ ] ++ text_editors; # fixme "application/x-krita" = "org.kde.krita.desktop"; "application/x-latex" = tex_editors; "application/x-tex" = tex_editors; "application/x-texinfo" = tex_editors; "application/xml" = text_editors; "image/svg+xml" = image_viewers ++ browsers ++ text_editors; "image/*" = image_viewers; "image/vnd.dwg" = cad; "model/*" = cad; "gcode" = [ "PrusaSlicer.desktop" ]; "audio/*" = audio_players; "text/*" = text_editors; "text/plain" = text_editors; "text/markdown" = [ "obsidian.desktop" ] ++ text_editors; "text/csv" = [ "calc.desktop" ] ++ text_editors; "text/html" = browsers ++ text_editors; "text/x-python" = [ "pycharm-community.desktop" ] ++ text_editors; "text/x-c" = [ "clion.desktop" ] ++ text_editors; "text/x-java-source" = [ "idea-community.desktop" ] ++ text_editors; "video/*" = video_viewers; }; }; }