{ config, lib, options, ... }: let cfg = config.xdg.mime; mkMimeSource = name: value: lib.nameValuePair "xdg/${name}-mimeapps.list" (lib.mkIf (value.defaultApplications != { }) { text = lib.generators.toINI { } { "Default Applications" = value.defaultApplications; }; }); xdgMimeAssociations = { name, lib, ... }: { options.defaultApplications = options.xdg.mime.defaultApplications; }; in { options.xdg.mime.desktops = lib.mkOption { type = with lib.types; attrsOf (submodule xdgMimeAssociations); description = '' Additional desktop-specific associations. ::: {.note} This can only specify default applications for a specific MIME type and cannot be used to remove or add associations. ::: ''; default = { }; example = { gnome.defaultApplications = { "application/pdf" = "firefox.desktop"; }; }; }; config = lib.mkIf (cfg.desktops != { }) { environment.etc = lib.mapAttrs' mkMimeSource cfg.desktops; }; }