xdg-mime type package options (#5920)
* xdg-mime: allow overrides to shared-mime-info and desktop-file-utils The `xdg-mime` module now exposes packages to determine what will be run for update-mime-database and update-desktop-database. This allows users to select a different version of these packages if the are incompatible. This should, in combination with an override to the version of `shared-mime-info` (can be found here notalltim/home-manager-config#4), resolve #4955, #5102, #4682, and possibly #4941. The problem seems to stem from a mismatch in the version of `shared-mime-info` with the host. I also switched from using `buildPackages` to `pkgs` to improve cross-compilation compatibility. * xdg-mime: Add tests for xdg-mime module The xdg-mime module was missing tests so I added basic test for all the options and checked the basic behavior. It covers ensuring that the proper files/folders are created and that the package overrides work.
This commit is contained in:
parent
271c83e21e
commit
038630363e
6 changed files with 114 additions and 19 deletions
|
@ -5,33 +5,50 @@ with lib;
|
||||||
let
|
let
|
||||||
|
|
||||||
cfg = config.xdg.mime;
|
cfg = config.xdg.mime;
|
||||||
|
inherit (lib) getExe getExe';
|
||||||
|
|
||||||
in {
|
in {
|
||||||
options = {
|
options = {
|
||||||
xdg.mime.enable = mkOption {
|
xdg.mime = {
|
||||||
type = types.bool;
|
enable = mkOption {
|
||||||
default = pkgs.stdenv.hostPlatform.isLinux;
|
type = types.bool;
|
||||||
defaultText =
|
default = pkgs.stdenv.hostPlatform.isLinux;
|
||||||
literalExpression "true if host platform is Linux, false otherwise";
|
defaultText =
|
||||||
description = ''
|
literalExpression "true if host platform is Linux, false otherwise";
|
||||||
Whether to install programs and files to support the
|
description = ''
|
||||||
XDG Shared MIME-info specification and XDG MIME Applications
|
Whether to install programs and files to support the
|
||||||
specification at
|
XDG Shared MIME-info specification and XDG MIME Applications
|
||||||
<https://specifications.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html>
|
specification at
|
||||||
and
|
<https://specifications.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html>
|
||||||
<https://specifications.freedesktop.org/mime-apps-spec/mime-apps-spec-latest.html>,
|
and
|
||||||
respectively.
|
<https://specifications.freedesktop.org/mime-apps-spec/mime-apps-spec-latest.html>,
|
||||||
'';
|
respectively.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
sharedMimeInfoPackage = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.shared-mime-info;
|
||||||
|
defaultText = literalExpression "pkgs.shared-mime-info";
|
||||||
|
description = "The package to use when running update-mime-database.";
|
||||||
|
};
|
||||||
|
|
||||||
|
desktopFileUtilsPackage = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.desktop-file-utils;
|
||||||
|
defaultText = literalExpression "pkgs.desktop-file-utils";
|
||||||
|
description =
|
||||||
|
"The package to use when running update-desktop-database.";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
config = mkIf config.xdg.mime.enable {
|
|
||||||
assertions =
|
assertions =
|
||||||
[ (hm.assertions.assertPlatform "xdg.mime" pkgs platforms.linux) ];
|
[ (hm.assertions.assertPlatform "xdg.mime" pkgs platforms.linux) ];
|
||||||
|
|
||||||
home.packages = [
|
home.packages = [
|
||||||
# Explicitly install package to provide basic mime types.
|
# Explicitly install package to provide basic mime types.
|
||||||
pkgs.shared-mime-info
|
cfg.sharedMimeInfoPackage
|
||||||
|
|
||||||
# Make sure the target directories will be real directories.
|
# Make sure the target directories will be real directories.
|
||||||
(pkgs.runCommandLocal "dummy-xdg-mime-dirs1" { } ''
|
(pkgs.runCommandLocal "dummy-xdg-mime-dirs1" { } ''
|
||||||
|
@ -46,12 +63,12 @@ in {
|
||||||
if [[ -w $out/share/mime && -w $out/share/mime/packages && -d $out/share/mime/packages ]]; then
|
if [[ -w $out/share/mime && -w $out/share/mime/packages && -d $out/share/mime/packages ]]; then
|
||||||
XDG_DATA_DIRS=$out/share \
|
XDG_DATA_DIRS=$out/share \
|
||||||
PKGSYSTEM_ENABLE_FSYNC=0 \
|
PKGSYSTEM_ENABLE_FSYNC=0 \
|
||||||
${pkgs.buildPackages.shared-mime-info}/bin/update-mime-database \
|
${getExe cfg.sharedMimeInfoPackage} \
|
||||||
-V $out/share/mime > /dev/null
|
-V $out/share/mime > /dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -w $out/share/applications ]]; then
|
if [[ -w $out/share/applications ]]; then
|
||||||
${pkgs.buildPackages.desktop-file-utils}/bin/update-desktop-database \
|
${getExe' cfg.desktopFileUtilsPackage "update-desktop-database"} \
|
||||||
$out/share/applications
|
$out/share/applications
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -6,4 +6,7 @@
|
||||||
xdg-default-locations = ./default-locations.nix;
|
xdg-default-locations = ./default-locations.nix;
|
||||||
xdg-user-dirs-null = ./user-dirs-null.nix;
|
xdg-user-dirs-null = ./user-dirs-null.nix;
|
||||||
xdg-portal = ./portal.nix;
|
xdg-portal = ./portal.nix;
|
||||||
|
xdg-mime = ./mime.nix;
|
||||||
|
xdg-mime-disabled = ./mime-disabled.nix;
|
||||||
|
xdg-mime-package = ./mime-packages.nix;
|
||||||
}
|
}
|
||||||
|
|
10
tests/modules/misc/xdg/mime-disabled.nix
Normal file
10
tests/modules/misc/xdg/mime-disabled.nix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{ ... }: {
|
||||||
|
config = {
|
||||||
|
xdg.mime.enable = false;
|
||||||
|
nmt.script = ''
|
||||||
|
# assert that neither application is run
|
||||||
|
assertPathNotExists home-path/share/applications/mimeinfo.cache
|
||||||
|
assertPathNotExists home-path/share/applications/mime
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
3
tests/modules/misc/xdg/mime-expected.cache
Normal file
3
tests/modules/misc/xdg/mime-expected.cache
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[MIME Cache]
|
||||||
|
text/html=mime-test.desktop;
|
||||||
|
text/xml=mime-test.desktop;
|
38
tests/modules/misc/xdg/mime-packages.nix
Normal file
38
tests/modules/misc/xdg/mime-packages.nix
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{ config, ... }:
|
||||||
|
let inherit (config.lib.test) mkStubPackage;
|
||||||
|
in {
|
||||||
|
config = {
|
||||||
|
xdg.mime.enable = true;
|
||||||
|
xdg.mime.sharedMimeInfoPackage = mkStubPackage {
|
||||||
|
name = "update-mime-database";
|
||||||
|
buildScript = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
echo '#!/bin/sh' > $out/bin/update-mime-database
|
||||||
|
echo 'mkdir -p $out/share/mime && touch $out/share/mime/mime.cache' >> $out/bin/update-mime-database
|
||||||
|
chmod +x $out/bin/update-mime-database
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
xdg.mime.desktopFileUtilsPackage = mkStubPackage {
|
||||||
|
name = "desktop-file-utils";
|
||||||
|
buildScript = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
echo '#!/bin/sh' > $out/bin/update-desktop-database
|
||||||
|
echo 'mkdir -p $out/share/applications/ && ln -s ${
|
||||||
|
./mime-expected.cache
|
||||||
|
} $out/share/applications/mimeinfo.cache' >> $out/bin/update-desktop-database
|
||||||
|
chmod +x $out/bin/update-desktop-database
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
nmt.script = ''
|
||||||
|
assertFileExists home-path/share/applications/mimeinfo.cache # Check that update-desktop-database created file
|
||||||
|
# Check that update-desktop-database file matches expected
|
||||||
|
assertFileContent \
|
||||||
|
home-path/share/applications/mimeinfo.cache \
|
||||||
|
${./mime-expected.cache}
|
||||||
|
|
||||||
|
assertDirectoryExists home-path/share/mime # Check that update-mime-database created directory
|
||||||
|
assertFileExists home-path/share/mime/mime.cache # Check that update-mime-database created file
|
||||||
|
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
24
tests/modules/misc/xdg/mime.nix
Normal file
24
tests/modules/misc/xdg/mime.nix
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{ ... }: {
|
||||||
|
config = {
|
||||||
|
xdg.mime.enable = true;
|
||||||
|
xdg.desktopEntries = {
|
||||||
|
mime-test = { # mime info test
|
||||||
|
name = "mime-test";
|
||||||
|
mimeType = [ "text/html" "text/xml" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
assertFileExists home-path/share/applications/mimeinfo.cache # Check that update-desktop-database created file
|
||||||
|
# Check that update-desktop-database file matches expected
|
||||||
|
assertFileContent \
|
||||||
|
home-path/share/applications/mimeinfo.cache \
|
||||||
|
${./mime-expected.cache}
|
||||||
|
|
||||||
|
assertDirectoryExists home-path/share/mime # Check that update-mime-database created directory
|
||||||
|
assertDirectoryNotEmpty home-path/share/mime # Check that update-mime-database created files
|
||||||
|
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue