diff --git a/modules/misc/news.nix b/modules/misc/news.nix index f1074fc16..80aeb47c9 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1268,6 +1268,18 @@ in A new module is available: 'services.unison'. ''; } + + { + time = "2019-12-01T22:10:23+00:00"; + condition = hostPlatform.isLinux; + message = '' + A new module is available: 'xdg.mime'. + + If enabled, which it is by default, this module will create + the XDG mime database and desktop file database caches from + programs installed via Home Manager. + ''; + } ]; }; } diff --git a/modules/misc/xdg-mime.nix b/modules/misc/xdg-mime.nix new file mode 100644 index 000000000..0063e43d2 --- /dev/null +++ b/modules/misc/xdg-mime.nix @@ -0,0 +1,49 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.xdg.mime; + +in + +{ + options = { + xdg.mime.enable = mkOption { + type = types.bool; + default = true; + description = '' + Whether to install programs and files to support the + XDG Shared MIME-info specification and XDG MIME Applications + specification at + + and + , + respectively. + ''; + }; + }; + + config = mkIf config.xdg.mime.enable { + home.packages = [ + # Explicitly install package to provide basic mime types. + pkgs.shared-mime-info + ]; + + home.extraProfileCommands = '' + if [[ -w $out/share/mime && -d $out/share/mime/packages ]]; then + XDG_DATA_DIRS=$out/share \ + PKGSYSTEM_ENABLE_FSYNC=0 \ + ${pkgs.buildPackages.shared-mime-info}/bin/update-mime-database \ + -V $out/share/mime > /dev/null + fi + + if [[ -w $out/share/applications ]]; then + ${pkgs.buildPackages.desktop-file-utils}/bin/update-desktop-database \ + $out/share/applications + fi + ''; + }; + +} diff --git a/modules/modules.nix b/modules/modules.nix index f32a9d7c0..99543de0f 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -33,6 +33,7 @@ let (loadModule ./misc/qt.nix { }) (loadModule ./misc/submodule-support.nix { }) (loadModule ./misc/version.nix { }) + (loadModule ./misc/xdg-mime.nix { condition = hostPlatform.isLinux; }) (loadModule ./misc/xdg-mime-apps.nix { condition = hostPlatform.isLinux; }) (loadModule ./misc/xdg-user-dirs.nix { condition = hostPlatform.isLinux; }) (loadModule ./misc/xdg.nix { })