xdg-mime-apps: add module

This commit is contained in:
pacien 2019-09-05 11:25:31 +02:00 committed by Robert Helgesson
parent 0dfa1eef25
commit e347e932af
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89
6 changed files with 133 additions and 1 deletions

View file

@ -0,0 +1,88 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.xdg.mimeApps;
strListOrSingleton = with types;
coercedTo (either (listOf str) str) toList (listOf str);
in
{
meta.maintainers = with maintainers; [ pacien ];
options.xdg.mimeApps = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to manage <filename>$XDG_CONFIG_HOME/mimeapps.list</filename>.
</para>
<para>
The generated file is read-only.
'';
};
# descriptions from
# https://specifications.freedesktop.org/mime-apps-spec/mime-apps-spec-1.0.1.html
associations.added = mkOption {
type = types.attrsOf strListOrSingleton;
default = { };
example = literalExample ''
{
"mimetype1" = [ "foo1.desktop" "foo2.desktop" "foo3.desktop" ];
"mimetype2" = "foo4.desktop";
}
'';
description = ''
Defines additional associations of applications with
mimetypes, as if the .desktop file was listing this mimetype
in the first place.
'';
};
associations.removed = mkOption {
type = types.attrsOf strListOrSingleton;
default = { };
example = { "mimetype1" = "foo5.desktop"; };
description = ''
Removes associations of applications with mimetypes, as if the
.desktop file was <emphasis>not</emphasis> listing this
mimetype in the first place.
'';
};
defaultApplications = mkOption {
type = types.attrsOf strListOrSingleton;
default = { };
example = literalExample ''
{
"mimetype1" = [ "default1.desktop" "default2.desktop" ];
}
'';
description = ''
The default application to be used for a given mimetype. This
is, for instance, the one that will be started when
double-clicking on a file in a file manager. If the
application is no longer installed, the next application in
the list is attempted, and so on.
'';
};
};
config = mkIf cfg.enable {
xdg.configFile."mimeapps.list".text =
let
joinValues = mapAttrs (n: concatStringsSep ";");
in
generators.toINI {} {
"Added Associations" = joinValues cfg.associations.added;
"Removed Associations" = joinValues cfg.associations.removed;
"Default Applications" = joinValues cfg.defaultApplications;
};
};
}

View file

@ -33,8 +33,9 @@ let
(loadModule ./misc/qt.nix { })
(loadModule ./misc/submodule-support.nix { })
(loadModule ./misc/version.nix { })
(loadModule ./misc/xdg.nix { })
(loadModule ./misc/xdg-mime-apps.nix { condition = hostPlatform.isLinux; })
(loadModule ./misc/xdg-user-dirs.nix { condition = hostPlatform.isLinux; })
(loadModule ./misc/xdg.nix { })
(loadModule ./programs/afew.nix { })
(loadModule ./programs/alacritty.nix { })
(loadModule ./programs/alot.nix { })