{ machine, ... }@inputs: let browsers = [ "firefox.desktop" ]; defaultApps = { text = [ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanvim.desktop" ]; image = [ "org.gnome.Loupe.desktop" ]; audio = [ "mpv.desktop" ]; video = [ "mpv.desktop" ]; directory = [ "nautilus.desktop" "org.gnome.Nautilus.desktop" ]; mail = [ ] ++ browsers; calendar = [ ] ++ browsers; browser = [ ] ++ browsers; office = [ "libreoffice.desktop" ]; pdf = [ ] ++ browsers; ebook = [ ]; magnet = [ ]; signal = [ "signal.desktop" ]; }; mimeMap = import ./mimemap.nix; associations = with inputs.lib; with builtins; listToAttrs ( flatten (mapAttrsToList (key: map (type: attrsets.nameValuePair type defaultApps."${key}")) mimeMap) ); removedAssociations = { "text/plain" = "dev.zed.Zed.desktop"; "application/x-zerosize" = "dev.zed.Zed.desktop"; }; in { imports = machine.program { name = "xdg"; inherit inputs; requirements = [ ]; home-config = { config, pkgs, ... }: { home.packages = with pkgs; [ xdg-utils ]; xdg = { enable = true; mime.enable = true; configHome = "${config.home.homeDirectory}/.config"; userDirs = { enable = true; documents = "${config.home.homeDirectory}/Documents"; desktop = "${config.home.homeDirectory}/Documents"; download = "${config.home.homeDirectory}/Downloads"; music = "${config.home.homeDirectory}/Documents/personal/music"; pictures = "${config.home.homeDirectory}/Documents/personal/pictures"; }; configFile."mimeapps.list".force = true; mimeApps = { enable = true; associations.added = associations; associations.removed = removedAssociations; defaultApplications = associations; }; }; }; system-config = _: { xdg = { mime = { enable = true; defaultApplications = associations; addedAssociations = associations; inherit removedAssociations; }; }; }; }; }