{ pkgs, ... }:
let
entries = [
(mkItem "${pkgs.libreoffice}/bin/soffice" [
"application/excel"
"application/msexcel"
"application/mspowerpoint"
"application/powerpoint"
"application/vnd.oasis.opendocument.text"
"application/vnd.ms-excel"
"application/vnd.ms-powerpoint"
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
"application/vnd.stardivision.calc"
"application/vnd.stardivision.draw"
"application/vnd.stardivision.impress"
"application/vnd.stardivision.impress-packed"
"application/vnd.stardivision.math"
"application/vnd.stardivision.writer"
"application/vnd.stardivision.writer-global"
"application/vnd.sun.xml.calc"
"application/vnd.sun.xml.calc.template"
"application/vnd.sun.xml.draw"
"application/vnd.sun.xml.draw.template"
"application/vnd.sun.xml.impress"
"application/vnd.sun.xml.impress.template"
"application/vnd.sun.xml.math"
"application/vnd.sun.xml.writer"
"application/vnd.sun.xml.writer.global"
"application/vnd.sun.xml.writer.template"
"application/x-msexcel"
"application/x-mspowerpoint"
"application/x-starcalc"
"application/x-stardraw"
"application/x-starimpress"
"application/x-starmath"
"application/x-starwriter"
])
(mkItem "less" [
"application/x-sh"
"text/*"
])
(mkItem "${pkgs.mupdf}/bin/mupdf-x11" [ "application/pdf" ])
(mkItem "${pkgs.feh}/bin/feh" [ "image/*" ])
(mkItem "${pkgs.antiword}/bin/antiword" [
"application/msword"
"application/octet-stream"
])
(mkItem "${pkgs.lynx}/bin/lynx -dump -force-html" [ "text/html" ])
];
mkItem = p: t: {
prg = p; types = t;
};
mkPrg = { prg, types }:
builtins.concatStringsSep "\n" (map (v: "${v};${prg} %s") types);
in {
home.file.".mailcap".text = ''
${builtins.concatStringsSep "\n" (map mkPrg entries)}
'';
}