{ config, lib, this, ... }: with lib; { imports = let withBase = s: ["home-manager" "users" my.username "xdg" s]; in [ (mkAliasOptionModule ["dirs" "cache"] (withBase "cacheHome")) (mkAliasOptionModule ["dirs" "config"] (withBase "configHome")) (mkAliasOptionModule ["dirs" "data"] (withBase "dataHome")) (mkAliasOptionModule ["dirs" "state"] (withBase "stateHome")) (mkAliasOptionModule ["userDirs"] (withBase "userDirs")) ]; xdg.portal = mkIf this.isHeadful { enable = true; }; hm.xdg = mkMerge [ { enable = true; userDirs = let inherit (config.my) home; tmp = home + "/tmp"; in { enable = true; desktop = tmp; documents = "${home}/doc"; download = tmp; music = tmp; pictures = tmp; publicShare = "${home}/share"; templates = tmp; videos = tmp; }; } (mkIf this.isHeadful { mimeApps = { enable = true; # https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types defaultApplications = mkMerge (mapAttrsToList (n: v: genAttrs v (_: ["${n}.desktop"])) { emacsclient = [ "application/json" "application/ld+json" "application/vnd.ms-publisher" "application/x-c" "application/x-desktop" "application/x-httpd-php" "application/x-sh" "application/x-tex" "application/xhtml+xml" "application/xml" "text/css" "text/csv" "text/javascript" "text/markdown" "text/plain" "text/x-lisp" ]; firefox = [ "text/html" "x-scheme-handler/http" "x-scheme-handler/https" ]; mpv = [ "audio/3gpp" "audio/3gpp2" "audio/aac" "audio/flac" "audio/mp3" "audio/mpeg" "audio/ogg" "audio/opus" "audio/wav" "audio/webm" "image/avif" "image/bmp" "image/gif" "image/jpeg" "image/jpg" "image/png" "image/tiff" "image/vnd.microsoft.icon" "image/webp" "video/mkv" "video/mp2t" "video/mp4" "video/mpeg" "video/ogg" "video/webm" "video/x-matroska" "video/x-msvideo" ]; "org.pwmt.zathura" = [ "application/pdf" "application/epub+zip" ]; }); }; }) ]; }