{ 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; defaultApplications = mkMerge (mapAttrsToList (n: v: genAttrs v (_: ["${n}.desktop"])) { emacsclient = [ "application/json" "application/vnd.ms-publisher" "application/x-desktop" "application/x-shellscript" "application/x-trash" "application/x-wine-extension-ini" "application/xml" "text/markdown" "text/plain" ]; firefox = [ "text/html" "x-scheme-handler/http" "x-scheme-handler/https" ]; imv = [ "image/bmp" "image/gif" "image/jpeg" "image/jpg" "image/png" "image/svg+xml" "image/tiff" "image/webp" ]; mpv = [ "audio/aac" "audio/flac" "audio/mp3" "audio/ogg" "audio/wav" "audio/webm" "video/mkv" "video/mp4" "video/ogg" "video/webm" "video/x-matroska" ]; }); }; }) ]; }