programs: factor out a sane.programs.<foo>.mime schema

This commit is contained in:
Colin 2023-07-15 08:44:18 +00:00
parent d459dd0f85
commit 55d64eb598
9 changed files with 58 additions and 40 deletions

View File

@ -1,46 +1,14 @@
{ config, ...}:
{ config, lib, ...}:
let
# TODO: should move all of this into `sane.programs` to not ship broken associations
www = config.sane.programs.web-browser.config.browser.desktop;
pdf = "org.gnome.Evince.desktop";
md = "obsidian.desktop";
thumb = "org.gnome.gThumb.desktop";
video = "vlc.desktop";
# audio = "mpv.desktop";
audio = "vlc.desktop";
email = "aerc.desktop";
in
{
# the xdg mime type for a file can be found with:
# - `xdg-mime query filetype path/to/thing.ext`
# we can have single associations or a list of associations.
# there's also options to *remove* [non-default] associations from specific apps
xdg.mime.enable = true;
xdg.mime.defaultApplications = {
# AUDIO
"audio/flac" = audio;
"audio/mpeg" = audio;
"audio/x-vorbis+ogg" = audio;
# IMAGES
"image/heif" = thumb; # apple codec
"image/png" = thumb;
"image/jpeg" = thumb;
# VIDEO
"video/mp4" = video;
"video/quicktime" = video;
"video/webm" = video;
"video/x-matroska" = video;
# HTML
"text/html" = www;
"x-scheme-handler/http" = www;
"x-scheme-handler/https" = www;
"x-scheme-handler/about" = www;
"x-scheme-handler/unknown" = www;
# RICH-TEXT DOCUMENTS
"application/pdf" = pdf;
"text/markdown" = md;
"x-scheme-handler/mailto" = email;
};
xdg.mime.defaultApplications = lib.mkMerge (
builtins.map
(p: lib.mkIf p.enabled p.mime)
(builtins.attrValues config.sane.programs)
);
}

View File

@ -2,5 +2,8 @@
{ ... }:
{
sane.programs.aerc.secrets.".config/aerc/accounts.conf" = ../../../secrets/common/aerc_accounts.conf.bin;
sane.programs.aerc = {
secrets.".config/aerc/accounts.conf" = ../../../secrets/common/aerc_accounts.conf.bin;
mime."x-scheme-handler/mailto" = "aerc.desktop";
};
}

View File

@ -6,6 +6,7 @@
./assorted.nix
./cozy.nix
./epiphany.nix
./evince.nix
./fontconfig.nix
./git.nix
./gnome-feeds.nix
@ -25,6 +26,7 @@
./neovim.nix
./newsflash.nix
./nix-index.nix
./obsidian.nix
./offlineimap.nix
./ripgrep.nix
./sfeed.nix

View File

@ -0,0 +1,4 @@
{ ... }:
{
sane.programs.evince.mime."application/pdf" = "org.gnome.Evince.desktop";
}

View File

@ -1,4 +1,10 @@
{ pkgs, ... }:
{
sane.programs.gthumb.package = pkgs.gthumb.override { withWebservices = false; };
sane.programs.gthumb = {
# compile without webservices to avoid the expensive webkitgtk dependency
package = pkgs.gthumb.override { withWebservices = false; };
mime."image/heif" = "org.gnome.gThumb.desktop"; # apple codec
mime."image/png" = "org.gnome.gThumb.desktop";
mime."image/jpeg" = "org.gnome.gThumb.desktop";
};
}

View File

@ -0,0 +1,4 @@
{ ... }:
{
sane.programs.obsidian.mime."text/markdown" = "obsidian.desktop";
}

View File

@ -25,5 +25,13 @@ in
[qt]
qt-privacy-ask=0
'';
mime."audio/flac" = "vlc.desktop";
mime."audio/mpeg" = "vlc.desktop";
mime."audio/x-vorbis+ogg" = "vlc.desktop";
mime."video/mp4" = "vlc.desktop";
mime."video/quicktime" = "vlc.desktop";
mime."video/webm" = "vlc.desktop";
mime."video/x-matroska" = "vlc.desktop";
};
}

View File

@ -193,6 +193,16 @@ in
sane.programs.web-browser = {
inherit package;
mime = let
inherit (cfg.browser) desktop;
in {
"text/html" = desktop;
"x-scheme-handler/http" = desktop;
"x-scheme-handler/https" = desktop;
"x-scheme-handler/about" = desktop;
"x-scheme-handler/unknown" = desktop;
};
# env.BROWSER = "${package}/bin/${cfg.browser.libName}";
env.BROWSER = cfg.browser.libName; # used by misc tools like xdg-email, as fallback

View File

@ -79,6 +79,19 @@ let
type = types.bool;
default = true;
};
mime = mkOption {
type = types.attrsOf types.str;
default = {};
description = ''
mime associations. each entry takes the form of:
"<mime type>" = "<launcher>.desktop"
e.g.
{
"audio/flac" = "vlc.desktop";
"application/pdf" = "org.gnome.Evince.desktop";
}
'';
};
persist = mkOption {
type = options.sane.persist.sys.type;
default = {};