From 0dc4fa78600d480f88446ec18c0355630632c6ee Mon Sep 17 00:00:00 2001 From: h7x4 Date: Tue, 13 Aug 2024 11:12:06 +0200 Subject: [PATCH] home/mimetypes: refactor --- home/config/xdg/mimetypes.nix | 226 +++++++++++++++------------------- 1 file changed, 102 insertions(+), 124 deletions(-) diff --git a/home/config/xdg/mimetypes.nix b/home/config/xdg/mimetypes.nix index 9e09ec6..2e69742 100644 --- a/home/config/xdg/mimetypes.nix +++ b/home/config/xdg/mimetypes.nix @@ -1,143 +1,121 @@ { lib, ... }: - let + mime = { + image = { + apng = "image/apng"; + avif = "image/avif"; + bmp = "image/bmp"; + gif = "image/gif"; + ico = "image/vnd.microsoft.icon"; + icox = "image/x-icon"; + jpg = "image/jpeg"; + jxl = "image/jxl"; + pic = "image/x-pict"; + png = "image/png"; + psd = "image/vnd.adobe.photoshop"; + svg = "image/svg+xml"; + tif = "image/tif"; + tiff = "image/tiff"; + webp = "image/webp"; + xbm = "image/x-xbitmap"; + xpm = "image/x-xpixmap"; + }; + + audio = { + "3g2-audio" = "audio/3gpp"; + "3gp-audio" = "audio/3gpp"; + aac = "audio/aac"; + aiff = "audio/aiff"; + flac = "audio/flac"; + mkv = "audio/x-matroska"; + mpeg = "audio/mpeg"; # NOTE: this is the real mp3, but the other one also exists + mpeg3 = "audio/mpeg3"; + mp3 = "audio/mp3"; + mp4 = "audio/mp4"; + ogg = "audio/ogg"; + opus = "audio/opus"; + wav = "audio/wav"; + wavx = "audio/x-wav"; + webm-audio = "audio/webm"; + }; + + video = { + "3g2-video" = "video/3gpp"; + "3gp-video" = "video/3gpp"; + avi = "video/x-msvideo"; + flv = "video/x-flv"; + m4v = "video/x-m4v"; + mkv = "video/x-matroska"; + mov = "video/quicktime"; + mp4 = "video/mp4"; + mpeg = "video/mpeg"; + ogv = "video/ogg"; + webm-video = "video/webm"; + wmv = "video/x-ms-wmv"; + }; + + font = { + otf = "font/otf"; + ttf = "font/ttf"; + woff = "font/woff"; + woff2 = "font/woff2"; + }; + + documents = { + azv = "application/vnd.amazon.ebook"; + cbr = "application/vnd.comicbook+rar"; + cbrx = "application/x-cbr"; + cbz = "application/vnd.comicbook+zip"; + cbzx = "application/x-cbz"; + djvu = "image/vnd.djvu"; + epub = "application/epub+zip"; + pdf = "application/pdf"; + }; + + code = { + css = "text/css"; + csv = "text/csv"; + html = "text/html"; + txt = "text/plain"; + xhtml = "application/xhtml+xml"; + xml = "text/xml"; + }; + + misc = { + http = "x-scheme-handler/http"; + https = "x-scheme-handler/https"; + wine-ini = "application/x-wine-extension-ini"; + ics = "text/calendar"; + url = "application/x-mswinurl"; + }; + }; # Applications - google-chrome = "google-chrome.desktop"; firefox = "firefox.desktop"; - gimp = "gimp.desktop"; - inkscape = "org.inkscape.Inkscape.desktop"; vscode = "code.desktop"; mpv = "mpv.desktop"; zathura = "org.pwmt.zathura.desktop"; sxiv = "sxiv.desktop"; font-viewer = "org.gnome.font-viewer.desktop"; - - # Formats - "3g2-audio" = "audio/3gpp"; - "3g2-video" = "video/3gpp"; - "3gp-audio" = "audio/3gpp"; - "3gp-video" = "video/3gpp"; - aac = "audio/aac"; - avi = "video/x-msvideo"; - bmp = "image/bmp"; - cbr = "application/vnd.comicbook+rar"; - cbrx = "application/x-cbr"; - cbz = "application/vnd.comicbook+zip"; - cbzx = "application/x-cbz"; - djvu = "image/vnd.djvu"; - epub = "application/epub+zip"; - flv = "video/x-flv"; - gif = "image/gif"; - html = "text/html"; - http = "x-scheme-handler/http"; - https = "x-scheme-handler/https"; - ico = "image/vnd.microsoft.icon"; - icox = "image/x-icon"; - ini = "application/x-wine-extension-ini"; - jpg = "image/jpeg"; - m4v = "video/x-m4v"; - mkv = "video/x-matroska"; - mov = "video/quicktime"; - mp3 = "audio/mpeg"; - mp4 = "video/mp4"; - mpeg = "video/mpeg"; - ogg = "audio/ogg"; - ogv = "video/ogg"; - opus = "audio/opus"; - otf = "font/otf"; - pdf = "application/pdf"; - pic = "image/x-pict"; - png = "image/png"; - psd = "image/vnd.adobe.photoshop"; - svg = "image/svg+xml"; - tiff = "image/tiff"; - ttf = "font/ttf"; - txt = "text/plain"; - url = "application/x-mswinurl"; - wav = "audio/wav"; - wavx = "audio/x-wav"; - webm-audio = "audio/webm"; - webm-video = "video/webm"; - webp = "image/webp"; - wmv = "video/x-ms-wmv"; - woff = "font/woff"; - woff2 = "font/woff2"; - xbm = "image/x-xbitmap"; - xcf = "image/x-xcf"; - xhtml = "application/xhtml+xml"; - xml = "text/xml"; - xpm = "image/x-xpixmap"; - - - # Generalizations - audio-player = mpv; - gui-text-editor = vscode; - image-viewer = sxiv; - pdf-viewer = zathura; - video-player = mpv; - web-browser = firefox; - in { - xdg.configFile."mimeapps.list".force = true; xdg.mimeApps = { enable = true; # associations.added = {}; # associations.removed = {}; - defaultApplications = { - ${"3g2-audio"} = audio-player; - ${"3g2-video"} = video-player; - ${"3gp-audio"} = audio-player; - ${"3gp-video"} = video-player; - ${aac} = audio-player; - ${avi} = video-player; - ${bmp} = image-viewer; - ${cbrx} = zathura; - ${cbr} = zathura; - ${cbzx} = zathura; - ${cbz} = zathura; - ${djvu} = pdf-viewer; - ${epub} = zathura; - ${flv} = video-player; - ${gif} = image-viewer; - ${html} = web-browser; - ${https} = web-browser; - ${http} = web-browser; - ${icox} = image-viewer; - ${ico} = image-viewer; - ${jpg} = image-viewer; - ${m4v} = video-player; - ${mkv} = video-player; - ${mov} = video-player; - ${mp3} = audio-player; - ${mp4} = video-player; - ${mpeg} = video-player; - ${ogg} = audio-player; - ${ogv} = video-player; - ${opus} = audio-player; - ${otf} = font-viewer; - ${pdf} = pdf-viewer; - ${pic} = image-viewer; - ${png} = image-viewer; - ${psd} = gimp; - ${svg} = image-viewer; - ${tiff} = image-viewer; - ${ttf} = font-viewer; - ${txt} = gui-text-editor; - ${url} = web-browser; - ${wav} = audio-player; - ${webm-audio} = audio-player; - ${webm-video} = video-player; - ${webp} = image-viewer; - ${wmv} = video-player; - ${woff2} = font-viewer; - ${woff} = font-viewer; - ${xbm} = image-viewer; - ${xcf} = gimp; - ${xhtml} = web-browser; - ${xml} = gui-text-editor; - ${xpm} = image-viewer; + defaultApplications = + (lib.mapAttrs' (_: v: lib.nameValuePair v sxiv) mime.image) + // (lib.mapAttrs' (_: v: lib.nameValuePair v mpv) mime.audio) + // (lib.mapAttrs' (_: v: lib.nameValuePair v mpv) mime.video) + // (lib.mapAttrs' (_: v: lib.nameValuePair v font-viewer) mime.font) + // (lib.mapAttrs' (_: v: lib.nameValuePair v zathura) mime.documents) + // (lib.mapAttrs' (_: v: lib.nameValuePair v vscode) mime.code) + // { + ${mime.misc.http} = firefox; + ${mime.misc.https} = firefox; + ${mime.misc.wine-ini} = vscode; + ${mime.misc.ics} = vscode; + ${mime.misc.url} = firefox; }; }; }