{ config, pkgs, lib, font, ... }:
let inherit (import ./variables.nix) key theme color accent font;
in {
  config = {
    xdg.mimeApps = let

      createMimeAssociation = (mime_prefix: application: mime_suffix: {
        "${mime_prefix}/${mime_suffix}" = application;
      });

      createMimeAssociations = (mime_prefix: application: mime_suffixes:
        lib.foldAttrs (n: _: n) { }
        (map (createMimeAssociation mime_prefix application) mime_suffixes));

      mimes = simple
        // (createMimeAssociations "image" "pqiv.desktop" image_suffixes)
        // (createMimeAssociations "video" "mpv.desktop" video_suffixes);

      simple = {
        "text/plain" = "kak.desktop";
        "inode/directory" = "thunar.desktop";

        "application/pdf" = "org.pwmt.zathura.desktop";
        "application/epub+zip" = "org.pwmt.zathura.desktop";

        "text/html" = "firefox";
        "x-scheme-handler/http" = "firefox";
        "x-scheme-handler/https" = "firefox";

        "x-scheme-handler/magnet" = "torrent.desktop";
        "application/x-bittorrent" = "torrent.desktop";

        "x-scheme-handler/mailto" = "thunderbird.desktop";
      };

      image_suffixes = [
        "bmp"
        "cgm"
        "dicom-rle"
        "emf"
        "example"
        "fits"
        "g3fax"
        "gif"
        "heic"
        "heif"
        "ief"
        "jls"
        "jp2"
        "jpeg"
        "jpeg"
        "jpg"
        "jpm"
        "jpx"
        "ktx"
        "naplps"
        "pjpeg"
        "png"
        "prs.btif"
        "prs.pti"
        "pwg-raster"
        "svg+xml-compressed"
        "svg+xml"
        "t38"
        "tiff-fx"
        "tiff"
        "vnd.adobe.photoshop"
        "vnd.airzip.accelerator.azv"
        "vnd.cns.inf2"
        "vnd.dece.graphic"
        "vnd.djvu"
        "vnd.dvb.subtitle"
        "vnd.dwg"
        "vnd.dxf"
        "vnd.fastbidsheet"
        "vnd.fpx"
        "vnd.fst"
        "vnd.fujixerox.edmics-mmr"
        "vnd.fujixerox.edmics-rlc"
        "vnd.globalgraphics.pgb"
        "vnd.microsoft.icon"
        "vnd.mix"
        "vnd.mozilla.apng"
        "vnd.ms-modi"
        "vnd.net-fpx"
        "vnd.radiance"
        "vnd.rn-realpix"
        "vnd.sealed.png"
        "vnd.sealedmedia.softseal.gif"
        "vnd.sealedmedia.softseal.jpg"
        "vnd.svf"
        "vnd.tencent.tap"
        "vnd.valve.source.texture"
        "vnd.wap.wbmp"
        "vnd.xiff"
        "vnd.zbrush.pcx"
        "webp"
        "wmf"
        "x-bmp"
        "x-cmu-raster"
        "x-compressed-xcf"
        "x-emf"
        "x-eps"
        "x-exr"
        "x-fits"
        "x-freehand"
        "x-gimp-gbr"
        "x-gimp-gih"
        "x-gimp-pat"
        "x-icon"
        "x-pcx"
        "x-png"
        "x-portable-anymap"
        "x-portable-bitmap"
        "x-portable-graymap"
        "x-portable-pixmap"
        "x-psd"
        "x-psp"
        "x-rgb"
        "x-sgi"
        "x-targa"
        "x-tga"
        "x-vsd"
        "x-webp"
        "x-wmf"
        "x-xbitmap"
        "x-xcdr"
        "x-xcf"
        "x-xcursor"
        "x-xpixmap"
        "x-xwindowdump"
      ];

      video_suffixes = [
        "1d-interleaved-parityfec"
        "3gp"
        "3gpp"
        "3gpp-tt"
        "3gpp2"
        "BMPEG"
        "BT656"
        "CelB"
        "DV"
        "H261"
        "H263"
        "H263-1998"
        "H263-2000"
        "H264"
        "H264-RCDO"
        "H264-SVC"
        "H265"
        "JPEG"
        "MP1S"
        "MP2P"
        "MP2T"
        "MP4V-ES"
        "MPV"
        "SMPTE292M"
        "VP8"
        "avi"
        "divx"
        "dv"
        "encaprtp"
        "example"
        "fli"
        "flv"
        "iso.segment"
        "jpeg2000"
        "mj2"
        "mkv"
        "mp2t"
        "mp4"
        "mp4v-es"
        "mpeg"
        "mpeg-system"
        "mpeg4-generic"
        "msvideo"
        "nv"
        "ogg"
        "parityfec"
        "pointer"
        "quicktime"
        "raptorfec"
        "raw"
        "rtp-enc-aescm128"
        "rtploopback"
        "rtx"
        "ulpfec"
        "vc1"
        "vnd.CCTV"
        "vnd.dece.hd"
        "vnd.dece.mobile"
        "vnd.dece.mp4"
        "vnd.dece.pd"
        "vnd.dece.sd"
        "vnd.dece.video"
        "vnd.directv.mpeg"
        "vnd.directv.mpeg-tts"
        "vnd.divx"
        "vnd.dlna.mpeg-tts"
        "vnd.dvb.file"
        "vnd.fvt"
        "vnd.hns.video"
        "vnd.iptvforum.1dparityfec-1010"
        "vnd.iptvforum.1dparityfec-2005"
        "vnd.iptvforum.2dparityfec-1010"
        "vnd.iptvforum.2dparityfec-2005"
        "vnd.iptvforum.ttsavc"
        "vnd.iptvforum.ttsmpeg2"
        "vnd.motorola.video"
        "vnd.motorola.videop"
        "vnd.mpegurl"
        "vnd.ms-playready.media.pyv"
        "vnd.nokia.interleaved-multimedia"
        "vnd.nokia.mp4vr"
        "vnd.nokia.videovoip"
        "vnd.objectvideo"
        "vnd.radgamettools.bink"
        "vnd.radgamettools.smacker"
        "vnd.rn-realvideo"
        "vnd.sealed.mpeg1"
        "vnd.sealed.mpeg4"
        "vnd.sealed.swf"
        "vnd.sealedmedia.softseal.mov"
        "vnd.uvvu.mp4"
        "vnd.vivo"
        "webm"
        "x-anim"
        "x-annodex"
        "x-avi"
        "x-flc"
        "x-fli"
        "x-flic"
        "x-flv"
        "x-javafx"
        "x-m4v"
        "x-matroska"
        "x-matroska-3d"
        "x-mpeg"
        "x-mpeg-system"
        "x-mpeg2"
        "x-mpeg3"
        "x-ms-afs"
        "x-ms-asf"
        "x-ms-asf-plugin"
        "x-ms-asx"
        "x-ms-wm"
        "x-ms-wmv"
        "x-ms-wmx"
        "x-ms-wvx"
        "x-ms-wvxvideo"
        "x-msvideo"
        "x-nsv"
        "x-ogm"
        "x-ogm+ogg"
        "x-sgi-movie"
        "x-theora"
        "x-theora+ogg"
      ];
    in {
      enable = true;
      defaultApplications = mimes;
    };

  };
}
